检查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)非常易于安装和使用:
- ALT-F11调出VBE窗口
- ALT-I ALT-M打开一个新的模块
- 粘贴东西,closuresVBE窗口
如果保存工作簿,则UDF将随之保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx
要删除UDF:
- 如上所示调出VBE窗口
- 清除代码
- 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()
来查找该列中第一行的值。