当前位置:首页 > 技术文章 > 正文内容

Excel如何跨工作表跨列进行动态的多条件求和,中高水平进阶必会

任何一个想提升人生质量的人,很重要的一点就是要具备积极的态度。——继续学习的一天


Excel如何跨工作表跨列进行多条件求和?

在日常工作中,其实仅仅跨列求和,就有点超出一般的excel应用水平,因为大家更习惯于进行单列数据的求和。

而跨工作表,就更添加计算的难度了。

下面,作者就通过某外贸公司各品类产品的销售情况实例,用详细的操作步骤和计算方法,来解答这个问题。

如下图所示,指定了产品大类,再指定该大类下的产品子类,然后计算指定的时间段,产品销量的总和。

这里产品大类的内容是对应各工作表的名称,当我们设置了动态列表框之后,便可以直接点击选择要查询的工作表。

然后根据产品大类,再设置一个二级下拉列表,这样就能动态地选择需要查询的产品大类下各产品子类的销售数据。

我们先来看看各工作表的数据内容:

每个工作表的格式基本一致,列标题是月份,行标题是产品子类名称。

回到汇总表,如下图所示,我们的目的是可以即时查询到,任意产品大类下任意子类在任意时间段的销量总和。

那首先就来设置产品大类的动态列表框。但要设置动态列表,需要创建一个辅助列,来引用所有的工作表名称。

如何批量提取工作表名称?有一个函数可以做到。

点击公式工具栏下方的”定义名称“,在弹出的编辑窗口中,输入一个名称,并在引用位置输入一个宏表函数:=get.workbook(1)

workbook 表示的是工作簿,get.workbook(1),是一个固定的宏表函数表达式,它的作用就是提取工作表名称,结果则可以是单个值,也可以是多个值,这取决于工作表的数量。

我们可以记住这个固定表达式,但需要注意两点,一是宏表函数不能直接在单元格使用,需要通过定义名称的方式来间接应用;二是宏表函数要在excel中正常运行,需要将文件保存为“.xlsm”后缀格式的excel文件,即启用宏的工作簿。

随后我们在单元格内输入一个引用公式:INDEX(工作表名称,ROW(A1))

但它的结果是包含了工作簿名称的完整名称,如图所示:

我们知道之前用宏表函数提取的工作表名称,其结果是一个数组值,这里嵌套了ROW函数,则在向下填充公式时,可以依次提取各工作表的名称。

之后我们再套用REPLACE函数,来提取需要显示的字符串,即不带工作簿名称的工作表名。

REPLACE函数实际是一个查找替换函数,它的作用是将文本中的指定字符串替换为另一字符串。

作者通过将不需要的字符串替换为空值,而得到需要的名称。

它的表达式为:=REPLACE(文本,需替换的字符串开始位置,替换的字符个数,要替换的字符串)

我们看下上图中输入的完整公式:=REPLACE(INDEX(工作表名称,ROW(A1)),1,FIND("]",INDEX(工作表名称,ROW(A1)),1),"")

四个参数的含义如下:

第一个参数文本是index函数引用的工作表名称;

第二个参数是1,即表示从第1个字符开始;

第三个参数是FIND("]",INDEX(工作表名称,ROW(A1)),1),也是一个函数公式,表示查找“]”符号在文本中的位置,它的结果以数值表示,这里计算结果为13,也就是说从第1个字符开始,选择13个字符,而“]”符号之后,就是我们需要的工作表名;

第四个参数是"",表示的是空值,综合讲,便是将文本1-13个字符,替换成空值,剩下的字符串就是我们需要的工作表名。

得到了简洁准确的工作表名,即产品大类名称,我们便可以设置一个动态列表框。

如下图所示,在数据工具栏下点击”数据验证“,在“允许”框选择“序列”,在“来源”输入单元格引用区域。

便得到之前动图中的下拉列表显示效果。

接下来我们继续设置二级下拉列表,同样的操作,进入数据验证设置界面。

但在“来源”框中输入的不再是固定的单元格区域,而是一个通过offset函数引用的动态区域。

这个公式为:=OFFSET(INDIRECT(A2&"!a:a"),1,,COUNTA(INDIRECT(A2&"!a:a"))-1,)

offset是查找引用函数,indirect函数也是引用函数,但区别在于offset函数是给定参照值并设定偏移量来进行引用,结果可以是单个值也可以是一个数组;indirect函数是返回文本字符串所指向的单元格或单元格区域引用。

关于offset函数的应用和参数详解,作者在《Excel如何设置动态条件,并进行指定产品和时间段的多条件求和》中作了细致介绍。

这里我们着重讲讲indirect函数的应用。

indirect函数的表达式为:=indirect(文本,引用样式)

两个参数,第一个参数是文本字符串,通常是单元格地址,如A1,"A1"等,这里不带引号的A1表示引用A1单元格内容所指向的数据,带双引号的"A1"则表示引用A1单元格的数据;

第二个参数引用样式,就是公式的两种引用样式,也可以说是单元格地址的显示样式,这个参数可以省略,默认为A1样式。

