字典与数组第八讲:工作表数据计算时为什么要采用数组公式(二)

《VBA数组与字典方案》教程(10144533)是我推出的第三套教程,目前已经是第二版修订了。这套教程定位于中级,字典是VBA的精华,我要求学员必学。7.1.3.9教程和手册掌握后,可以解决大多数工作中遇到的实际问题。

这套字典教程共两册,一共八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:字典与数组第八讲:工作表数据计算时为什么要采用数组公式(二)

【分享成果,随喜正能量】念佛的人,功夫从从相貌上看,从体质上看。真正修行的人念佛功夫得力,相貌就改变了,身体就强壮了! 确实,我们的相貌会随着我们修行的功夫转变。。

第八讲 工作表数据计算时为什么要采用数组公式(二)

大家好,今日继续讲解VBA数组与字典解决方案,今日的内容是第8讲。在上一讲的数组专题中,我详细地讲了利用数组公式的好处,或许有的朋友还没有充分理解,今日继续给大家讲解。我在讲解中,力争每篇文章可以作为一个独立的单元,但不能完全避免知识点的引用,还希望有志于学习的朋友,能多看看本书的其他文章。

今日继续讲解为什么要采用数组公式,难度比上一讲要难。

1实际问题的场景

我们先看下面的截图:

我们的目标是在表中计算出日期为1月1日,人员为张1的合计产量,怎么办呢?很多人会想到筛选的办法,没错,可以,但太麻烦,如果数据少还可以试试,如果数据多,工作表处理筛选往往会慢些。

2 场景问题的分析

我们考虑利用数组公私的方案,用数组公式的方法来解决.

1)在表工作表I2单元格中录入公式 "=SUM((A2:A14=G2)*(C2:C14=H2)*(D2:D14))"公式。

2)按下"Ctrl+Shift+Enter"组合键。

这个时候,你会发现想要的结果已经出现了:

数组公式就是这么简单,解决问题也是这么简单。从这次用的公式可以看出,连判断的条件函数IF 都不要了,实际上这里的"="符号就是起到了一个类似IF 的效果。

3数组公式的执行过程

这里再说明一下公式=SUM((A2:A14=G2)*(C2:C14=H2)*(D2:D14))的执行过程:

  1. 公式中A2:A14 表示数组区域,这个相信已经不需要再说明了,放到数组公式中就是依次取数组中的各个数值,也就是依次取日期中的值。

2) A2:A14=G2,实际上就是拿日期中的每一个值依次与G2 中的日期进行比对,如果相等则结果为True,即1,如果不相等则为False 即为0。到了这里也许你有一点明白了,如果不相等,则后面的无需再继续下去了,因为公式里用的全部是"*"乘积符号,任何数

乘0 等于0。

3)再继续判断C2:C14 区域,也就是用姓名依次比对,如果和H2 中的姓名相同,则为Ture,即1,如果为False,即0,继续下一个回合。如果此项也为Ture,

4)很明显前面两项的结果为1*1=1,再乘以D2:D14 数组中对应的数字,即符合条件的"实绩"。

以第一个符合条件的第一条记录为例,在数组公式运行的第一个回合为SUM(1*1*200),结

果当然为200 了,然后再在数组公式运行的第二个回合为SUM(1*1*203),结果当然为203 了,我们最终就得到了200+203=403的最终结果。

如果理解了,是不是感觉很简单呢?不过如此。

数组公式非常有用,效率也高,但真正的理解、熟练掌握也不是一件很容易的事。但大家记住数组中的数据是一一对应的,放到数组公式中使用时,数组中的数据会按顺序依次参与相应的运算。

今日内容回向:

1 TRUE参与四则运算时代表是什么数字?

2 FALSE参与四则运算时代表是什么数字?

3 数组可以代替SUMIF的运算,是如何实践的?

我多年的VBA实践经验,全部浓缩在以下教程中:

相关推荐
吱吱鼠叔3 分钟前
MATLAB方程求解:1.线性方程组
开发语言·matlab·php
Antonio9157 分钟前
【CMake】使用CMake在Visual Studio内构建多文件夹工程
开发语言·c++·visual studio
LyaJpunov21 分钟前
C++中move和forword的区别
开发语言·c++
程序猿练习生26 分钟前
C++速通LeetCode中等第9题-合并区间
开发语言·c++·leetcode
一名路过的小码农36 分钟前
C/C++动态库函数导出 windows
c语言·开发语言·c++
m0_6312704038 分钟前
标准c语言(一)
c语言·开发语言·算法
万河归海42838 分钟前
C语言——二分法搜索数组中特定元素并返回下标
c语言·开发语言·数据结构·经验分享·笔记·算法·visualstudio
Messiah___44 分钟前
【论文阅读】Slim Fly: A Cost Effective Low-Diameter Network Topology 一种经济高效的小直径网络拓扑
开发语言·php
农民小飞侠1 小时前
python AutoGen接入开源模型xLAM-7b-fc-r,测试function calling的功能
开发语言·python
指尖流烟1 小时前
C#调用图表的使用方法
开发语言·c#