[英]In excel, how to get comma separated values from a column based on search criteria on another column
[英]How to search for a number in a column with comma separated values in Excel
A栏 | B栏 |
---|---|
1 | |
2 | 1 |
3 | 1 |
4 | |
5 | 1,4 |
等等 |
试图弄清楚如何搜索 A 列中的数字是否存在于 B 列中的任何位置。
到目前为止,我已经尝试过:
=IF(ISNUMBER(SEARCH(A2,B:B)),"YES","NO") which returns #spill
这个UDF :
Function CheckOne(rng As Range, chkValue As Long) As Boolean
Dim n
For Each n In Split(rng.Value, ",")
If CLng(n) = chkValue Then
CheckOne = True
Exit For
End If
Next n
End Function
Function CommaSeparatedListContains(ByVal csv As String, ByVal v As String, _
Optional ByVal delimiter As String = ",") As Boolean
Dim i As Long
Dim splitCsv() As String
splitCsv = Split(csv, delimiter)
CommaSeparatedListContains = False
For i = LBound(splitCsv) To UBound(splitCsv)
If splitCsv(i) = v Then
CommaSeparatedListContains = True
Exit Function
End If
Next i
End Function
这也不起作用,因为我收到了 #VALUE! 错误
我怀疑这是因为我要查找的值在 B 列中出现不止一次。
我在这里做错了什么?
这是使用 UDF 的一种方法:
Public Function CheckOne(rgValue As Range, rgLookup As Range) As Boolean
Dim in1, vnSplit, rgC As Range
''' Compare to each cell in check range
For Each rgC In rgLookup.Cells
''' Skip empty cells
If rgC <> "" Then
''' Split based on comma separation (if any)
vnSplit = Split(rgC.Value, ",")
''' No comma separation: Just compare to the value
If UBound(vnSplit) = 0 Then
If rgValue = rgC Then CheckOne = True: Exit Function
''' Has comma seperation: Compare to to each value sub-value
Else
For in1 = 0 To UBound(vnSplit)
If rgValue = Val(vnSplit(in1)) Then CheckOne = True: Exit Function
Next in1
End If
End If
Next rgC
End Function
如果您可以访问它(即 Office-365 或 Office 2019),那么我建议先使用TEXTJOIN
来“展平”这些值。 这还可以让您消除示例中值 2 和 3 的误报,方法是要求分隔符(在本例中为逗号)在值之前和之后:
=IF(ISNUMBER(SEARCH(","&A2&",", ","&TEXTJOIN(",",True,B:B)&",")),"YES","NO")
您还可以使用SUBSTITUTE
来消除可能已放入的任何空格,例如“1, 2, 3”被视为与“1,2,3”相同):
=IF(ISNUMBER(SEARCH(","&A2&",", SUBSTITUTE(","&TEXTJOIN(",",True,B:B)&","," ",""))),"YES","NO")
但是,我在测试时确实发现了一个烦人的问题:Excel 将值“100,101,102”视为数字一亿、一十一千、一百零二(即 100101102),并使用逗号分隔符格式化数千 - 因此 Excel 在检查该单元格中是否存在数字时完全忘记了逗号应该存在! 我必须将单元格的数字格式明确更改为“文本”,然后重新输入值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.