如何将数组返回到范围excel vba

我一直试图从工作表中获取数据,并将其放入数组,然后将数组粘贴到其他工作表。 但是,循环后,我的数组返回 。 我需要从For循环返回什么吗? 我search没有发现任何想法。

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 

正如David G.所提到的,我忘了增加J.我也在粘贴Array时使用了错误的variables(新手错误)。 它现在返回结果,但它只返回在粘贴范围内重复的数组的第一个值。 我需要循环将数组粘贴到范围?

显然数组将被水平粘贴在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 

你的数组应该根据j整数来填充,但是你不会增加它。

 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 Debug.Print (article_arr(j)) End If Next 

当把一个数组粘贴到一个单元格时,它也会完成你所描述的内容。 粘贴数组大小的第一个数组值。 为了让它把正确的值,你需要发送到与数组相同的大小的范围。 例如,对于大小为2 x 3的数组,您可以编写

 Range("A1:B3") = array 

在你的情况下,你会希望大小是dynamic的,就像你的数组的大小。

 k = 8 Range("A" & k & ":A" & k + Ubound(article_arr, 1)) = article_arr 

应该做的伎俩。 正如你所看到的,它将粘贴从A8开始的范围,并以与数组中值的数量相同的长度粘贴。