请尝试下一个功能:
Function SequenceMargins(s As String) As Variant
Dim arr As Variant, i As Long, strSeq As String, firstEl As Long
Dim arrFin As Variant, k As Long
arr = Split(s, ",")
ReDim arrFin(UBound(arr))
For i = 0 To UBound(arr) - 1
If CLng(arr(i)) = CLng(arr(i + 1)) - 1 And firstEl = 0 Then firstEl = CLng(arr(i))
If firstEl <> 0 And CLng(arr(i)) > firstEl And CLng(arr(i)) <> CLng(arr(i + 1)) - 1 Then
arrFin(k) = firstEl & "&" & arr(i): k = k + 1
firstEl = 0
End If
If i = UBound(arr) - 1 And firstEl <> 0 Then
arrFin(k) = firstEl & "&" & arr(UBound(arr)): k = k + 1
End If
Next i
ReDim Preserve arrFin(k - 1)
SequenceMargins = arrFin
End Function
可以这样调用:
Sub testSequenceMargins()
Dim s As String, arr As Variant
s = "1,2,3,5,7,8,9,10,13,14,15,20,34,35,36"
arr = SequenceMargins(s)
Debug.Print UBound(arr), arr(0), arr(UBound(arr))
End Sub