将数组中的数据写回到Excel电子表格时,我试图简化代码。 我有2行49列的数组(数据是用于许多图形中水平部分的日期)。日期的调整基于用户输入,然后将其写回到Excel电子表格中。 目前,我已经编写了以下代码,用于将数据加载到数组中并将其写回到电子表格中(并且可以按预期工作)。
Dim LocalArray() As Variant
LocalArray = Sheets("Data").Range("L4003:BH4004").Value2
.Range("M280").Resize(UBound(LocalArray, 1), UBound(LocalArray, 2)) = LocalArray
.Range("M336").Resize(UBound(LocalArray, 1), UBound(LocalArray, 2)) = LocalArray
.Range("M394").Resize(UBound(LocalArray, 1), UBound(LocalArray, 2)) = LocalArray
以上只是代码的一部分,尽管我需要将数组包含在15个不同的位置(图形)。因此,我多次重复同一行代码,这似乎效率很低。
我尝试使用下面的简单代码行将数组数据写回到电子表格中:
.Range("M280:BI281,M336:BI337,M394:BI395").Value2 = LocalArray
但是,使用上面的代码写回数组数据会使包括N / A在内的单元格的第二个范围出现错误(请参见下图)。
如何以最简单的方式编写此代码(并要求用户PC的处理能力尽可能少)?
非常感谢您!
答案 0 :(得分:1)
检查并记住来源范围的维度要容易得多。
假设我们将数据存储在从 B2 到 D3 的矩形单元格中:
我们希望在其他地方多次复制。第一次是从 E6 开始的块:
Sub dural()
Dim LocalArray() As Variant
Dim rng As Range, rw As Long, cl As Long
Set rng = Sheets("Sheet1").Range("B2:D4")
rw = rng.Rows.Count
cl = rng.Columns.Count
LocalArray = rng.Value2
Range("E6").Resize(rw, cl) = LocalArray
End Sub
运行此命令会得到:
所以我们只需要记住rw
和cl
。
EDIT#1:
一种简单的循环存款的方法:
Sub dural()
Dim LocalArray() As Variant
Dim rng As Range, rw As Long, cl As Long
Dim a
Set rng = Sheets("Sheet1").Range("B2:D4")
rw = rng.Rows.Count
cl = rng.Columns.Count
LocalArray = rng.Value2
Range("E6").Resize(rw, cl) = LocalArray
' Now try looping
For Each a In Array("a12", "b16", "c23")
Range(a).Resize(rw, cl) = LocalArray
Next a
End Sub