答案1
答案2
假设包含所有数据的工作表名为“Sheet1”,您可以在“Count”字段中使用此公式来获取适当的值。
=INDIRECT("Sheet1!" &SUBSTITUTE(ADDRESS(1,MATCH(C2,Sheet1!$C$1:$E$1,0)+2,4),"1","") &MATCH(1,(Sheet1!$A:$A=A2)*(Sheet1!$B:$B=B2),0))
添加公式后,您必须按 <control>+<shift>+<enter> 来计算值。(听起来很奇怪……我知道。相信我。)
好的......所以这里是细分:首先,我们需要找到我们想要从中返回数据的列(树木/植物/等......)对于树木,格式为“Sheet1!C”,对于植物,格式为“Sheet1!D”等......这段代码就是这样做的:
"Sheet1!" &SUBSTITUTE(ADDRESS(1,MATCH(C2,Sheet1!$C$1:$E$1,0)+2,4),"1","")
本质上,我们使用它MATCH
来查找匹配标题的位置。在本例中,我们的 Match 语句查看单元格“C2”,并查看 C1-E1 的标题。(我们使用来$
确保如果我们进行向下填充,这些单元格不会发生变化)对于这种情况,它将返回 2... 表示我们匹配的第 2 列。我们需要再添加 2,因为我们跳过了“颜色”和“年份”。所以,我们真正要看的是第 4 列。我们可以使用“地址”函数返回列名。(它实际上返回“D1”,但我们使用替换命令删除“1”)... 所以我们得到“D”。
现在我们有了“Sheet1!D”,我们需要该行。该行的第二部分如下:
MATCH(1,(Sheet1!$A:$A=A2)*(Sheet1!$B:$B=B2),0)
再次,我们使用老办法MATCH
。这一次,我们将行数据转换为真值表。引用“Sheet1!A:A”,返回 A 列中所有数据的数组,但添加比较器后,如果比较结果为真,则返回 1,如果比较结果为假,则返回 0。因此,在这种情况下,我们最终得到一个数组,其中所有“橙色”行均为 1,所有非橙色行均为 0。
但请稍等!还有更多!注意到我们如何乘以第二个数组,对“B”列执行相同的操作吗?Excel 足够聪明,可以为我们进行矩阵数学运算。在这种情况下,对于值为“2019”的值,“B”列返回的数组仅为 1。这很有用,因为当我们将它们全部为橙色的数组与它们全部为 2019 的数组相乘时,我们最终会得到一个数组,其中它们必须同时为橙色和 2019。我们只需MATCH
查找存在“1”的行,最终就会得到匹配的行。在这种情况下为“2”。
那么,我们怎样才能得到该行呢?我们只需将其附加到前一个字符串,最后得到“Sheet1!D2”,然后将其传递给该字段以INDIRECT
获取该字段的值。一个可爱的“2”。这正是我们一直想要的。
由于我确实在那些不应改变的字段上包含了“$”标记,因此您应该能够使用“向下填充”方法动态调整与位置相关的单元格,同时保持静态搜索条件不变。
现在...为什么我们必须按 <control>+<shift>+<enter> 才能让它生成正确的答案?好吧,Excel 有一个奇怪的东西,如果你在做矩阵数学,你必须使用它CSE
来让它做正确的数学运算。如果你稍后编辑该函数,请记住这一点。CSE CSE加拿大教育标准局...它可以让你省去一些麻烦。