Запись значений диапазона ячеек на листе книги Excel в обычную строковую переменную с сохранением структуры с помощью кода VBA.
Введение
В этой статье рассмотрим, как записать значения из диапазона ячеек Excel в обычную строковую переменную для последующего вывода с помощью метода Debug.Print. Для оптимизации работы с данными будем использовать массив, так как циклы по элементам массива выполняются быстрее, чем по ячейкам диапазона.
Пример кода
Ниже приведен пример макроса VBA Excel, который считывает значения из заданного диапазона ячеек, сохраняет их в массив, а затем формирует строковую переменную для вывода данных построчно с разделением элементов в строке точкой с запятой и пробелом.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Sub Primer() Dim rng As Range, r&, c&, ar, i1&, i2&, txt$ ' Устанавливаем диапазон ячеек Set rng = Worksheets("Лист4").Range("A1:F40") ' Получаем количество строк и столбцов, а также значения диапазона в массив With rng r = .Rows.Count c = .Columns.Count ar = .Value End With ' Формируем строку из элементов массива For i1 = 1 To r For i2 = 1 To c txt = txt & ar(i1, i2) If i2 = c Then txt = txt & vbNewLine ' Переход на новую строку в конце строки диапазона Else txt = txt & "; " ' Разделитель между элементами End If Next Next ' Выводим результат в окно Immediate (Ctrl+G в VBA-редакторе) Debug.Print txt End Sub |
Как это работает
- Объявление переменных:
rng— объект типаRangeдля работы с диапазоном ячеек.rиc— переменные для хранения количества строк и столбцов диапазона.ar— массив, в который записываются значения диапазона.i1иi2— счетчики для циклов по строкам и столбцам.txt— строковая переменная для накопления результата.
- Получение данных:
- Диапазон
A1:F40на листе «Лист4» задается с помощьюSet rng. - Свойства
.Rows.Countи.Columns.Countопределяют размеры диапазона. - Метод
.Valueкопирует значения диапазона в массивar.
- Диапазон
- Формирование строки:
- Внешний цикл
For i1перебирает строки массива. - Внутренний цикл
For i2перебирает столбцы. - Значения из массива добавляются в переменную
txt. - Если текущий элемент — последний в строке (
i2 = c), добавляется перенос строки (vbNewLine). - В противном случае добавляется разделитель
"; ".
- Внешний цикл
- Вывод результата:
- Метод
Debug.Printвыводит содержимое переменнойtxtв окно Immediate (доступно в VBA-редакторе через сочетание клавишCtrl+G).
- Метод
Результат работы кода
При выполнении макроса данные из диапазона будут выведены построчно, повторяя структуру исходного диапазона. Элементы в каждой строке разделяются символами "; ". Например, для диапазона с числами:
| 1 | 2 | 3 |
| 4 | 5 | 6 |
вывод в окне Immediate будет выглядеть так:
|
1 2 |
1; 2; 3 4; 5; 6 |
Данный код VBA Excel используется для проверки работы выбора диапазона из таблицы.
Преимущества подхода
- Скорость: использование массива (
ar) вместо прямого обращения к ячейкам диапазона значительно ускоряет обработку данных. - Гибкость: код легко адаптировать для других разделителей или форматов вывода.
- Простота: полученная строка может использоваться не только для
Debug.Print, но и для записи в файл, ячейку или другое место.
Этот подход полезен для задач, где требуется собрать данные из диапазона в текстовом формате с сохранением структуры таблицы.