在多个不同位置将数组写回到电子表格

时间:2019-04-28 13:17:51

标签: arrays excel vba

将数组中的数据写回到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在内的单元格的第二个范围出现错误(请参见下图)。

enter image description here

如何以最简单的方式编写此代码(并要求用户PC的处理能力尽可能少)?

非常感谢您!

1 个答案:

答案 0 :(得分:1)

检查并记住来源范围的维度要容易得多。

假设我们将数据存储在从 B2 D3 的矩形单元格中:

enter image description here

我们希望在其他地方多次复制。第一次是从 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

运行此命令会得到:

enter image description here

所以我们只需要记住rwcl

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