我试图在数组中找到一个值,然后返回相应列中特定行的值。
在下面的示例中,我需要知道雪佛兰所在的海湾:
Column A Column C Column D Column E
Chevrolet Bay 1 Bay 2 Bay 3
Toyota Ford Saturn
Honda Chevrolet Jaguar
Ferrari Subaru Lexus
Mitsubishi Hundai BMW
我在阵列C2:E5中寻找雪佛兰。一旦确定雪佛兰在D列中,我需要它返回D1中的值。如果它在E列中,我需要它来返回E1中的值。
非常感谢任何帮助。非常感谢你。
答案 0 :(得分:5)
试试这个数组公式:
=INDEX($C$1:$E$5,1,SMALL(IF(NOT(ISERROR(SEARCH(A1,$C$1:$E$5))),COLUMN($A:$C),99^99),1))
或者如果您确定每列都包含正在搜索的内容,则可以这样写:
=INDEX($C$1:$E$5,1,SMALL(IF($C$1:$E$5=A1,COLUMN($A:$C),99^99),1))
按 Ctrl + Shitf + Enter 在任何单元格中输入公式。
它是如何运作的?
我们的最终目标是找到包含匹配项的列:
SEARCH(A1,$C$1:$E$5)
。它只是检查是否有任何匹配 A1 的条目。实际上,它可以简化为$C$1:$E$5=A1
,但我不确定每列中的所有条目是否与 A1 中的内容完全匹配。{SEARCH(A1,C1), SEARCH(A1,D1), SEARCH(A1,E1);... SEARCH(A1,E5)}
。结果将是数字和错误的数组(如果找不到)。但我们并不想要,否则我们每次都会返回错误。IF(NOT(ISERROR(SEARCH(A1,$C$1:$E$5))),COLUMN($A:$C),99^99)
。如果匹配则此公式返回列号,否则返回相对较大的数字99^99
。结果将是:{99^99, 99^99, 99^99, 2, ..., 99^99}
。SMALL
返回最小的数字,在我看来是找到匹配项的最低列号。因此SMALL(IF(NOT(ISERROR(SEARCH(A1,$C$1:$E$5))),COLUMN($A:$C),99^99),1)
将返回2. $ C $ 1:$ E $ 1 引用雪佛兰的列。INDEX($C$1:$E$5,1,2)
。 注意: 99^99
可以是任何相对较大的数字。不一定是99^99
。实际 16385 (Excel 2007中的最大列数和上升+ 1)可以使用。
<强>结果:强>
答案 1 :(得分:0)
另一个快速而肮脏的答案是放一个&#34;假的&#34;在整个数据集上方行,然后确定哪个占位符列返回了正确的结果。
在B1中,你可以把等式
=MATCH($A$2,B3:B6,0)
然后在C1中,你可以把
=MATCH($A$2,C3:C6,0)
依此类推,直到你覆盖了所有的行和列。改变B3:B6&amp; C3:C6反映给定列中的实际数据行。
现在,有趣的数组公式将实际返回海湾。我在单元格A1中有这个数组公式,它从B1:D1看,但你可以在任何你想要的地方移动单元格A1,B1:D1范围应该是你在上面创建的所有虚拟列。此外,假设您想要的托架位于第2行(如果它们位于不同的行中,请将 R2C 更改为 R#C ,其中#是行号) 。要正确输入,请输入公式并然后按CTRL + SHIFT + ENTER 。
=INDIRECT("R2C"&SUM(IF(ISERROR(B1:D1),FALSE,B1:D1))+1,FALSE)
如果正确输入公式,当您单击单元格时,它将围绕等式显示大括号{}。
答案 2 :(得分:0)
假设查找值在A1:
中,此公式将执行此操作="Bay "&SUMPRODUCT((B2:D5=A1)*(COLUMN(B2:D5)))-1
您可以轻松调整它以添加更多行和列。
公式返回包含查找值的列号,并将其与单词Bay连接,以返回所需的确切结果。
最后的-1调整了Bay 2列实际上是工作表中第三列的事实,因此您可能还需要调整该偏移量。
SUMPRODUCT功能被低估了。更多相关信息:
答案 3 :(得分:0)
上面的SUMPRODUCT
公式非常适合我想要的。
例如在二维范围COLUMN
的{{1}}处找到给定值的位置ROW
和A1
A2:J44
(不在范围内)
然后可以在例如use: =SUMPRODUCT((A2:J44=A!)*(COLUMN(A2:J44))) gives the Absolute* COL#
and : =SUMPRODUCT((A2:J44=A1)*(ROW(A2:J44))) gives the Absolute* ROW#
或INDEX()
等功能。