检查Excel中是否存在范围内的任何值

我想检查单元格A1的值是否存在于sheet2!$ A $ 2:$ z $ 50中的任何位置。

如果值存在,则返回find匹配的列的第一行的值。

我试过了:

  • VLOOKUP
  • HLOOKUP

但是这个函数仅限于检查是否在单行/列匹配。

我希望能得到像=IF(A1,sheet2!$A$2:$Z$50,x1,FALSE)其中x =find匹配的列。

有没有这样的事情?

Sheet2就像:

在这里输入图像说明

我们希望Sheet1上的公式能够返回标题行中的值,如果该列包含要find的值。 所以如果A1包含好人那么该公式应该返回维克多·拉斯洛

将下面的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窗口
  2. ALT-I ALT-M打开一个新的模块
  3. 粘贴东西,closuresVBE窗口

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

要删除UDF:

  1. 如上所示调出VBE窗口
  2. 清除代码
  3. closuresVBE窗口

从Excel中使用UDF:

= GetHeader(A1,Sheet2的A1:Z50)

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

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

macros必须启用这个工作!

注意:

我们给UDF提供包括标题行在内的整个范围(尽pipe标题行从search中排除)

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

按住Shift 一起input

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

我想你可以做到这一点,如果你使用辅助单元。

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