Многомерный массив VBA (2D-массивы)

В этом руководстве будут обсуждаться двумерные и многомерные массивы в VBA.

Многомерный массив (2D-массивы)

Многомерные массивы - это массивы, которые содержат более одного измерения, обычно двух или трех измерений, но массивы могут иметь до 32 измерений.

Объявить 2D-массив

Чтобы создать массив с более чем одним измерением, используйте запятые для определения каждого отдельного измерения:

1 Dim intArr (2,3) как целое число

Заполнение 2D-массива

Приведенный ниже код заполнит 2D-массив, а затем заполнит строки и столбцы рабочего листа значениями из массива.

1234567891011121314151617181920212223242526 Sub Populate2D ()'объявить 2D-массивDim intA (2, 3) как целое число'объявить переменныеDim rw как целое числоDim col As Integer'заполнить массивintA (0, 0) = 45intA (0, 1) = 50intA (0, 2) = 55intA (0, 3) = 60intA (1, 0) = 65intA (1, 1) = 70intA (1, 2) = 75intA (1, 3) = 80intA (2, 0) = 85intA (2, 1) = 90intA (2, 2) = 95intA (2, 3) = 100'пройти через массив и заполнить ExcelДля rw = от 0 до 2Для col = от 0 до 3Ячейки (rw + 1, col + 1). Value = intA (rw, col)Следующий столбецСледующий rwКонец подписки

Ваша электронная таблица Excel должна быть заполнена следующим образом.

Заполнение 2D-массива из данных Excel

Приведенный ниже код заполнит 2D-массив из листа Excel, а затем заполнит данные на другом листе.

1234567891011121314151617181920212223242526 Sub Populate2D ()'Объявить рабочие листыDim ws_Source As WorksheetDim ws_Destination As Worksheet'Объявить массивDim wsData (10, 2) как вариант'Объявить переменныеDim rw as IntegerDim col As Integer'обратитесь к исходному листуУстановить ws_Source = Worksheets ("Sheet1")'получить информацию из исходной таблицы и заполнить массивДля rw = LBound (wsData, 1) To UBound (wsData, 1)Для col = LBound (wsData, 2) To UBound (wsData, 2)wsData (rw, col) = ws_Source.Range ("A2"). Offset (rw, col) .ValueСледующий столбецСледующий rw'обратитесь к листу назначенияУстановить ws_Destination = Worksheets ("Sheet2")'заполняем целевой лист из массиваДля rw = LBound (wsData, 1) To UBound (wsData, 1)Для col = LBound (wsData, 2) To UBound (wsData, 2)ws_Destination.Range ("A1"). Смещение (rw, col) .Value = wsData (rw, col)Следующий столбецСледующий rwКонец подписки

Изменение размера с помощью ReDim и Re-Dim Preserve

Вы можете изменить размер массива, используя ReDim.

1234567891011121314151617 Sub Resize2D ()'объявить массивDim varArray () как вариант'объявить размер массиваReDim varArray (1, 2)varArray (0, 0) = "Мел Смит"varArray (0, 1) = "Фред Бакл"varArray (0, 2) = "Джейн Эйр"varArray (1, 0) = "Бухгалтер"varArray (1, 1) = "Секретарь"varArray (1, 2) = "Доктор"'повторно объявить размер массиваReDim varArray (0, 1)'повторно заполнить массивvarArray (0, 0) = "Мел Смит"varArray (0, 1) = "Фред Бакл"Конец подписки

Когда вы повторно объявляете массив, вы потеряете все данные, ранее хранящиеся в массиве, если вы не используете Заявление ReDim Preserve.

12345678910111213141516 Sub Resize2D ()'объявить массив Dim varArray () как Variant'объявить размер массиваReDim varArray (1, 2)varArray (0, 0) = "Мел Смит"varArray (0, 1) = "Фред Бакл"varArray (0, 2) = "Джейн Эйр"varArray (1, 0) = "Бухгалтер"varArray (1, 1) = "Секретарь"varArray (1, 2) = "Доктор"'повторно объявить размер массиваReDim Preverve varArray (1, 3)'заполняем массив дополнительными значениямиvarArray (0, 3) = "Роб Барнс"varArray (1, 3) = "Сантехник"Конец подписки

Вы можете изменить размер только последнего измерения массива, если хотите сохранить исходные данные в массиве с помощью Re-Dim Preserve.

Когда вы нажимаете кнопку «Отладка», ошибка будет выделена, показывая, что первое измерение в массиве не совпадает с первым измерением, когда размер массива был первоначально объявлен.

Вы поможете развитию сайта, поделившись страницей с друзьями

wave wave wave wave wave