我们回到上面的公式中,INDIRECT(A2&"!a:a")的含义是什么?

我们又要来弄懂A2&"!a:a"所表达的含义……

A2单元格的内容是”装饰纪念品“,而装饰纪念品又是一个工作表的名称,那么它的完整结果就是“装饰纪念品!a:a”,是不是似曾相似呢!

它其实就是跨表引用的单元格区域显示形式,表示装饰纪念品工作表中的A列数据区域。

我们套上indirect函数,即表示引用装饰纪念品工作表中的A列数据,它的值是一个数组,包含A列所有的数据。

那么COUNTA(INDIRECT(A2&"!a:a"))-1,则是计算引用区域中非空单元格的个数,它的作用是为了引用该工作表中所有的产品子类名称。

通过offset函数的引用,能计算得出指定各工作表下的所有产品子类名称。这样便得到了一个可任意点击选择的二级下拉列表。

之后在一次设置开始时间和结束时间的动态下拉列表,方法步骤与上同。

最后,我们进入汇总统计的主题,仍然是通过一个组合嵌套的函数,来进行求和计算。

从上图编辑栏中的公式可以看出,它带有大括号,属于一个数组公式,嵌套了sum函数、offset函数、match函数、indirect函数,各函数各有其用。

indirect函数来引用产品大类的跨表单元格区域,match函数用来返回产品子类在跨表单元格区域中的位置,offset函数则可以引用设定偏移位置的数值计算区域,最后sum函数来求和计算区域的数值。

四者一组合,便得到了跨表的多条件求和结果。

我们来看看这个公式的各参数结果,如下图所示:

在编辑较长的公式时,要擅长使用F9快捷键逐个解析各部分嵌套函数公式的结果,这样有助于对整个公式的理解。

根据上面公式解析的结果来看看在对应工作表中,它的计算区域和计算结果,如下图所示:

offset函数以A1单元格”category“为参照,向下方偏移5行,向右偏移1列,即B6单元格,然后要引用的行数为1,列数为9,也就是B6:J6单元格区域。

这正是我们要求和计算的单元格区域!

通过下拉列表来设置多个动态条件,使用数据验证来制作下拉列表,在数据验证中编辑公式来设计二级下拉列表,通过定义名称和宏表函数来提取工作表名称,使用引用函数来跨表引用,通过多个函数嵌套的数组公式来汇总求和,等等,这篇文章涉及的内容还是比较繁杂的。

如果有不好理解的地方,可以在评论区留言,也可以查看一下作者的文章,当然更可以通过试题练习,来巩固所学的知识技能。

那今天的内容就讲到这里,欢迎关注作者,在视频中观看视频教程。


往期回顾:





扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/4331.html

分享给朋友:

“Excel如何跨工作表跨列进行动态的多条件求和,中高水平进阶必会” 的相关文章

Nginx常用技巧

Nginx常用技巧:提高性能、安全性与稳定性Nginx作为高性能的Web服务器和反向代理服务器,广泛应用于各类生产环境中。通过一些常用的配置技巧,可以有效提高Nginx服务器的性能、安全性和可靠性。以下将介绍几项关键的配置技巧,帮助您最大化利用Nginx的优势。直达服务器选购网址:www.tsyvp...

logstash+ES+kibana搭建日志收集分析系统

日志监控和分析在保障业务稳定运行时,起到了很重要的作用,不过一般情况下日志都分散在各个生产服务器,且开发人员无法登陆生产服务器,这时候就需要一个集中式的日志收集装置,对日志中的关键字进行监控,触发异常时进行报警,并且开发人员能够查看相关日志。logstash+elasticsearch+kibana...

nginx监控与调优(三)

nginx监控通常有两种方法:一是status监控;二是ngxtop监控。一、status监控使用status监控的步骤:1.确定nginx中status模块是否已安装[root@localhost sbin]# nginx -V nginx version: nginx/1.13.7 built...

windows 搭建php运行环境(2024年)

由于需要运行一套cms系统,需要运行php环境,现在开始记录搭建步骤:1、分别下载nginx和php包,然后解压到自己喜欢目录下面2、这里我们使用nginx的反向代理模式的FastCGI server,修改nginx.conf,然后启动或重启nginx。location ~ \.php$ {...

从入门到精通,超详细的程序员Java学习路线指南

说明最近也有很多人来向我"请教",他们大都是一些刚入门的新手,还不了解这个行业,也不知道从何学起,开始的时候非常迷茫,实在是每天回复很多人也很麻烦,所以在这里统一作个回复吧。Java学习路线当然,这里我只是说Java学习路线,因为自己就是学Java的,对Java理当很熟悉,对于其它方...

Nginx 的性能调优: 从入门到精通

Nginx 是一种高效的 Web 服务器和反向代理,广泛应用于互联网中。通过性能调优,Nginx 可以进一步提高其服务质量和性能。本文将从入门到精通,介绍 Nginx 性能调优的方法和技巧。一、什么是 Nginx?Nginx 是一种开源的 Web 服务器和反向代理软件,由 Igor Sysoev 创...