SUMIFS/COUNTIFS函数内的间接列引用变化
使用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”)
等等。
可以使用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)
即2,于是传递到OFFSET函数后得到:
Sheet2!C:C
然而,如果间接引用的不是一个工作表,而是多个工作表,如何处理?例如公式:
=SUMPRODUCT(SUMIFS(INDIRECT(“‘”&Sheets&”‘!C:C”),INDIRECT(“‘”&Sheets&”‘!A:A”),”X”,INDIRECT(“‘”&Sheets&”‘!B:B”),”Y”))
其中,“Sheets”是定义的名称,引用位置为:
={“Sheet1″,”Sheet2″,”Sheet3″,”Sheet4”}
像前面一样,我们希望向右拖拉时,公式变化为:
=SUMPRODUCT(SUMIFS(INDIRECT(“‘”&Sheets&”‘!D:D”),INDIRECT(“‘”&Sheets&”‘!A:A”),”X”,INDIRECT(“‘”&Sheets&”‘!B:B”),”Y”))
=SUMPRODUCT(SUMIFS(INDIRECT(“‘”&Sheets&”‘!E:E”),INDIRECT(“‘”&Sheets&”‘!A:A”),”X”,INDIRECT(“‘”&Sheets&”‘!B:B”),”Y”))
等等。
仍然可以使用OFFSET函数:
=SUMPRODUCT(SUMIFS(OFFSET(INDIRECT(“‘”&Sheets&”‘!A:A”),,COLUMNS($A:B)),INDIRECT(“‘”&Sheets&”‘!A:A”),”X”,INDIRECT(“‘”&Sheets&”‘!B:B”),”Y”))
其原理与上文所解的单个工作表的版本相同。
最新推荐
-
win7如何设置局域网工作机组 win7局域网共享设置工作组
win7如何设置局域网工作机组?win7是一个很经典的电脑操作系统,至今还有大量用户都在使用,在使用过程中 […]
-
win7如何添加自带游戏 win7自带游戏怎么恢复
win7如何添加自带游戏?在win7系统中,自带了很多经典的系统游戏,但是有的用户找不到这些小游戏,那要怎 […]
-
win11用户账户控制怎么取消 win11关闭uac方法
win11用户账户控制怎么取消?在win11系统中,用户帐户控制 (UAC) 可以防止对 Windows […]
-
win10怎么查看网口是百兆千兆还是千兆 电脑网口是百兆还是千兆
win10怎么查看网口是百兆千兆还是千兆?电脑的网口速率,影响着电脑上传下载的速度,但是很多用户都不清楚自 […]
-
系统edge浏览器按f12打不开开发者工具怎么办 edge打不开开发者模式
系统edge浏览器按f12打不开开发者工具怎么办?edge浏览器是windows系统自带的浏览器,在使用E […]
-
Win11文件夹无法取消只读怎么办 文件夹无法取消只读属性
Win11文件夹无法取消只读怎么办?在最新的win11系统中,很多用户都发现自己在进行文件夹权限设置的时候 […]
热门文章
win7如何设置局域网工作机组 win7局域网共享设置工作组
2win7如何添加自带游戏 win7自带游戏怎么恢复
3win11用户账户控制怎么取消 win11关闭uac方法
4win10怎么查看网口是百兆千兆还是千兆 电脑网口是百兆还是千兆
5系统edge浏览器按f12打不开开发者工具怎么办 edge打不开开发者模式
6Win11文件夹无法取消只读怎么办 文件夹无法取消只读属性
7win11下载软件安装不了怎么办 win11安装软件被阻止弹出提示
8yuzu模拟器pc版怎么安装 yuzu模拟器电脑安装教程
9win10玩cf两边有黑边如何改 win10玩cf全屏显示不全
10yuzu模拟器怎么添加游戏 yuzu模拟器添加游戏详细步骤
随机推荐
专题工具排名 更多+