Разбиение строк двумерного массива - по одной строке для каждого значения
- Макросы VBA Excel
- Обработка массивов
- Обработка таблиц
- Массивы
|
Если у вас есть таблица Excel, в которой, в определённом столбце, через запятую перечислены значения (или диапазоны значений), а вы хотите получить аналогичную таблицу, но чтобы в каждой строке было только одно значение, - то вам на помощь придёт функция ExtendArray.
(пример работы функции можно увидеть на прикреплённом изображении)
В своей работе ExtendArray использует функцию ArrayOfValues и функцию TransposeArray (которые надо также добавить в код, чтобы функция работала)
Function ExtendArray(ByVal arr, ByVal ColumnForExtend As Long) As Variant
' принимает в качестве параметров:
' двумерный массив arr, и номер столбца ColumnForExtend, содержащего список значений
' Возвращает двумерный массив (возможно, с большим количеством строк),
' в котором все строки содержат в столбце ColumnForExtend только одно значение
' индексы всех массивов начинаются с единицы (Option Base 1)
ColumnsCount% = UBound(arr, 2) - LBound(arr, 2) + 1
If ColumnForExtend > ColumnsCount% Or ColumnForExtend < 1 Then
MsgBox "В массиве нет столбца с номером " & ColumnForExtend, vbCritical, "Ошибка": End
End If
' формируем временный столбец из 1 столбца
ReDim tmpArr(1 To ColumnsCount%, 1 To 1)
For i = LBound(arr) To UBound(arr) ' перебираем все строки исходного массива
' перебираем все значения в заданном столбце
For Each v In ArrayOfValues(arr(i, ColumnForExtend))
' формируем новую запись (столбец) во временном массиве
For j = LBound(arr, 2) To UBound(arr, 2)
tmpArr(j, UBound(tmpArr, 2)) = arr(i, j)
Next j
' вместо списка значений поставляем очередное значение
tmpArr(ColumnForExtend, UBound(tmpArr, 2)) = v
' добавляем дополнительный столбец к временному массиву
ReDim Preserve tmpArr(1 To ColumnsCount%, 1 To UBound(tmpArr, 2) + 1)
Next v
Next i
' удаляем лишний столбец
On Error Resume Next: ReDim Preserve tmpArr(1 To ColumnsCount%, 1 To UBound(tmpArr, 2) - 1)
' транспонируем временный массив, и возвращаем результат
ExtendArray = TransposeArray(tmpArr)
End Function
Функция нашла применение в программе выгрузки тарифов в XML - там вы можете посмотреть её в работе.
Вложение |
Размер |
Загрузки |
Последняя загрузка |
ExtendArray.xls |
34.5 КБ |
120 |
1 день 23 часа назад |
|