使用Excel朋友都知道,将包含相对列引用的公式复制到其他列时,这些引用也会相应地更新 。例如,公式:
=SUMIFS(C:C,$A:$A,”X”,$B:$B,”X”)
向右拖放时,将会变成:
=SUMIFS(D:D,$A:$A,”X”,$B:$B,”X”)
=SUMIFS(E:E,$A:$A,”X”,$B:$B,”X”)
等等 。
因此,我们有一个相对简单的方法,可以从连续的列中获得条件和 。
但是,如果我们希望增加的单元格区域是间接引用的,那该怎么办?例如,如果我们使用上述公式版本,但所引用的工作表是动态的:
=SUMIFS(INDIRECT(“‘”&$A$1&”‘!C:C”),INDIRECT(“‘”&$A$1&”‘!A:A”),”X”,INDIRECT(“‘”&$A$1&”‘!B:B”),”Y”)
其中,A1包含要引用的工作表名称(例如“Sheet1”) 。
当我们向右拖动此公式时,间接引用的单元格区域不会改变 。当然,这是完全可以预料的,因为那些“单元格区域”根本不是真正的单元格区域,而只是伪装成单元格区域的文本字符串,只有通过将它们传递给INDIRECT函数才能将其解释为实际的单元格区域 。
现在的问题是:我们如何修改第一个公式,以便将其向右复制后,依次获得以下等价的公式:
=SUMIFS(INDIRECT(“‘”&$A$1&”‘!D:D”),INDIRECT(“‘”&$A$1&”‘!A:A”),”X”,INDIRECT(“‘”&$A$1&”‘!B:B”),”Y”)
=SUMIFS(INDIRECT(“‘”&$A$1&”‘!E:E”),INDIRECT(“‘”&$A$1&”‘!A:A”),”X”,INDIRECT(“‘”&$A$1&”‘!B:B”),”Y”)
【SUMIFS/COUNTIFS函数内的间接列引用变化】等等 。
可以使用INDEX函数来解决:
=SUMIFS(INDEX(INDIRECT(“‘”&$A$1&”‘!A:XFD”),,COLUMNS($A:C)),INDIRECT(“‘”&$A$1&”‘!A:A”),”X”,INDIRECT(“‘”&$A$1&”‘!B:B”),”Y”)
注意,当省略INDEX函数的参数row_num时,会返回整列引用,对于参数column_num也是如此 。
如果A1中的值是“Sheet2”,则:
INDEX(INDIRECT(“‘”&$A$1&”‘!A:XFD”),,COLUMNS($A:C))
转换为:
=INDEX(Sheet2!A:XFD,,3)
即:
Sheet2!C:C
向右复制,公式成为:
=SUMIFS(INDEX(INDIRECT(“‘”&$A$1&”‘!A:XFD”),,COLUMNS($A:D)),INDIRECT(“‘”&$A$1&”‘!A:A”),”X”,INDIRECT(“‘”&$A$1&”‘!B:B”),”Y”)
转换为:
=SUMIFS(INDEX(Sheet2!A:XFD,,COLUMNS($A:D)),INDIRECT(“‘”&$A$1&”‘!A:A”),”X”,INDIRECT(“‘”&$A$1&”‘!B:B”),”Y”)
转换为:
=SUMIFS(INDEX(Sheet2!A:XFD,,4),Sheet2!A:A,”X”,Sheet2!B:B,”Y”)
转换为:
=SUMIFS(Sheet2!D:D,Sheet2!A:A,”X”,Sheet2!B:B,”Y”)
……
也可以使用OFFSET函数:
=SUMIFS(OFFSET(INDIRECT(“‘”&$A$1&”‘!A:A”),,COLUMNS($A:B)),INDIRECT(“‘”&$A$1&”‘!A:A”),”X”,INDIRECT(“‘”&$A$1&”‘!B:B”),”Y”)
其中:
INDIRECT(“‘”&$A$1&”‘!A:A”)
转换为:
Sheet2!A:A
而偏移的列数等于:
COLUMNS($A:B)
推荐阅读
- GROWTH,LINEST,LOGEST,TREND 怎么给统计函数提供合法的参数值
- SUMPRODUCT函数基本原理详解
- 使用SUMPRODUCT函数巧妙处理多条件判断
- python中的函数有什么作用?python函数的意义有什么?
- 什么是python的帮助函数?python的帮助函数有什么作用?
- Python中的round函数怎么使用?python中format函数与round函数的区别
- Python中的fileinput库如何使用?如何使用fileinput函数对文件进行操作?
- Python循环中有哪些内置函数?循环中的三个内置函数使用方法
- COUNTIF函数在文本排序中的应用
- IF函数详细介绍