RosettaCodeData/Task/Range-expansion/VBA/range-expansion.vba
Ingy döt Net b83f433714 tasks a-s
2013-04-10 23:57:08 -07:00

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