Excel如何实现动态求和二
2025/6/22 来源:不详excel实现动态求和
文章Excel如何进行动态求和(一)中讲到了Excel动态求和中需要使用到的基础函数:address函数的用法。本文是动态求和系列文章的第三篇(第一篇是Exceloffset函数怎么用)。本文主要讲indirect函数的使用。
先看回在offset一文中使用到的动态求和函数:
动态求和函数其中的indirect部分:
INDIRECT(ADDRESS(COUNTA(C:C),3,4,TRUE))
前文用address函数已经得到了销量最后一行的单元格位置是C23
address(counta(c:c),3,4,true)但是这时候,如果直接把address函数的结果作为offset函数的参数位置,是得不到预想的结果的:
offset直接套address结果实际上,软件会直接报错,提示用户输入的不是一个有效的公式。但是给出的描述对用户来说并没有正确地指出问题来。
这里报错的原因是因为address函数得到的是一个文本字符串:C23。对于电子表格软件来说,这个“C23”跟“今天天气很好”这样的文本没有区别,软件并不知道它指的是一个单元格位置。
这就是本文要讲的indirect函数的作用了。
先看看indirect的函数说明和签名
indirect函数描述indirect函数签名它有2个参数,第1个是必填的,表示“单元格引用”。其实WPS这里的说明会产生误导。准确地说第1个参数是“表示单元格位置的文本”。如果这里直接写C23,会得到一个错误引用:
indirect直接输入单元格地址它要的是一个文本格式的,也就是要加上双引号:
正确的indirect用法这下应该知道它的用法了。至于第2个参数,跟前文讲到的address函数的第3个参数一样。通常忽略它就可以。
所以要让前文得到的address函数得到的结果起作用,还要加上这个indirect函数。如此一来,在当前的表中,以下两个公式是相等的:
=SUM(OFFSET(INDIRECT(ADDRESS(COUNTA(C:C),3,4)),0,0,-7,1))
=SUM(OFFSET(C23,0,0,-7,1))
所以没错,我们折腾了两篇文章讲的address+indirect函数的目的,就是为了得到这个C23单元格的引用。但这肯定不是多此一举,因为当表格中的数据(行数)增加时,比如增加了一行,共有24行,则上面的第1条公式实际上就变成了
=SUM(OFFSET(C24,0,0,-7,1))
当共有25行时,INDIRECT(ADDRESS(COUNTA(C:C),3,4))就能引用到C25单元格。我们的初衷就是要实现动态求和,只有这样才能实现“动态”的效果!否则每增加一行就都需要人工修改求和范围,完全起不到“自动”的效果。
至此,动态求和涉及的三个核心函数都已经讲完。再重新梳理一下动态求和公式的实现逻辑。敬请期待!