首页 文章

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

提问于
浏览
2

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

IF the value exist 然后在找到匹配项的列处返回 1st Row 的值 .

我试过了:

  • VLOOKUP

  • HLOOKUP

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

我希望像 =IF(A1,sheet2!$A$2:$Z$50,x1,FALSE) 这样的东西,其中x =找到匹配的列 .

有类似的东西吗?

3 回答

  • 2

    像这样的数组公式可行

    同时按ShiftCtrlEnter

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

    说Sheet2就像:

    enter image description here

    我们想要一个Sheet1上的公式,如果该列包含要找到的值,它将返回 header 行中的值 . 所以如果 A1 包含Good Guy那么公式应该返回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)非常易于安装和使用:

    • ALT-F11调出VBE窗口

    • ALT-I ALT-M打开一个新模块

    • 粘贴内容并关闭VBE窗口

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

    要删除UDF:

    • 如上所述调出VBE窗口

    • 清除代码

    • 关闭VBE窗口

    要从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

    Macros must be enabled for this to work!

    注意:

    我们给UDF提供整个范围 including the header row (尽管 Headers 行从搜索中排除)

  • 0

    我认为如果使用辅助细胞,你可以做到这一点 .

    • 在辅助行中,在每列上以精确模式使用 MATCH() ,以查找该列中值的行索引(如果存在) . 将其包装在 NOT(ISERROR()) 中,将结果转换为true / false二进制数据 . TRUE =匹配; FALSE =不匹配 .

    • 然后在辅助行上再次使用 MATCH() ,这次找到第一个TRUE(即匹配)列; MATCH() 将返回列的索引;然后你可以使用 INDEX() 来查找该列第一行的值 .

相关问题