2016-07-13 5 views
0

別のワークシートから列を取得し、その固有の値だけを別のワークシートに列ヘッダーとしてコピーしようとしています。今、私のコードは、reference1の一意の値を作成し、Sheet1に列ヘッダーとしてコピーしようとしますが、何らかの理由で、私の範囲は、reference1データの最初の行をループします(画像は、シート1のヘッダ。 with wsDBステートメントに「Transpose(arrValues)」を配置すると、データの最初の行だけが配置され、with wsDBステートメントに「Transpose(j)」を配置すると、reference1シートの実際の番号付き列が配置されます。別のワークシートからVBAのループされた列ヘッダーに一意のテキストを配置する

enter image description here

Sub uniqueyes() 
Dim wsRef As Worksheet 
Dim wsDB As Worksheet 

Set wsRef = Worksheets("reference1") 
Set wsDB = Worksheets("Sheet1") 

With wsRef 
    .Range("F1:F60").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("I1"), unique:=True 

    Dim arrValues As Variant 
    arrValues = .Range("I2", .Range("I" & .Rows.Count).End(xlUp)) 

End With 

For i = 1 To ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row 

    If Cells(i, 4) = "Title" Then 

     For j = 1 To (UBound(arrValues)) Step 1 

      With wsDB 
      .Range(.Cells(i, j * 4 + 2), .Cells(i, j * 4 + 4)).Value = Application.WorksheetFunction.Transpose(arrValues) 

      End With 

     Next j 

    End If 

Next i 

End Sub 

答えて

1

あなたは配列全体を毎回使用する必要はありませんので、あなたは、個々のセルをループしています。満たすフィールドは1つだけなので、毎回配列の最初のエントリを取得します。 arrValuesカラムから来るので、それは一次元配列であることを

.Range(.Cells(i, j * 4 + 2), .Cells(i, j * 4 + 4)).Value = arrValues(j) 

注:配列の適切なエントリを使用してください。

+0

私はこれを試しましたが、添え字が範囲外です – beks123

関連する問題