2017-03-13 4 views
1

Excelシートの範囲で作成しているバリアントの要素にアクセスしようとしています。私の範囲内の行の数は "Locations"シートの行数に基づいて動的なので、単にバリアントを宣言し、それを関連する範囲と同じに設定します。 Locで接頭辞を付けた4つの変数を使用して境界を見つけ、その最終的な範囲を作成したらバリアントを設定します。Variants/Iterating/VBA

しかし、私は数多くの試みを繰り返すことができません。私は何か基本的なものが欠けていると確信していますが、For EachまたはFor LBound/UBound構造を配列の繰り返しに使用するようにはまだしていません。バリアントデータは、数値とテキストの混合です。

私が紛失していると思われる簡単/簡単なことについてのあなたの考えは高く評価されます。私はそれぞれの読み取り専用であり、読み取り/書き込みすることを好むだろうが、今単に確認するために、私はあなたがLocColEndを設定しているこの配列[本当に、マトリックス]

Sub Prefill_Work_Sub() 
    ' Variables 
    Dim LocRowStart As Range 
    Dim LocRowEnd As Range 
    Dim LocSheetRange As Range 
    Dim EndColInt As Integer 
    Dim LocationsVariant As Variant 

    ' Ending Column Index Set 
    EndColInt = 72 

    ' First, make range of location sheet 
    Set LocRowStart = Worksheets("Locations").Range("A2") 
    Set LocRowEnd = Worksheets("Locations").Cells(Rows.Count, LocRowStart.Column).End(xlUp) 
    Set LocColEnd = Worksheets("Locations").Cells(LocRowEnd.row, EndColInt) 
    Set LocSheetRange = Worksheets("Locations").Range(LocRowStart, LocColEnd) 
    Set LocationsVariant = LocSheetRange 


    ' Verify the range address of the variant 
    ' Debug.Print LocSheetRange.Address 

    For i = LBound(LocationsVariant) To UBound(LocationsVariant) 
     Debug.Print LocationsVariant(i, 1) 
    Next i 

    ' Let's try to iterate through variant for a sec 
    ' Debug.Print LocationsVariant(1, 1) 
    ' Debug.Print LocationsVariant(2, 1) 


End Sub 
+0

「LocationsVariant」の値を設定していません。範囲の値を割り当てることを意味しましたか? –

+0

@TimWilliams私はその行を編集して追加しました。それは私のコードにありましたが、誤って投稿で削除されました。だから、私はlbound()/ ubound()でラインに当たったら型の不一致エラーに遭遇します。 – ccdrm

+4

2D配列を取得する場合は、値を割り当てるときに 'Set'を使用しないでください。さもなければ、別の範囲型変数 –

答えて

0

経由ですべての反復処理できることを理解します次の行の範囲関数に列番号の引数として渡します。しかし、列番号の引数は整数でなければなりません。

Set LocColEnd = Worksheets("Locations").Cells(LocRowEnd.row, EndColInt) 
Set LocSheetRange = Worksheets("Locations").Range(LocRowStart, LocColEnd) 

これを修正するオプションがいくつかあります。最高のは、おそらくちょうどそうのような列番号の引数としてEndColIntを使用することです:

Set LocSheetRange = Worksheets("Locations").Range(LocRowStart, EndColInt) 

この行はまた、容疑者を探します。次のように行プロパティを最後に追加することをお勧めします。

LocRowEnd = Worksheets("Locations").Cells(Rows.Count, LocRowStart.Column).End(xlUp).Row 
+0

上記のコードを編集して、最後の行のSetキーワードを削除します。 –