Вставка массива VBA в диапазон Excel - PullRequest
1 голос
/ 22 марта 2019

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

У меня есть массив (от 0 до 4), который заполняется несколько раз в цикле и должен вставляться каждый раз в новую строку в Excel.

Ожидаемый результат:

      A      |      B      |      C     |      D     |      E
1     X1     |      X2     |      X3    |      X4    |      X5

Мой код:

r i = 0 To iVal
Dim infoarr(0 To 4) As Variant
infoarr(0) = ws_src_agv.Cells(ref + i + 3, 2).Value 
infoarr(1) = ws_src_agv.Cells(ref + i + 4, 2).Value 
infoarr(2) = ws_src_agv.Cells(ref + i + 3, 1).Value 
infoarr(3) = ws_src_agv.Cells(ref + i + 3, 3).Value 
infoarr(4) = ws_src_agv.Cells(ref + i + 3, 7).Value 

lastR = ws_tgt_agv.Rows(Rows.Count).End(xlUp).Row

'First attempt:
ws_tgt_agv.Range(ws_tgt_agv.Cells(lastR + 1, 1), ws_tgt_agv.Cells(lastR + 1, 5)).Value = WorksheetFunction.Transpose(infoarr)

Выход:

      A      |      B      |      C     |      D     |      E
1     X1     |      X1     |      X1    |      X1    |      X1

2-я попытка:

 ws_tgt_agv.Cells(lastR + 1, 1).Resize(UBound(infoarr, 1) + 1).Value = WorksheetFunction.Transpose(infoarr)

Ouput:

      A      |      B      |      C     |      D     |      E
1     X1     |             |            |            |      
2     X2
3     X3
4     X4
5     X5

если оставить аргумент транспонирования в конце, тот же диапазон заполняется слотом X1.

Спасибо за вашу помощь!

1 Ответ

3 голосов
/ 22 марта 2019

1-D массив (как с нуля, так и с одним) выравнивается как одна строка с несколькими столбцами.Вам не нужно транспонировать, чтобы поместить значения массива в таблицу;вам нужен только правильный размер цели.

with ws_tgt_agv
  .Range(.Cells(lastR + 1, 1), .Cells(lastR + 1, 5)).Value = infoarr
end with

Если вы хотите поместить значения массива в один столбец из нескольких строк, вам нужно транспонировать.

with ws_tgt_agv
  .Range(.Cells(lastR + 1, 1), .Cells(lastR + 6, 1)).Value = Application.Transpose(infoarr)
end with
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...