Получить массив чисел в разных последовательностях
В дополнение к правильному ответу 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
Методические подсказки
Чтобы избежать различия между отдельными числами и диапазоном номеров, я изменил любой числовой токен на пара чисел путем повторного добавления того же самого токена (с префиксом "-") к себе, что упрощает разбиение и возможное назначение l oop.
Таким образом, разделение последнего токена "516-516"
позволит собрать соответствующий элемент массива за один шаг l oop, тогда как дополнительное приложение не имеет значения в реальных парах чисел (как разделение избыточного строка "500-510-500-510"
приводит к правильным значениям pair(0)
= 500 и pair(1)
= 510 тоже).