Excel VBA函数将数组打印到工作簿

我已经写了一个需要2维数组的macros,并将其“打印”到Excel工作簿中的等效单元格。

有没有更优雅的方式来做到这一点?

Sub PrintArray(Data, SheetName, StartRow, StartCol) Dim Row As Integer Dim Col As Integer Row = StartRow For i = LBound(Data, 1) To UBound(Data, 1) Col = StartCol For j = LBound(Data, 2) To UBound(Data, 2) Sheets(SheetName).Cells(Row, Col).Value = Data(i, j) Col = Col + 1 Next j Row = Row + 1 Next i End Sub Sub Test() Dim MyArray(1 To 3, 1 To 3) MyArray(1, 1) = 24 MyArray(1, 2) = 21 MyArray(1, 3) = 253674 MyArray(2, 1) = "3/11/1999" MyArray(2, 2) = 6.777777777 MyArray(2, 3) = "Test" MyArray(3, 1) = 1345 MyArray(3, 2) = 42456 MyArray(3, 3) = 60 PrintArray MyArray, "Sheet1", 1, 1 End Sub 

与其他答案一样,保持简单

 Sub PrintArray(Data As Variant, Cl As Range) Cl.Resize(UBound(Data, 1), UBound(Data, 2)) = Data End Sub Sub Test() Dim MyArray() As Variant ReDim MyArray(1 To 3, 1 To 3) ' make it flexible ' Fill array ' ... PrintArray MyArray, ActiveWorkbook.Worksheets("Sheet1").[A1] End Sub 

创build一个变体数组(最简单的方法是读取variablesvariables的等效范围)。

然后填充数组,并将数组直接分配给范围。

 Dim myArray As Variant myArray = Range("blahblah") Range("bingbing") = myArray 

变体数组将最终成为一个2-Dmatrix。

简单的方法 :简单地join&显示元素,即使用Join()函数将数组元素作为一个stringjoin( 不必使用循环或工作表范围 ),例如:

 MsgBox Join(arrayName, ",") 'Above will display array elements as a single string separated by comma (a,b,c). 

更优雅的方法是一次分配整个数组:

 Sub PrintArray(Data, SheetName, StartRow, StartCol) Dim Rng As Range With Sheets(SheetName) Set Rng = .Range(.Cells(StartRow, StartCol), _ .Cells(UBound(Data, 1) - LBound(Data, 1) + StartRow, _ UBound(Data, 2) - LBound(Data, 2) + StartCol)) End With Rng.Value2 = Data End Sub 

但要小心:它只能工作到大约8000个单元的大小。 然后Excel引发一个奇怪的错误。 最大的大小是不固定的,从Excel安装到Excel安装都有很大的不同。

你可以定义一个Range,你的数组的大小,并使用它的value属性:

 Sub PrintArray(Data, SheetName As String, intStartRow As Integer, intStartCol As Integer) Dim oWorksheet As Worksheet Dim rngCopyTo As Range Set oWorksheet = ActiveWorkbook.Worksheets(SheetName) ' size of array Dim intEndRow As Integer Dim intEndCol As Integer intEndRow = UBound(Data, 1) intEndCol = UBound(Data, 2) Set rngCopyTo = oWorksheet.Range(oWorksheet.Cells(intStartRow, intStartCol), oWorksheet.Cells(intEndRow, intEndCol)) rngCopyTo.Value = Data End Sub 

我的testing版本

 Sub PrintArray(RowPrint, ColPrint, ArrayName, WorkSheetName) Sheets(WorkSheetName).Range(Cells(RowPrint, ColPrint), _ Cells(RowPrint + UBound(ArrayName, 2) - 1, _ ColPrint + UBound(ArrayName, 1) - 1)) = _ WorksheetFunction.Transpose(ArrayName) End Sub