【问题标题】:Excel VBA - Assign Values of 2D Array to Range of CellsExcel VBA - 将二维数组的值分配给单元格范围
【发布时间】:2016-01-11 23:29:58
【问题描述】:

我正在尝试将大小为 183x6 的二维数组分配给新工作表,并使用数组的值填充 A1:G182 中的空白单元格。作为参考,我的数组称为“目录”,我要填充的空表称为“列表”。

我尝试了两种不同的方法,一种是显式地将指定范围分配给数组:

Worksheets("List").Range(Cells(1,1), Cells(UBound(Directory, 1) + 1, UBound(Directory, 2) + 1)) = Directory

并且还通过尝试遍历数组中的每个条目:

For i = 0 To UBound(Directory, 1)
    For j = 0 To UBound(Directory, 2)
        Worksheets("List").Range(Cells(i + 1, j + 1), Cells(i + 1, j + 1)) = Directory(i,j)
    Next j
Next i

在这两种情况下,我都会收到错误:

Run-time error '1004':
Application-defined or object defined error.

任何想法可能会发生什么?感谢您的帮助。

【问题讨论】:

标签: arrays vba excel


【解决方案1】:

试试:

Worksheets("List").Range("A1").Resize(UBound(Directory, 1) + 1, UBound(Directory, 2) + 1).Value = Directory

或者:

For i = 0 To UBound(Directory, 1)
    For j = 0 To UBound(Directory, 2)
        Worksheets("List").Range(Worksheets("List").Cells(i + 1, j + 1), Worksheets("List").Cells(i + 1, j + 1)) = Directory(i,j)
    Next j
Next i

【讨论】:

  • 第一个建议成功了,非常感谢!
【解决方案2】:

您不需要任何循环来将数组移动到内存中。例如:

Sub Array2Range()
   Dim Directory(1 To 182, 1 To 6) As Variant
   Dim rng As Range, i As Long, j As Long

   For i = 1 To 6
      For j = 1 To 182
         Directory(j, i) = i * j
      Next j
   Next i

   Set rng = Sheets("List").Range("A1:F182")

   rng = Directory

End Sub

将产生:

【讨论】:

    猜你喜欢
    • 2017-04-07
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多