Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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
Arrays 如何从多维数组中批量读取和写入数据,只拾取列?_Arrays_Excel_Vba_Multidimensional Array - Fatal编程技术网

Arrays 如何从多维数组中批量读取和写入数据,只拾取列?

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

我有一些代码,可以从多维数组中分别获取每一列,并粘贴到工作表列中。当我逐行运行它时,我看到它将值正确地复制到Resultar中,但当它将值写入工作表时,它会将该数组中的第一个值粘贴到整个列中。我完全被困在如何批量写入数据的问题上,有没有更好的解决方法?标志是行数,以双精度表示

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