获取不同序列的数字数组
除了 JvDv 的有效答案之外,另一种方法是将项目分配给基于 0 的 1-dim 数组,该数组可用于进一步处理:
Sub GetArrayOfNumbers()
Dim numbers As String: numbers = "500-510,512-513,516"
ReDim tmp(10000) ' provide for enough items in temp array
Dim number
For Each number In Split(numbers, ",") ' check each number or pair of numbers
Dim pair: pair = Split(number & "-" & number, "-")
Dim i As Long, counter As Long
For i = Val(pair(0)) To Val(pair(1))
tmp(counter) = i: counter = counter + 1 ' add number to temporary array
Next
Next number
ReDim Preserve tmp(0 To counter - 1) ' reduce to exact items count
Debug.Print Join(tmp, ",") ' (optional) display in VB Editor's Immediate Window
' ~> 500,501,502,503,504,505,506,507,508,509,510,512,513,516
End Sub
有条不紊的提示
为了避免区分单个数字和数字范围,我通过将相同的标记(以“-”前缀)重新添加到自身来将任何数字标记更改为一对数字,这简化了拆分和最终的分配循环.
因此,拆分最后一个标记 "516-516" 将允许在单个循环步骤中收集相关的数组项,而附加的附录在实际的数字对中无关紧要(因为拆分冗余字符串 "500-510-500-510" 会导致一个正确的值pair(0) = 500 和pair(1)=510,也是)。