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
。因此,您不能向该数组中添加“行”,而只能添加“列”。如果您希望使用标识符,您可能希望改为使用集合或字典