Запись массива обратно в электронную таблицу в нескольких разных местах - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь упростить мой код при записи данных из массива в электронную таблицу 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

Как мне написать этот код самым простым способом (и требующим как можно меньшей вычислительной мощности от ПК пользователя)?

Большое спасибо!

1 Ответ

1 голос
/ 28 апреля 2019

Гораздо проще изучить и запомнить размеры диапазона источника .

Допустим, у нас есть данные в прямоугольном наборе ячеек от 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

Итак, все, что нам нужно запомнить, это rw и cl.

РЕДАКТИРОВАТЬ # 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...