Я пытаюсь получить данные из листа и поместить его в массив, а затем вставить массив на другой рабочий лист. Однако после цикла мой массив возвращает Пустой. Нужно ли мне что-то возвращать из цикла For? Я искал, не нашел никакой идеи.Как вернуть массив в диапазон excel vba
Sub generate()
Dim article_arr() As Variant
Dim artCount As Integer
Dim filter As Integer
Dim RIL_itemCount As Integer
'Set PA number
filter = Sheet7.Range("B1").Value
RIL_itemCount = Sheet5.Cells(Sheet5.Rows.count, "A").End(xlUp).Row
'Count number article of PA selected
artCount = Application.WorksheetFunction.CountIf(Sheet5.Range("R:R"), filter)
'redim array
ReDim article_arr(0 To artCount)
Dim j As Integer
j = 0
'populate array with article number from Retail Item List
For i = 0 To RIL_itemCount
If (Sheet5.Cells(i + 2, 18).Value = filter) Then
article_arr(j) = Sheet5.Cells(i + 2, 1).Value
Debug.Print (article_arr(j))
End If
Next
'Paste Article number to range
Sheet7.Range("A8:A" & artCount) = articleArr()
End Sub
Как отметил Дэвид Г. Я забыл увеличивает J. Я также использую неправильные переменный (новичок ошибки) при вставке Array. Теперь он возвращает результат, но возвращает только первое значение массива, повторенное по вложенному диапазону. Нужен ли мне цикл для вставки массива в диапазон?
Очевидно, массив будет вставлен по горизонтали в excel, что вызовет повторение первого значения при вставке массива в диапазон. Добавление WorksheetFunction.Transpose(array)
сделать волшебную
Вот обновленный код:
Sub generate()
Dim article_arr() As Variant
Dim artCount As Integer
Dim filter As Integer
Dim RIL_itemCount As Integer
'Set PA number
filter = Sheet7.Range("B1").Value
RIL_itemCount = Sheet5.Cells(Sheet5.Rows.count, "A").End(xlUp).Row
'Count number article of PA selected
artCount = Application.WorksheetFunction.CountIf(Sheet5.Range("R:R"), filter)
'redim array
ReDim article_arr(0 To artCount)
Dim j As Integer
j = 0
'populate array with article number from Retail Item List
For i = 0 To RIL_itemCount
If (Sheet5.Cells(i + 2, 18).Value = filter) Then
article_arr(j) = Sheet5.Cells(i + 2, 1).Value
j = j + 1
End If
Next
'Paste Article number to range
k = 8
Sheet7.Range("A" & k & ":A" & UBound(article_arr) + 7) = WorksheetFunction.Transpose(article_arr)
Debug.Print (article_arr(395))
End Sub
Просьба указать некоторые данные и пример желаемого результата, чтобы мы могли воспроизвести вашу проблему. Пожалуйста, прочитайте темы HELP для [Как создать минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) –
Если вам удалось использовать неправильную переменную, это означает, что вы не кодируете в 'Option Explicit'. Напишите «Option Explicit» в самом верху вашего кода, он предупредит вас об этих вещах. –
@RonRosenfeld Спасибо за ввод. Я также отредактирую вопросы с найденным решением. – Windalfin