【问题标题】:google spreadsheet: extract multiple numbers from text cells谷歌电子表格:从文本单元格中提取多个数字
【发布时间】:2014-07-07 12:52:37
【问题描述】:

我正在使用类似这样的谷歌电子表格(它是单列):

1
2
3,4
5
6-9
15
18

3,4 是 3 和 4

6-9 是 6、7、8 和 9

在另一张纸上,我制作了一个标准的 1-100 列表,我必须找到一种方法来“标记”上一个列表中出现或包含的数字,就像这样。

1       YES
2       YES
3       YES
4       YES
5       YES
6       YES
7       YES
8       YES
9       YES
10      NO
11      NO
12      NO
13      NO
14      NO
15      YES

通过在单元格 B1 中使用,我可以轻松找到简单的唯一数字: =IF((COUNTIF(list!$A$1:$A$100,VALUE(A1))=1),"YES","NO")

我什至可以找到第一个数字是什么:

=IFERROR(LEFT(list!$A$1:$A$100,(SEARCH(",",list!$A$1:$A$100)-1)),IFERROR(LEFT(list!$A$1:$A$100,(SEARCH("-",list!$A$1:$A$100)-1)),list!$A$1:$A$100))

但我无法扩展搜索以包括“x-y”之间或“x,y”中逗号之后的数字。

我试过 AND("大于第一个数字","小于第二个数字") 但我还没有找到提取第二个数字的方法。

有什么建议吗?

【问题讨论】:

    标签: excel search spreadsheet


    【解决方案1】:

    这是一个适用于 excel 电子表格的宏。您可以将其改编为 Google Apps 脚本:

    Sub IsItThere()
        Dim s1 As Worksheet, s2 As Worksheet, N As Long
        Dim v As Variant, i As Long, ary()
        Dim N1 As Long, N2 As Long, j As Long
        Set s1 = Sheets("Sheet1")
        Set s2 = Sheets("Sheet2")
    
        s1.Activate
    
        N = Cells(Rows.Count, "A").End(xlUp).Row
        Dim c As Collection
        Set c = New Collection
        For i = 1 To N
            v = Cells(i, 1).Value
            If InStr(1, v, ",") > 0 Then
                c.Add CLng(Split(v, ",")(0))
                c.Add CLng(Split(v, ",")(1))
            ElseIf InStr(1, v, "-") > 0 Then
                N1 = CLng(Split(v, "-")(0))
                N2 = CLng(Split(v, "-")(1))
                For j = N1 To N2
                    c.Add j
                Next j
            Else
                c.Add CLng(v)
            End If
        Next i
        ReDim ary(1 To c.Count)
        For i = 1 To c.Count
            ary(i) = c.Item(i)
        Next i
    
        s2.Activate
    
        N = Cells(Rows.Count, "A").End(xlUp).Row
        For i = 1 To N
            v = Cells(i, 1).Value
            For j = 1 To c.Count
                If v = ary(j) Then
                    Cells(i, 2).Value = "YES"
                    GoTo pass
                End If
            Next j
            Cells(i, 2).Value = "NO"
    pass:
        Next i
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多