将所有列值与Excel中的单个单元格进行比较

时间:2019-04-17 16:59:45

标签: excel vba

我想查找C列中的任何行是否与A列或B列中的任何单元格匹配,如果匹配,则在相邻的单元格中打印出“是”或“否”。匹配可能不准确,因为ID可能写为'12401',但列中的匹配可能类似于'cf [12401]',且ID括在方括号中。

这是我可能在表中找到的示例。 A和B列中的值最初来自另一个表,但是我试图在第三列中找到它们可能存在的所有实例。

Excel示例:

enter image description here

如果可能的话,我想列出与列匹配的值。但是该部分将是一个不错的补充,而另一部分则更为重要,因为中间列中大约有6000个值,因此需要花费几天的时间。

我尝试过类似的事情:

=IF(COUNTIF(C2,"*" & A6 & "*" ), "Yes", "No") 

=IF(COUNTIF(C2,"*" & Length & "*" ), "Yes", "No")

这些操作适用于单个单词或单元格,但是尝试对照该单元格检查该列中的所有值将返回否。我已经尝试了SUMPRODUCT和其他发现的变体,但是还没有获得适用于多个值的东西。

Excel中是否有一些功能可以使我做到这一点?或者也许是VBA中的一种方式?

1 个答案:

答案 0 :(得分:2)

这是您可以使用的一些UDF。

enter image description here

Dim MyArr As Variant, X As Double, LR As Double

Option Explicit

Public Function MatchID(RNG As Range) As String

With ActiveWorkbook.Sheets(RNG.Parent.Name)
    LR = .Cells(Rows.Count, 1).End(xlUp).Row
    MyArr = Application.Transpose(.Range(.Cells(2, 1), .Cells(LR, 1)))
    For X = LBound(MyArr) To UBound(MyArr)
        If InStr(1, RNG.Value, MyArr(X), vbTextCompare) > 0 Then
            If MatchID = "" Then
                MatchID = MyArr(X)
            Else
                MatchID = MatchID & ", " & MyArr(X)
            End If
        End If
    Next X
End With

End Function

Public Function MatchCFNAME(RNG As Range) As String

With ActiveWorkbook.Sheets(RNG.Parent.Name)
    LR = .Cells(Rows.Count, 1).End(xlUp).Row
    MyArr = Application.Transpose(.Range(.Cells(2, 2), .Cells(LR, 2)))
    For X = LBound(MyArr) To UBound(MyArr)
        If InStr(1, RNG.Value, MyArr(X), vbTextCompare) > 0 Then
            If MatchCFNAME = "" Then
                MatchCFNAME = MyArr(X)
            Else
                MatchCFNAME = MatchCFNAME & ", " & MyArr(X)
            End If
        End If
    Next X
End With

End Function

enter image description here

D2中,我只是使用=IF(F2<>"","YES","")并将其向侧面和向下拖动。