首页 > 解决方案 > 使用多元素数组的多元素数组填充定义的命名范围

问题描述

我已经定义了 5 个数组。

一个具有未定义的维度来存储其他 4 个:

Dim outputArr() As Variant

其余如下:

Dim Arr1(5, 0), Arr2(12, 0), Arr3(5, 0), Arr4(12, 0) As Variant

我将后者的元素分配如下:

Arr1(0, 0) = [{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}]
Arr1(1, 0) = [{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}]
Arr1(2, 0) = [{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}]
Arr1(3, 0) = [{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}]
Arr1(4, 0) = [{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}]
Arr1(5, 0) = [{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}]

以上适用于每个数组。

当我使用

ReDim outputArray(3, 0)

outputArr = [{Arr1, Arr2, Arr3, Arr4}]

我得到一个'Type Mismatch'错误。

当我不使用Evaluate和分配时ReDim

outputArr = Array(Arr1, Arr2, Arr3, Arr4)

我可以在Watch 窗口中看到元素及其值,但是当我尝试使用元素填充定义的命名范围时,outputArr 我得到一个空输出

Range("nRange1name").Value = outputArr(0)
Range("nRange2name").Value = outputArr(1)
Range("nRange3name").Value = outputArr(2)
Range("nRange4name").Value = outputArr(3)

我该如何解决这个问题?

标签: arraysexcelvbamultidimensional-array

解决方案


您需要构建一个实际的二维数组来执行类似的操作。

Dim arr(1 to 6, 1 to 12)
dim r as long, c as long

for r = lbound(arr, 1) to ubound(arr, 1)
    for c = lbound(arr, 2) to ubound(arr, 2)
        arr(r, c) = 0
    next c
next r

Range("A1").Resize(ubound(arr, 1), ubound(arr, 2)).value = arr

推荐阅读