Excel INDEX MATCH 当值可能在 3 列之一中时
Excel INDEX MATCH when value may be in one of 3 columns
我正在使用 INDEX/MATCH 在单个列中查找值,并使用 return 来自不同列的值:
=INDEX(Sheet1!$A:$A,MATCH(A2,Sheet1!$B:$B,0))
这将搜索 A2
是否与 Sheet1 列 B
中的值匹配,如果匹配,则 return 将搜索 A
列中该行的值。
但是,正在搜索的值实际上可能在 B
、C
或 D
列中,我希望能够在相同的列中搜索这些值查询。
我希望以下内容会起作用,但它不起作用:
=INDEX(Sheet1!$A:$A,MATCH(A2,Sheet1!$B:$D,0))
有没有办法不用 IF
语句就可以做到这一点?我有一个使用 IF
语句处理 3 列的版本,但似乎应该有更简单的方法来解决它。
您可以使用 SUMPRODUCT,但这要求搜索值在以下范围内出现不超过一次:
=IF(COUNTIF(Sheet1!$B1:$D10,A2),INDEX(Sheet1!$A:$A,SUMPRODUCT((Sheet1!$B1:$D10=A2)*ROW(Sheet1!$B1:$D10))),"No Match")
如果搜索值可以在范围内多次出现,则解决方案将取决于在确定 return 时应优先考虑哪些值。
请注意,使用数组处理函数 (SUMPRODUCT) 意味着不建议您使用整个列引用。不同于例如COUNTIF(S)/SUMIF(S),此类公式计算传递给它们的所有单元格,无论技术上是否超出这些范围内最后使用的单元格。
应该为结束行参考选择一个适当低但足够的上限。或者,您可以为数据创建动态范围,这样它们会根据该数据自动调整 expands/contracts,从而提供最佳效率。
此致
老实说有点费解,但类似于:
=INDEX(Sheet1!$A:$A,MATCH(1,SIGN((A2=Sheet1!$B:$B)+(A2=Sheet1!$C:$C)+(A2=Sheet1!$D:$D)),0))
完成同样的事情,尽管它是一个数组公式,因此您必须使用 CTRL+SHIFT+ENTER 进行输入(如果该值出现不止一次也有效,因为它实际上只是检查 >0)
如果您只是从 A 列返回一个数字值,您可以使用:
=MAX(IF(A2=Sheet1!$B:$D,Sheet1!$A:$A))
使用CTRL+SHIFT+ENTER输入。
如果您要从 A 列返回文本值(或数字值),则可以使用:
=INDEX(Sheet1!$A:$A,SMALL(IF(A2=Sheet1!$B:$D,ROW(Sheet1!$A:$A)-ROW($A)+1),1))
还需要用CTRL + SHIFT + ENTER输入。
您可以根据需要更改范围。
我正在使用 INDEX/MATCH 在单个列中查找值,并使用 return 来自不同列的值:
=INDEX(Sheet1!$A:$A,MATCH(A2,Sheet1!$B:$B,0))
这将搜索 A2
是否与 Sheet1 列 B
中的值匹配,如果匹配,则 return 将搜索 A
列中该行的值。
但是,正在搜索的值实际上可能在 B
、C
或 D
列中,我希望能够在相同的列中搜索这些值查询。
我希望以下内容会起作用,但它不起作用:
=INDEX(Sheet1!$A:$A,MATCH(A2,Sheet1!$B:$D,0))
有没有办法不用 IF
语句就可以做到这一点?我有一个使用 IF
语句处理 3 列的版本,但似乎应该有更简单的方法来解决它。
您可以使用 SUMPRODUCT,但这要求搜索值在以下范围内出现不超过一次:
=IF(COUNTIF(Sheet1!$B1:$D10,A2),INDEX(Sheet1!$A:$A,SUMPRODUCT((Sheet1!$B1:$D10=A2)*ROW(Sheet1!$B1:$D10))),"No Match")
如果搜索值可以在范围内多次出现,则解决方案将取决于在确定 return 时应优先考虑哪些值。
请注意,使用数组处理函数 (SUMPRODUCT) 意味着不建议您使用整个列引用。不同于例如COUNTIF(S)/SUMIF(S),此类公式计算传递给它们的所有单元格,无论技术上是否超出这些范围内最后使用的单元格。
应该为结束行参考选择一个适当低但足够的上限。或者,您可以为数据创建动态范围,这样它们会根据该数据自动调整 expands/contracts,从而提供最佳效率。
此致
老实说有点费解,但类似于:
=INDEX(Sheet1!$A:$A,MATCH(1,SIGN((A2=Sheet1!$B:$B)+(A2=Sheet1!$C:$C)+(A2=Sheet1!$D:$D)),0))
完成同样的事情,尽管它是一个数组公式,因此您必须使用 CTRL+SHIFT+ENTER 进行输入(如果该值出现不止一次也有效,因为它实际上只是检查 >0)
如果您只是从 A 列返回一个数字值,您可以使用:
=MAX(IF(A2=Sheet1!$B:$D,Sheet1!$A:$A))
使用CTRL+SHIFT+ENTER输入。
如果您要从 A 列返回文本值(或数字值),则可以使用:
=INDEX(Sheet1!$A:$A,SMALL(IF(A2=Sheet1!$B:$D,ROW(Sheet1!$A:$A)-ROW($A)+1),1))
还需要用CTRL + SHIFT + ENTER输入。
您可以根据需要更改范围。