我想查找C列中的任何行是否与A列或B列中的任何单元格匹配,如果匹配,则在相邻的单元格中打印出“是”或“否”。匹配可能不准确,因为ID可能写为'12401',但列中的匹配可能类似于'cf [12401]',且ID括在方括号中。
这是我可能在表中找到的示例。 A和B列中的值最初来自另一个表,但是我试图在第三列中找到它们可能存在的所有实例。
Excel示例:
如果可能的话,我想列出与列匹配的值。但是该部分将是一个不错的补充,而另一部分则更为重要,因为中间列中大约有6000个值,因此需要花费几天的时间。
我尝试过类似的事情:
=IF(COUNTIF(C2,"*" & A6 & "*" ), "Yes", "No")
或
=IF(COUNTIF(C2,"*" & Length & "*" ), "Yes", "No")
这些操作适用于单个单词或单元格,但是尝试对照该单元格检查该列中的所有值将返回否。我已经尝试了SUMPRODUCT和其他发现的变体,但是还没有获得适用于多个值的东西。
Excel中是否有一些功能可以使我做到这一点?或者也许是VBA中的一种方式?
答案 0 :(得分:2)
这是您可以使用的一些UDF。
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
在D2
中,我只是使用=IF(F2<>"","YES","")
并将其向侧面和向下拖动。