46 lines
1.1 KiB
Text
46 lines
1.1 KiB
Text
Public Function RangeExpand(AString as string)
|
|
' return a list with the numbers expressed in AString
|
|
Dim Splits() As String
|
|
Dim List() As Integer
|
|
Dim count As Integer
|
|
|
|
count = -1 'to start a zero-based List() array
|
|
' first split it using comma as delimiter
|
|
Splits = Split(AString, ",")
|
|
' process all fragments
|
|
For Each fragment In Splits
|
|
'is there a "-" in it (do not consider first character)?
|
|
P = InStr(2, fragment, "-")
|
|
If P > 0 Then 'yes, so it's a range: find start and end numbers
|
|
nstart = Val(left$(fragment, P - 1))
|
|
nend = Val(Mid$(fragment, P + 1))
|
|
j = count
|
|
count = count + (nend - nstart + 1)
|
|
'add numbers in range to List
|
|
ReDim Preserve List(count)
|
|
For i = nstart To nend
|
|
j = j + 1
|
|
List(j) = i
|
|
Next
|
|
Else
|
|
'not a range, add a single number
|
|
count = count + 1
|
|
ReDim Preserve List(count)
|
|
List(count) = Val(fragment)
|
|
End If
|
|
Next
|
|
RangeExpand = List
|
|
End Function
|
|
|
|
Public Sub RangeExpandTest()
|
|
'test function RangeExpand
|
|
Dim X As Variant
|
|
|
|
X = RangeExpand("-6,-3--1,3-5,7-11,14,15,17-20")
|
|
'print X
|
|
Debug.Print "Result:"
|
|
For Each el In X
|
|
Debug.Print el;
|
|
Next
|
|
Debug.Print
|
|
End Sub
|