即使存在多个实例,如何在 excel 的列中搜索连续数字的特定数据

How to search for a specific data of consecutive numbers in a column of an excel even if multiple instances are present

如何在 excel 电子表格中的 1 和 0 大数据列中找到连续数字的多个实例。 例如,我的 excel 列如下:

0                    
0  
1   
1   
0  
0  
1  
0  
1   
0  
0  
1  
1   
0  
1  
1  
1  
0  
0  
1   
1    
0    
0  
1   
0

请假设这是我的一些列数据,我需要找到列中出现的 1 和 0 的序列。

我定义了一个用于查找单个实例的函数,如下所示:

Function FINDSEQ(seq As String, rng as Range) As Long
    FINDSEQ = InStr(1, Join(Application.Transpose(rng.Value), ""), seq)
End Function

但我找不到如何找到多个实例(如果存在)。 例如,我需要找到:

1    
1  
0   
0   
1  
0   

作为连续数字的序列,我应该如何改变?
这里 1 1 0 0 1 0 出现了两次,但是根据上面定义的函数我只能找到一个实例。

请尝试下一个功能:

Function FINDSEQ(seq As String, rng As Range) As Long
 FINDSEQ = UBound(Split(Join(Application.Transpose(rng.Value), ""), seq))
End Function

然后用下面的方式调用它:

Sub testFINDSEQ()
  Dim sh As Worksheet, rng As Range
  
  Set sh = ActiveSheet
  Set rng = sh.Range("A1:A25")
  Debug.Print FINDSEQ("110010", rng)
End Sub

或来自单元格(如 UDF):

=FINDSEQ("110010",A1:A25)

不要忘记删除您已经存在的函数

FINDSEQ函数添加一个sp(起始位置)参数:

Function FINDSEQ(seq As String, rng As Range, sp As Integer) As Long
    FINDSEQ = InStr(sp, Join(Application.Transpose(rng.Value), ""), seq)
End Function

然后从找到的任何匹配字符串的下一个位置继续搜索:

newpos=FINDSEQ(1)

Do While newpos>0
    Debug.Print newpos
    newpos=FINDSEQ(newpos+1)
Loop

希望您在上次 之后先自己尝试一下。我也会使用 InStr 的第一个参数,但与@JMP 有点不同:

Function FINDSEQ(rng As Range, seq As String) As String

Dim x As Long, y As Long: x = 1
Do While InStr(x, Join(Application.Transpose(rng.Value), ""), seq) > 0
    y = InStr(x, Join(Application.Transpose(rng.Value), ""), seq)
    If FINDSEQ = "" Then
        FINDSEQ = y
    Else
        FINDSEQ = FINDSEQ & "," & y
    End If
    x = y + 1
Loop

End Function

函数现在也从 Long 类型更改为 String