VBA Variant
довольно гибкий, и вы можете использовать его, чтобы делать то, что вы хотите, но не делать точно , что вы просите.Ключевой момент заключается в том, чтобы отбросить трехмерный массив и использовать вместо него массив, содержащий другие массивы.
Я мог бы изменить здесь значение ваших индексов, но рассмотрим что-то вроде этого:
Dim china
china = [china!Q42:X99]
Dim india
india = [india!Q42:X99]
...
Dim world(1 to 242)
world(1) = china
world(2) = india
...
[report!Q42:X99] = world(42)
В этом примере используется одномерный массив Variant
с, каждый элемент которого представляет собой двумерный массив Variant
с, который поступает из различных диапазонов Excel.Если вы можете думать о трехмерном массиве как о кубе, подумайте об этой структуре как (1-D) книгу (2-D) страниц.
Обычно искажение данных с использованием только массивов (вложенных или иных) может быть сопряжено с опасностью.Однако в коде VBA, поддерживающем электронную таблицу Excel, это часто может быть наиболее естественным способом выполнения действий.Можно определить Type
s и Class
es в VBA, но во многих случаях это излишне, поскольку как источник ваших данных, так и окончательные результаты ваших вычислений - это всего лишь двумерные диапазоны где-то на рабочем листе.
Вот некоторые мои более ранние ответы на соответствующие вопросы:
VBA вставка трехмерного массива в лист
Как я могу «ReDim Preserve» a2D Array в Excel 2007 VBA, чтобы я мог добавлять в массив строки, а не столбцы?