【发布时间】: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
我在 A 列中有一个值列表,在 B 列中有另一个值列表。
如果 A 列中的任何值在 B 列中,我试图让 C 列中的单个单元格指示 TRUE,或者 FALSE 是 A 列中没有值在 B 列中。
我试过 MATCH(lookup value, in range),但它只查看 A 中的一个值。
没有 VBA 是否可以做到这一点?也对 VBA 解决方案开放。谢谢
【问题讨论】:
标签: excel excel-formula vba
这是一个快速而肮脏的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 循环是否有意义。
我使用类似的方法将一个列表中的值与 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
【讨论】: