Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将值的范围插入多维数组_Excel_Vba - Fatal编程技术网

Excel 将值的范围插入多维数组

Excel 将值的范围插入多维数组,excel,vba,Excel,Vba,我试图创建一个多维数组,其中第一列包含标识符,相邻列包含与该标识符相关的数据。例如,我想创建一个具有以下结构的数组: Banana 10 20 30 40 Coconut 5 10 2 4 Apple 3 4 5 6 数组的构造从相关标识符的定义开始。例如,在上面的例子中,是香蕉、椰子和苹果。我用于构建阵列的数据的布局如下所示: Banana 10 20 30 40 Parrot 5 3 1 4 Apple 3 4 5 6

我试图创建一个多维数组,其中第一列包含标识符,相邻列包含与该标识符相关的数据。例如,我想创建一个具有以下结构的数组:

Banana  10  20  30  40
Coconut 5   10  2   4
Apple   3   4   5   6
数组的构造从相关标识符的定义开始。例如,在上面的例子中,是香蕉、椰子和苹果。我用于构建阵列的数据的布局如下所示:

Banana  10  20  30  40
Parrot  5   3   1   4
Apple   3   4   5   6
Car     10  20  30  40
Donkey  4   12  3   0
Coconut 5   10  2   4
因此,我首先定义香蕉、椰子和苹果标识符,然后希望根据数据中标识符名称的循环自动填充数组(我已将其定义为“输入”)。但是,我不确定如何在每次标识符匹配时正确插入数组中的相邻数据。如果有人能根据下面的代码解释我如何做到这一点,我将不胜感激

identifierArray = Array("Banana", "Coconut", "Apple")
NumElements = UBound(identifierArray) - LBound(identifierArray) + 1

For Each Element In identifierArray
    ReDim Preserve arr(0 To NumElements, x)
    arr(i, 0) = identifierArray(i)
    i = i + 1
Next Element

For Each cell In ws.Range("INPUT")
    For Each Element In identifierArray
        If cell.Value = Element Then

         [Need help here]

        End If
    Next Element
Next cell

我不需要帮助创建VLOOKUP或索引/匹配解决方案,因为这与上述内容无关。

您可以从工作表上的某个范围填充数组,如下所示:

Option Explicit
Sub Test()

    Dim arr

    With ThisWorkbook.Sheets("Data")
        arr = .Range("A1:E6")
    End With

End Sub
所以像这样的范围:

Option Explicit
Sub Test()

    Dim arr

    With ThisWorkbook.Sheets("Data")
        arr = .Range("A1:E6")
    End With

End Sub

变成如下所示的数组:

Option Explicit
Sub Test()

    Dim arr

    With ThisWorkbook.Sheets("Data")
        arr = .Range("A1:E6")
    End With

End Sub


因此,您根本不需要循环,这意味着执行速度更快,编码成本更低。

您可以从工作表上的某个范围填充数组,如下所示:

Option Explicit
Sub Test()

    Dim arr

    With ThisWorkbook.Sheets("Data")
        arr = .Range("A1:E6")
    End With

End Sub
所以像这样的范围:

Option Explicit
Sub Test()

    Dim arr

    With ThisWorkbook.Sheets("Data")
        arr = .Range("A1:E6")
    End With

End Sub

变成如下所示的数组:

Option Explicit
Sub Test()

    Dim arr

    With ThisWorkbook.Sheets("Data")
        arr = .Range("A1:E6")
    End With

End Sub


因此,您根本不需要循环,这意味着执行速度更快,编码成本更低。

您的工作表上难道没有这些数据吗?因为你只需要
arr=Range(“A1:E7”).Value
就可以得到一个像你的工作表一样的2D数组。请注意,在数组
arr(1到10,1到5)
中,你只能
ReDim
第二个参数
1到5
,而不能在不丢失数据的情况下使用第一个
1到10
。因此,您不能向该数组中添加“行”,而只能添加“列”。如果您希望使用标识符,您可能希望改为使用集合或字典。您的工作表上没有这些数据吗?因为你只需要
arr=Range(“A1:E7”).Value
就可以得到一个像你的工作表一样的2D数组。请注意,在数组
arr(1到10,1到5)
中,你只能
ReDim
第二个参数
1到5
,而不能在不丢失数据的情况下使用第一个
1到10
。因此,您不能向该数组中添加“行”,而只能添加“列”。如果您希望使用标识符,您可能希望改为使用集合或字典