Excel VBA: заполнение смещенных диапазонов данными 2d Array - PullRequest
3 голосов
/ 19 июля 2011


В настоящее время я ищу более эффективный метод, с помощью VBA, для передачи информации из двумерного массива в Sub в ступенчатый набор диапазонов в книге Excel. Я привел то, что мне нужно, в приведенный ниже пример с кодом; любая помощь будет принята с благодарностью.

Я связал изображения, описывающие пример того, с чем я работаю (Input, Array и Output), и написал пример кода, который я использую ниже. Для простоты давайте определим «Входной лист» как Лист1 и «Выходной лист» как Лист2 в рабочей книге:

Input Sheet

  Option Explicit

  Sub TransferData()
    Dim myArray as Variant           'Define the array to hold the data.
    Dim i as integer                 'Define a generic loop counter variable.

    myArray = Sheet1.Range("A1:F7")  'Pulls all the relevant data into the array.

myArray теперь выглядит точно так же, как диапазон. (Я бы опубликовал третью ссылку, но сначала мне нужно заработать еще несколько повторений).

Я хочу перенести данные в мой выходной файл, чтобы он выглядел так:

Output Sheet

Вот как я сейчас подхожу к ситуации:

    For i = 1 to ubound(myArray)
      Sheet2.Cells(i,1) = myArray(i,1)
      Sheet2.Cells(i,3) = myArray(i,2)
      Sheet2.Cells(i,6) = myArray(i,3)
      Sheet2.Cells(i,7) = myArray(i,4)
      Sheet2.Cells(i,8) = myArray(i,5)
      Sheet2.Cells(i,9) = myArray(i,6)
    Next i
  End Sub

Мой вопрос такой; есть ли способ передачи данных из массива в шахматные диапазоны способом, подобным тому, как я захватил массив; диапазон за раз? Например, что-то вроде:

Sheet2.Range("A1:A8") = myArray(1 to 7, 1)  'Note: this is total pseudocode
Sheet2.Range("C1:C8") = myArray(1 to 7, 2)  'Note: this is total pseudocode

и т.д ... и т.д ...

Полагаю, мне уже удалось научить себя достаточному количеству VBA, но я определенно не знаю всего, и с этим мне нужна помощь. Я пытаюсь свести к минимуму количество записей на листы из VBA; они действительно берут свое.

Любая помощь очень ценится.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 19 июля 2011

«Копирование и вставка» значений может быть немного быстрее.Очевидно, вам нужно будет обобщить это в соответствии с вашими целями, но этот код работает с предоставленным вами примером:

Sub TransferData()

    Sheet3.Range("A1:A7") = Sheet1.Range("A1:A7").Value
    Sheet3.Range("C1:C7") = Sheet1.Range("B1:B7").Value
    Sheet3.Range("F1:I7") = Sheet1.Range("C1:F7").Value

End Sub
1 голос
/ 19 июля 2011

В зависимости от размера «других данных», которые нужно вставить, один из очень простых способов добиться этого - перенести все ваши данные в выходной диапазон, затем вставить новые столбцы и разместить другие данные соответствующим образом.

Например:

data = Worksheets("InputSheet").Range("A1:F7").Value
Worksheets("OutputSheet").Range("A1:F7").Value = data
Worksheets("OutputSheet").Columns("B").EntireColumn.Insert ' do this for every column you need, within reason. 

Затем вы можете поместить ваши «другие данные» во все новые созданные вами столбцы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...