检查值是否存在于 Excel 范围内的任何地方

Checking if a value exists anywhere in range in Excel

我想检查单元格 A1 的值是否存在于任何地方 来自 sheet2!$A$2:$z$50.

如果值存在,则return 第一行 的值位于找到匹配项的列。

我试过了:

但此功能仅限于检查单行/单列是否匹配。

我希望得到类似 =IF(A1,sheet2!$A:$Z,x1,FALSE) 的东西 其中 x = 找到匹配项的列。

有这样的吗?

我想如果你使用辅助细胞就可以做到。

  • 在辅助行中,在每一列上以精确模式使用 MATCH() 来查找该列中值的行索引(如果存在)。将其包装在 NOT(ISERROR()) 中以将结果转换为 true/false 二进制数据。真 = 匹配; FALSE = 不匹配。
  • 然后在辅助行上再次使用 MATCH(),这次找到第一个 TRUE(即匹配)列; MATCH() 将 return 列的索引;然后您可以使用 INDEX() 查找该列中第一行的值。

像这样的数组公式可以工作

同时按ShiftCtrlEnter

=IF(COUNTIF(A2:Z50,A1)>0,MIN(IF(A2:Z50=A1,ROW(A2:Z50),51)),"not found")

Sheet2 就像:

我们想要 Sheet1 上的一个公式,它将 return header 行中的值,如果列包含要查找的值。所以如果 A1 包含 Good Guy 那么公式应该 return Victor Laszlo

将以下UDF放入标准模块中:

Public Function GetHeader(v As Variant, rTable As Range) As Variant
    Dim rHead As Range, rData As Range, WhereIsIt As Range
    Set rHead = Intersect(rTable(1).EntireRow, rTable)
    Set rData = Intersect(rTable.Offset(1), rTable)

    Set WhereIsIt = rData.Find(what:=v, After:=rData(1))
    If WhereIsIt Is Nothing Then
        v = "NOT FOUND"
        Exit Function
    End If

    GetHeader = Intersect(WhereIsIt.EntireColumn, rHead).Value
End Function

用户定义函数 (UDF) 非常易于安装和使用:

  1. ALT-F11 调出 VBE window
  2. ALT-I ALT-M 打开一个新模块
  3. 粘贴内容并关闭 VBE window

如果您保存工作簿,UDF 将随之保存。 如果您使用的 Excel 版本晚于 2003,则必须保存 文件为 .xlsm 而不是 .xlsx

删除 UDF:

  1. 如上所述调出 VBE window
  2. 清除代码
  3. 关闭 VBE window

要使用来自 Excel 的 UDF:

=GetHeader(A1,Sheet2!A1:Z50)

要了解有关宏的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

有关 UDF 的详细信息,请参阅:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

必须启用宏才能运行!

注意:

我们为 UDF 提供整个范围 ,包括 header 行 (尽管 header 行被排除在搜索之外)

我最喜欢 return 从查找中获取值 sheet 如果查找 sheet 和要输入数据的 sheet 中都存在对应的单元格进入是

INDEX('Sheet1'!I:I,(MATCH(D2,'Sheet1'!A:A,0)))

这基本上是 Vlookup 或 Match If 公式的更灵活版本。它说的是你在 Sheet 1 的 A:A 列中找到一个与 D2 中的值匹配的值,然后 return 来自 I:I 列的相应值(来自同一行) =23=] 1.

如果我想匹配两个 sheet 之间的数据,我会使用它,例如定价与产品名称或 SKU 匹配。