【问题标题】:Searching comma-separated numbers within a cell在单元格中搜索逗号分隔的数字
【发布时间】:2014-09-09 04:46:33
【问题描述】:

我有一列有很多逗号分隔的数字,例如:

   100633,101

    123,12

   100633,1000

如何搜索特定单元格是否包含数字100633

【问题讨论】:

  • @VDohnal:我一开始也是这么想的,但是简单的字符串搜索并不总是有效:它会错误地返回TRUE,例如1,2,3,999100633999。必须查看整个逗号分隔值。
  • 总是只有两个数字吗?或者它有时是一个更长的列表? 100633 总是在列表中排在第一位吗?
  • @Jean-FrançoisCorbett 你说得对,但我不敢相信如果不使用 VBA 就无法完成如此简单的任务。

标签: excel excel-formula


【解决方案1】:

针对@Jean-François Corbett 的正确评论并基于以下答案

Check whether a cell contains a substring

这是一个公式,它在单元格 A1 中搜索文本 100633,仅考虑逗号分隔值

=ISNUMBER(SEARCH(",100633,",","&A1&","))

它可以正确处理像1,2,3,999100633999这样的文本

您也可以使用FIND 代替SEARCH 函数。 FIND 区分大小写。对于SEARCH,您可以使用通配符。

【讨论】:

  • 只有当逗号分隔列表中的“100633”不是第一个时,这个答案才有效? IE,搜索的是一个以逗号开头并以逗号结尾的数字。如果是列表中的第一个数字,它不会以逗号开头,所以找不到?
  • @TomAuger 不,因为它在 ","&A1&"," 内搜索,而不仅仅是在 A1 内搜索。
【解决方案2】:

假设第一个目标单元格在 A1 中,返回 TRUE 或 FALSE:

=ISNUMBER(SEARCH(100633,A1))

判断真假时返回的自定义值:

=IF(ISNUMBER(SEARCH(100633,A1)),'yes','no)

【讨论】:

  • 假阳性例如1,2,3,999100633999.
【解决方案3】:
=IF(FIND("100633",E11)=1,"Number Exists","Not Exists")

公式搜索文本并返回它是否存在于单元格中

更新: 尝试使用以下 excel 公式:

=MID(E18,FIND("100633",E18),6)

【讨论】:

  • 假阳性例如1,2,3,999100633999.
  • 我已经尝试使用以下公式:=MID(E18,FIND("100633",E18),6) 希望它能正常工作
  • 嗯,那个公式还说我刚刚给出的那个例子中存在数字100633。但显然不是。 999100633999100633 是两个截然不同的数字。
【解决方案4】:

VBA 解决方案:

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

示例用法:

=CommaSeparatedListContains(A1,100633)

【讨论】:

    【解决方案5】:

    使用以下方法...

        private boolean isNumberInvolved(String column, String number_to_check){
            String[] numberArray = column.split(",");
            for(int i=0; i<numberArray.length; i++){
                if(numberArray[i].equals(number_to_check))
                    return true;
            }
            return false;
        }
    

    【讨论】:

    • 谢谢大家..当时我需要快速解决方案,所以使用了一种非常原始的方法...现在,我正在应用这些方法。除了我检查的那个(作为答案)之外,还有很多正确的答案。 Bt 我无法全选。所以选择了我正在应用其公式的那个。再次非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2018-12-18
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    相关资源
    最近更新 更多