2016-07-25 5 views
0

ワークシートからデータを取得し、配列に入れて配列を他のワークシートに貼り付けようとしています。しかし、ループの後に私の配列を返します。私はFor Loopから何かを返す必要がありますか?私は何の考えも見つけられませんでした。 Iアレイを貼り付けるときに、私はまた、間違った変数(初心者ミス)を使用J.をインクリメントするのを忘れデビッドG.により述べたよう配列をレンジに戻すにはどうすればいいですか?

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 

。これで結果が返されますが、貼り付けられた範囲で繰り返される配列の最初の値だけが返されます。範囲に配列を貼り付けるためにループが必要ですか?

明らかに配列が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 
+0

問題を再現できるように、いくつかのデータと出力の例を提供してください。 [最小、完全、および検証可能なサンプルを作成する方法](http://stackoverflow.com/help/mcve)のヘルプトピックをお読みください –

+1

誤った変数を使用した場合は、コーディングしていないことを意味します'Option Explicit'です。あなたのコードの最上部に 'Option Explicit'を書くと、これらのことを警告します。 –

+0

@RonRosenfeld入力いただきありがとうございます。私が見つけた解決策で質問を編集します。 – Windalfin

答えて

2

あなたの配列は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 

また、アレイを1つのセルに貼り付けるときは、記述しているものとまったく同じです。配列のサイズのどこにでも最初の配列値を貼り付けます。正しい値を入れるには、配列と同じサイズの範囲に送る必要があります。例えば、3によってサイズ2の配列のために、あなたは自分の配列のサイズのように、あなたのサイズが動的になりたいあなたのケースで

Range("A1:B3") = array 

を記述します。

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

このトリックを行う必要があります。あなたが見ることができるように、それはA8から始まる範囲を貼り付け、配列の値の数と同じ長さになるでしょう。

+0

しかしインクリメントをしなくても、少なくともj(0)がいっぱいになっていると仮定していました。元のコードから少なくとも1つの値を取得する必要があります。 F8を押して、if条件を入力したかどうか確認してください。 –

+0

私はDebug.Printを使用して、値がifに入ることを確かめます。 ただし、F8を使用するとarticleArrの値は空になります。 jの増分をありがとう。私はそれについて完全に忘れています。 – Windalfin

+0

'j 'をインクリメントしてみましたか? –

関連する問題