繁体   English   中英

如何在Excel中用逗号分隔值的列中搜索数字

[英]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

另一个UDF:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM