【问题标题】:EXCEL array formula to indicate if a value in one range is present in another rangeEXCEL 数组公式,用于指示一个范围内的值是否存在于另一个范围内
【发布时间】:2015-10-03 02:28:48
【问题描述】:

我在 A 列中有一个值列表,在 B 列中有另一个值列表。

如果 A 列中的任何值在 B 列中,我试图让 C 列中的单个单元格指示 TRUE,或者 FALSE 是 A 列中没有值在 B 列中。

我试过 MATCH(lookup value, in range),但它只查看 A 中的一个值。

没有 VBA 是否可以做到这一点?也对 VBA 解决方案开放。谢谢

【问题讨论】:

    标签: excel excel-formula vba


    【解决方案1】:

    这是一个快速而肮脏的UDF,可以做到这一点。

    Public Function Exist(a As Range, b As Range) As Boolean
    Dim temp As Boolean
    temp = False
    For Each cel In a
        If WorksheetFunction.CountIf(b, cel.value) > 0 Then
            temp = True
            Exit For
        End If
    Next cel
    
    exist = temp
    
    End Function
    

    【讨论】:

    • 这段代码似乎给出了错误的结果。如果我手动使用公式 =countif(B4, AIP!A:A) 我得到 1 但将你的函数调用为 Exist(B3:B4, AIP!A:A) 我得到错误。并且感觉我知道 B3 不存在于该范围内,但 b4 存在,我希望得到 True。我还想知道,一旦 1 个单元格评估为真,就结束 countif 循环是否有意义。
    • @Britt Huh,这很有趣,我已经在我的机器上测试过它并且它可以工作。任何机会我都可以获得数据的副本进行测试。我的电子邮件是 scott.craner@gmail.com。同样在您的问题中,您表示如果一个范围内的任何单元格等于另一范围内的任何单元格,您希望一个单元格返回 true,因此如果找到“True”,则继续循环是没有意义的。
    • 问题是“存在”这个词。一旦更改为“存在”,这是我在工作簿上的内容,但在答案中有所更改,该功能就起作用了。
    【解决方案2】:

    我使用类似的方法将一个列表中的值与 VBA 中的另一个进行比较。如果您有很多值要检查,可能需要一段时间。只需将 B 范围设置为工作表上的范围即可。

    Option Explicit
    Dim Index As Long
    Dim valueFound As Range
    Sub compareAandB()
    
    Index = 2
    
    Do While ThisWorkbook.ActiveSheet.Cells(Index, 1) <> ""
    
        Set valueFound = ThisWorkbook.ActiveSheet.Range("B2:B1000").Find(ThisWorkbook.ActiveSheet.Cells(Index, 1))
    
        If valueFound Is Nothing Then
            ThisWorkbook.ActiveSheet.Cells(Index, 3) = "Not Found"
        Else
            ThisWorkbook.ActiveSheet.Cells(Index, 3) = "Found"
        End If
        Index = Index + 1
    Loop
    End Sub
    

    【讨论】:

    • 好吧,如果是 VBA,它需要像 isPresent(lookUpValues As Range, lookHere As Range) 这样的参数。我必须在我的工作簿中使用这个公式/函数 924 次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多