我有一个 Google 电子表格,用来编制每周报告。我将每个报告的内容粘贴到电子表格的新工作表中。该电子表格有一个“概述”工作表,它使用公式从电子表格中的其他工作表中提取计数和平均值。
有时会从源报表中添加或删除列,这意味着一张工作表中“AO”列中显示的字段可能位于另一张工作表中的“AM”列中。因此,我尝试使用列名称(例如“频道”、“首次回复时间(秒)”等)作为查找数据的方式,以便将其显示在“概述”表。
例如,“概述”表中的一个公式如下:
=IFERROR(averageif(M1W5!$AO:$AO,"desktop",M1W5!$AJ:$AJ)/60)
它查看工作表“M1W5”,然后查看 AO 列以查找具有值“desktop”的所有行,然后查看 AJ 列中的同一行,并提供所有出现次数的平均值(意味着它向上平均) AJ 列中的所有值,其中 AO =“桌面”)。
我遇到的问题是: 由于列在工作表之间经常发生变化(工作表“M1W5”上的列 AO 可能是工作表“M2W1”上的 AM 列,等等),我需要一种方法来按名称查找列(每个工作表中每列的第 1 行)包含列名称)而不是列字母。
有办法做到吗?
到目前为止,我一直在尝试使用 Address 和 Match 函数按列名称查找列。
例如,我可以在“概述”工作表上使用此公式,它将为我提供工作表“M1W5”中名为“首次回复时间(秒)”的确切列:
=SUBSTITUTE(ADDRESS(1,MATCH("Time to first reply (seconds)",M1W5!$A$1:$BZ$1,0),4),1,"")
我不知道如何(或者是否可能)在另一个公式中使用它。例如,替换列字母
M1W5!$AO:$AO
使用这样的地址函数:
M1W5!SUBSTITUTE(ADDRESS(1,MATCH("Time to first reply (seconds)",M1W5!$A$1:$BZ$1,0),4),1,""):SUBSTITUTE(ADDRESS(1,MATCH("Time to first reply (seconds)",M1W5!$A$1:$BZ$1,0),4),1,"")
好吧,我明白了。
因此,我的示例是有一种方法可以通过列标题而不是列字母来引用其他工作表中的单元格。
我使用的例子是:
M1W5!SUBSTITUTE(ADDRESS(1,MATCH("Time to first reply (seconds)",M1W5!$A$1:$BZ$1,0),4),1,""):SUBSTITUTE(ADDRESS(1,MATCH("Time to first reply (seconds)",M1W5!$A$1:$BZ$1,0),4),1,"")
实际实现此目的的方法是使用indirect()函数,然后将sheet!range引用视为字符串(即,在工作表名称、冒号等周围加上引号...),并使用替代( ) 函数将列字母作为字符串返回,如下所示(请务必使用 & 正确连接各个字符串值):
indirect("M3W1!"&SUBSTITUTE(ADDRESS(1,MATCH("Time to last close (seconds)",M3W1!$A$1:$BZ$1,0),4),1,"")&"2"&":"&SUBSTITUTE(ADDRESS(1,MATCH("Time to first reply (seconds)",M3W1!$A$1:$BZ$1,0),4),1,""))