Arrays 如何从多维数组中批量读取和写入数据,只拾取列?
我有一些代码,可以从多维数组中分别获取每一列,并粘贴到工作表列中。当我逐行运行它时,我看到它将值正确地复制到Resultar中,但当它将值写入工作表时,它会将该数组中的第一个值粘贴到整个列中。我完全被困在如何批量写入数据的问题上,有没有更好的解决方法?标志是行数,以双精度表示Arrays 如何从多维数组中批量读取和写入数据,只拾取列?,arrays,excel,vba,multidimensional-array,Arrays,Excel,Vba,Multidimensional Array,我有一些代码,可以从多维数组中分别获取每一列,并粘贴到工作表列中。当我逐行运行它时,我看到它将值正确地复制到Resultar中,但当它将值写入工作表时,它会将该数组中的第一个值粘贴到整个列中。我完全被困在如何批量写入数据的问题上,有没有更好的解决方法?标志是行数,以双精度表示 Sub MainSub() Dim dValueData As Variant Dim ResultArr() As Variant 'Some code here to get value for dValueDat
Sub MainSub()
Dim dValueData As Variant
Dim ResultArr() As Variant
'Some code here to get value for dValueData array which has 7000 rows and 6
columns, which also involves another sub. I can see that this array has correct values and length.
' Bulk writes data into Daily Views sheet to speed up code
Call GetColumn(0)
Worksheets("Sheet2").Range("B2:B" & Flag).Value = ResultArr
Call GetColumn(1)
Worksheets("Sheet2").Range("M2:M" & Flag).Value = ResultArr
Call GetColumn(2)
Worksheets("Sheet2").Range("E2:E" & Flag).Value = ResultArr
Call GetColumn(3)
Worksheets("Sheet2").Range("G2:G" & Flag).Value = ResultArr
Call GetColumn(4)
Worksheets("Sheet2").Range("I2:I" & Flag).Value = ResultArr
Call GetColumn(5)
Worksheets("Sheet2").Range("F2:F" & Flag).Value = ResultArr
Worksheets("Sheet2").Range("H2:H" & Flag).Value = ResultArr
Worksheets("Sheet2").Range("J2:J" & Flag).Value = ResultArr
End Sub
Sub GetColumn(ColumnNumber As Long)
Dim RowNdx As Long
' Ensure Arr is an array.
If IsArray(dValueData) = False Then
Exit Sub
End If
' Ensure ColumnNumber is less than or equal to the number of columns.
If UBound(dValueData, 2) < ColumnNumber Then
Exit Sub
End If
If LBound(dValueData, 2) > ColumnNumber Then
Exit Sub
End If
ReDim ResultArr(LBound(dValueData, 1) To UBound(dValueData, 1), 1)
For RowNdx = LBound(ResultArr) To UBound(ResultArr)
ResultArr(RowNdx, 1) = dValueData(RowNdx, ColumnNumber)
Next RowNdx
End Sub
如果您有基于1的阵列,就像从某个范围构建的阵列一样,那么您只需执行以下操作:
Call GetColumn(2)
Worksheets("Sheet2").Range("E2:E" & Flag).Value = Application.Transpose(ResultArr)
及
转置和应用程序。从数组中分割列并写入工作表的索引?转置解决了我的问题!但是我只在工作表的写入部分做了这项工作,并将GetColumn子项单独留下,因为这会将其转置两次?如果您不在GetColumn中也转置它,那么您将在工作表列的所有单元格中写入相同的值
Sub GetColumn(ColumnNumber As Long)
' Ensure Arr is an array.
If IsArray(dValueData) = False Then
Exit Sub
End If
' Ensure ColumnNumber is less than or equal to the number of columns.
If UBound(dValueData, 2) < ColumnNumber Then
Exit Sub
End If
If LBound(dValueData, 2) > ColumnNumber Then
Exit Sub
End If
ResultArr = Application.Transpose(Application.Index(dValueData, 0, ColumnNumber))
End Sub