【问题标题】:Formula to find match in two-dimensional range在二维范围内查找匹配的公式
【发布时间】:2014-05-14 15:41:43
【问题描述】:

我需要一个公式来查找二维范围内的值并返回匹配单元格的坐标或单元格地址。例如:

R    A    B    C

1    John Matt Pete
2    Sara Bret Chad
3    Lila Maya Cami

我想在A1:C3 范围内搜索Chad 并返回C22,3。如何使用 Excel 公式完成此操作? (我实际上最终会将它应用到 Google 表格中)。

谢谢!

【问题讨论】:

  • 为什么 - 你试过什么?你有什么想法吗?如果您能告诉我们,那就太好了。
  • 在 .gs 中编写自定义函数可能会有所帮助。

标签: excel excel-formula match formula


【解决方案1】:

假设您使用的是 Excel 2007 及更高版本。

您将需要一个帮助列。如果您的表格看起来像您的示例,请在单元格D1 中写入:

=IFERROR(MATCH($E$1,$A1:$C1,0),0)

然后向下拖动。然后在单元格E1 中写下您的搜索值(例如"Chad")。然后你的搜索结果在单元格E2 中使用这个公式:

=IF(MAX($D:$D)=0,NA(),MATCH(MAX($D:$D),$D:$D,1)&","&MAX($D:$D))

【讨论】:

  • 在对我的解决方案重新实施此答案后,我必须修复匹配以使用匹配类型 0,即 =IF(MAX($D:$D)=0,NA(),MATCH(MAX ($D:$D),$D:$D,0)&","&MAX($D:$D)) 上面的,除了效果很好,谢谢 Taosique
【解决方案2】:

如果您想要一个更简单的解决方案,可以只使用一个助手(或根本不使用,代价是复杂的公式)。

假设我以你为例。我将使用D 列来显示结果:

  • D1 中,我输入了我要查找的名称:Chad
  • D2 中,我放置了将返回搜索值索引的帮助程序(-1,如果未找到):=IFERROR(MATCH(D1,SPLIT(TEXTJOIN(";",TRUE,A1:C3),";"),0),-1)
  • D3 中,我输入公式以获取row,column 值(FALSE 如果未找到):=IF(D2<>-1,ROUNDUP(DIVIDE(D2,COLUMNS(A1:C3))) & "," & IF(MOD(D2,COLUMNS(A1:C3))=0,COLUMNS(A1:C3),MOD(D2,COLUMNS(A1:C3))))

如果您真的只想使用一个公式,可以将D3 中对D2 的所有引用替换为D2 中使用的公式。

【讨论】:

    【解决方案3】:

    老问题,但我想我会在这里分享一个更简单、更优雅的答案,不涉及辅助列或复杂的公式,以便更多人更轻松地完成工作。假设该表包含唯一值,并且您使用 E1 存储搜索字符串 ChadE2 以显示结果:

    • 如果你想要2,3的行列结果在E2中:

      =SUMPRODUCT((A1:C3=E1)*ROW(A1:C3)) & "," & SUMPRODUCT((A1:C3=E1)*COLUMN(A1:C3))
      
    • 如果你想要C2中的R1C1风格的单元格地址字符串E2

      =ADDRESS(SUMPRODUCT((A1:C3=E1)*ROW(A1:C3)),SUMPRODUCT((A1:C3=E1)*COLUMN(A1:C3)))
      
    • 如果你想要在E2 中找到Chad 的单元格内容:

      =INDIRECT(ADDRESS(SUMPRODUCT((A1:C3=E1)*ROW(A1:C3)),SUMPRODUCT((A1:C3=E1)*COLUMN(A1:C3))))
      

    事情是如何运作的:

    • 在这种情况下,SUMPRODUCT 返回表中每个单元格和相应行的 TRUE(在单元格中找到的搜索值)和 FALSE(在单元格中未找到的搜索值)的布尔数组之间的乘积之和/工作表中这些单元格的列(绝对)数;因此,结果本质上是找到值的单元格的行/列(绝对)数,因为 TRUE=1FALSE=0 在数学术语中
    • ADDRESS 将单元格的地址作为文本返回(不是参考!)
    • INDIRECT 返回对应于单元格文本地址的引用

    来源和致谢:this answer by XOR LX。可以在评论中添加链接,提到重复的问题,但我想稍微扩展和解释答案,因此需要更多字符。

    【讨论】:

    • 谢谢!使用它在单独的工作表(sheet2)中的二维数组(D2:H)中查找附近单元格(E2)的值出现的位置,然后提取该行的A列中的单元格的值找到值的位置:=INDEX(sheet2!$A:$A, SUMPRODUCT((sheet2!$D$2:$H = E2) * row(sheet2!$D$2:$H)))
    猜你喜欢
    • 1970-01-01
    • 2015-11-20
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多