将所有列值与 Excel 中的单个单元格进行比较
Posted
技术标签:
【中文标题】将所有列值与 Excel 中的单个单元格进行比较【英文标题】:Compare all column values against individual cells in Excel 【发布时间】:2019-04-17 16:59:45 【问题描述】:我想查找 C 列中的任何行是否与 A 或 B 列中的任何单元格匹配,如果匹配,则在相邻单元格中打印“是”或“否”。匹配可能不准确,因为 ID 可能写为“12401”,但列中的匹配可能类似于“cf[12401]”,ID 括在括号中。
这是我可能在表格中找到的一个示例。 A 和 B 列中的值最初来自另一个表,但我正在尝试查找它们可能存在于第三列中的所有实例。
Excel 示例:
如果可能,我想在列中列出匹配的值本身。但是那部分会是一个很好的额外部分,而另一部分更重要,因为中间一列大约有 6000 个值,所以手工操作需要几天时间。
我尝试过不同的方法:
=IF(COUNTIF(C2,"*" & A6 & "*" ), "Yes", "No")
或
=IF(COUNTIF(C2,"*" & Length & "*" ), "Yes", "No")
这些适用于单个单词或单元格,但尝试根据单元格检查该列中的所有值将返回 no。我尝试了 SUMPRODUCT 的变体以及我发现的其他变体,但无法获得适用于多个值的东西。
Excel 中是否有一些函数可以让我这样做?或者也许是 VBA 中的一种方式?
【问题讨论】:
你试过Match()
吗?看起来就在你的小巷里,不需要VBA。如果你走 VBA 路线,你会循环并使用InStr()
进行部分匹配。
我在这里和@Cyril 在一起,这看起来像是Match
的工作,尽管有一些连接。或者Find
。喜欢,=FIND("12401",A1)>0
【参考方案1】:
这里有一些你可以使用的 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","")
并将其横向向下拖动。
【讨论】:
以上是关于将所有列值与 Excel 中的单个单元格进行比较的主要内容,如果未能解决你的问题,请参考以下文章
需要一种更好的方法来将一个列值与同一表行中的多个列值进行比较