Ситуация: дана строка, в которой через запятую перечислены значения (или диапазоны значений)
Требуется подсчитать, сколько значений содержится в строке, или же разбить строку на массив, содержащий все значения из исходной строки.
И, если при исходных строках вида "5,6,8,18,2,21" всё просто (достаточно применить VB-функцию Split), то при наличии в строке диапазонов значений вида Число1-Число2 (например, строка "9-15,18,2,11-9") задача заметно усложняется.
В этих случаях на помощь придёт функция ArrayOfValues
Function ArrayOfValues(ByVal txt$) As Variant
' Принимает в качестве параметра строку типа ",,5,6,8,,9-15,18,2,11-9,,1,4,,21,"
' Возвращает одномерный (горизонтальный) массив в формате
' array(5,6,8,9,10,11,12,13,14,15,18,2,11,10,9,1,4,21)
' (пустые значения удаляются; диапазоны типа 9-15 и 17-13 раскрываются)