如何在Excel VBA中将数组输出到表中?

时间:2017-05-26 20:59:29

标签: arrays excel vba excel-vba

我有一个名为foobar的表Range(Cells(2, 1), Cells(11, 2))(使用Range("foobar[#All]")来包含标题行)。并且还有从第13行开始的其他表。因此在(即第12行)之间存在空行。表名由我的同事在其他几个宏中使用。现在,我想将一个数组,例如Redim array1(1 To n, 1 To 2)复制到表格foobar。如您所见,n是一个变量,我必须确保在从Cells(2, 1)开始粘贴数组后,它不会覆盖下面的表格,并且表格下方仍有一个空行{{1将它与其他表分开。并且还应该保留foobar的名称。

如何自动调整/添加/减少行以匹配我的数组foobar,而不是销毁表array1和其下的表格?

1 个答案:

答案 0 :(得分:2)

幸运的是,您在同一行上没有数据和表格,因此任务更容易。此代码段会更改表foobar的内容,同时不会影响其下方的表格。

Sub ChangeTableToArray(tbl As ListObject, ar)
  Dim newRows As Long: newRows = 1+ UBound(ar,1) - LBound(ar,1)
  If Not tbl.DataBodyRange Is Nothing Then tbl.DataBodyRange.EntireRow.Delete
  If newRows > 1 Then tbl.HeaderRowRange.Resize(newRows - 1).Offset(2).EntireRow.Insert
  tbl.HeaderRowRange.Resize(newRows, 1+UBound(ar,2)-LBound(ar,2)).Offset(1).Value = ar
End Sub
Sub Testing()
  Dim n As Long: n = 15
  ReDim ar(1 To n, 1 To 2)
  For n = 1 To n
    ar(n, 1) = n
    ar(n, 2) = n * n
  Next
  ChangeTableToArray Sheet2.ListObjects("foobar"), ar
End Sub