从 Excel 中的多个工作表返回数据
Returning data from across multiple worksheets in Excel
如何创建公式来 return 不同作品sheet 的总计、平均值、计数、最小值、最大值等?列(存在的)在其 header 信息中是一致的,但可能会或可能不会从一个 sheet 到下一个不同,列号明智。假设我有 7 个数据选项卡,例如,其中一些或全部可能包含 bean 的列标题,但所有选项卡中的列号可能一致也可能不一致(如果存在)。他们在作品中的实际位置sheet 是完全动态的。
我的传播sheet 有几个原始数据选项卡,我想在 summary/report sheet 中与它们进行比较。我相信这是可以做到的,但恐怕这超出了这个老脑子的能力范围。
我已经考虑并尝试了一堆使用间接、索引、匹配的公式,但就是想不出来。非常感谢您的帮助。谢谢
这是一个可能的仅功能解决方案。最终结果将如下所示:
我们将使用四 (4) 个主要功能:
注意:如果您对如何使用这些功能有疑问,请按照link
公式: 这是C4上面的单元格
=AVERAGE(
INDIRECT(
"'"& C & "'!" &
LEFT(ADDRESS(1,MATCH($E,INDIRECT("'"&C&"'!1:1"),0),4,1),1)
& ":" &
LEFT(ADDRESS(1,MATCH($E,INDIRECT("'"&C&"'!1:1"),0),4,1),1)
)
)
Edit1: 要处理下面 headers 超过 26 的评论,请更改此
LEFT(ADDRESS(1,MATCH($E,INDIRECT("'"&C&"'!1:1"),0),4,1),1)
对此:
SUBSTITUTE(ADDRESS(1,MATCH($E,INDIRECT("'"&C&"'!1:1"),0),4,1),"1","")
基本上是做什么的:
使用 MATCH
函数查找 header Bean
所在的位置。为此,您必须合并 INDIRECT
的使用,因为您的 sheet 名称是动态的(在此示例中,您的 sheet 名称在 C3 - Data1
中)。 (我假设你所有的 header 都在第一行,我在那里使用 1:1
)。 注:本例中,Bean
在Data1的H列sheet
MATCH($E,INDIRECT("'"&C&"'!1:1"),0) <~~ returns 8
找到它的位置后,我们需要获取整列地址,以便我们可以应用计数和求和函数(例如SUM,COUNT,AVERAGE
等...)。为此,我们使用 ADDRESS
函数结合 LEFT
来获取列字母。
LEFT(ADDRESS(1,MATCH($E,INDIRECT("'"&C&"'!1:1"),0),4,1),1) <~~ returns H
然后我们只需重复该公式并将其与:
连接即可得到H:H
现在我们有了列地址,我们只需再次将它与 sheet 名称连接起来,然后应用最终的 INDIRECT
函数加上计数 and/or 求和您选择的功能。
总计的示例公式 C5
:
Max的示例公式C6
:
最后,您所要做的就是将公式复制到名称为 sheet 的所有列。
只需在最后一个名称旁边添加 sheet 名称并复制公式。就是这样。我希望这接近你想要的,我希望我使用的所有功能在 Excel 2000 中可用。
如何创建公式来 return 不同作品sheet 的总计、平均值、计数、最小值、最大值等?列(存在的)在其 header 信息中是一致的,但可能会或可能不会从一个 sheet 到下一个不同,列号明智。假设我有 7 个数据选项卡,例如,其中一些或全部可能包含 bean 的列标题,但所有选项卡中的列号可能一致也可能不一致(如果存在)。他们在作品中的实际位置sheet 是完全动态的。
我的传播sheet 有几个原始数据选项卡,我想在 summary/report sheet 中与它们进行比较。我相信这是可以做到的,但恐怕这超出了这个老脑子的能力范围。
我已经考虑并尝试了一堆使用间接、索引、匹配的公式,但就是想不出来。非常感谢您的帮助。谢谢
这是一个可能的仅功能解决方案。最终结果将如下所示:
我们将使用四 (4) 个主要功能:
注意:如果您对如何使用这些功能有疑问,请按照link
公式: 这是C4上面的单元格
=AVERAGE( INDIRECT( "'"& C & "'!" & LEFT(ADDRESS(1,MATCH($E,INDIRECT("'"&C&"'!1:1"),0),4,1),1) & ":" & LEFT(ADDRESS(1,MATCH($E,INDIRECT("'"&C&"'!1:1"),0),4,1),1) ) )
Edit1: 要处理下面 headers 超过 26 的评论,请更改此
LEFT(ADDRESS(1,MATCH($E,INDIRECT("'"&C&"'!1:1"),0),4,1),1)
对此:
SUBSTITUTE(ADDRESS(1,MATCH($E,INDIRECT("'"&C&"'!1:1"),0),4,1),"1","")
基本上是做什么的:
使用
MATCH
函数查找 headerBean
所在的位置。为此,您必须合并INDIRECT
的使用,因为您的 sheet 名称是动态的(在此示例中,您的 sheet 名称在 C3 -Data1
中)。 (我假设你所有的 header 都在第一行,我在那里使用1:1
)。 注:本例中,Bean
在Data1的H列sheetMATCH($E,INDIRECT("'"&C&"'!1:1"),0) <~~ returns 8
找到它的位置后,我们需要获取整列地址,以便我们可以应用计数和求和函数(例如
SUM,COUNT,AVERAGE
等...)。为此,我们使用ADDRESS
函数结合LEFT
来获取列字母。LEFT(ADDRESS(1,MATCH($E,INDIRECT("'"&C&"'!1:1"),0),4,1),1) <~~ returns H
然后我们只需重复该公式并将其与
:
连接即可得到H:H
现在我们有了列地址,我们只需再次将它与 sheet 名称连接起来,然后应用最终的
INDIRECT
函数加上计数 and/or 求和您选择的功能。
总计的示例公式 C5
:
Max的示例公式C6
:
最后,您所要做的就是将公式复制到名称为 sheet 的所有列。
只需在最后一个名称旁边添加 sheet 名称并复制公式。就是这样。我希望这接近你想要的,我希望我使用的所有功能在 Excel 2000 中可用。