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

《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实践经验,全部浓缩在以下教程中:

相关推荐
散峰而望25 分钟前
【算法竞赛】C++函数详解:从定义、调用到高级用法
c语言·开发语言·数据结构·c++·算法·github
冷凝雨31 分钟前
复数乘法(C & Simulink)
c语言·开发语言·信号处理·simulink·dsp
CoderCodingNo35 分钟前
【GESP】C++五级真题(贪心思想考点) luogu-B4071 [GESP202412 五级] 武器强化
开发语言·c++·算法
0和1的舞者42 分钟前
Spring AOP详解(一)
java·开发语言·前端·spring·aop·面向切面
MoonBit月兔1 小时前
年终 Meetup:走进腾讯|AI 原生编程与 Code Agent 实战交流会
大数据·开发语言·人工智能·腾讯云·moonbit
智航GIS1 小时前
8.2 面向对象
开发语言·python
小小星球之旅1 小时前
CompletableFuture学习
java·开发语言·学习
kylezhao20192 小时前
C# 语言基础(变量、数据类型、流程控制、面向对象编程)
开发语言·计算机视觉·c#·visionpro
咯哦哦哦哦2 小时前
WSL + ubantu22.04 + 远程桌面闪退+黑屏闪退解决
linux·开发语言
翩若惊鸿_2 小时前
【无标题】
开发语言·c#