2016-10-03 5 views
-1

以下のコードがReDim Preserveの最初の繰り返しではなく2番目のものであるため、私が間違っていることはわかりません。Forループ内のReDim Preserve

Dim inj0() As Variant 
Dim i As Integer 
Dim c As Integer 
Dim Rng As Range 
Dim pos As Integer 

'Find the last used column in a Row 
Dim LastCol As Integer 
With ActiveSheet 
    LastCol = .Cells(2, .Columns.Count).End(xlToLeft).Column 
End With 

c = 0 
For i = 1 To LastCol 
    pos = InStr(Cells(2, i), "80") 
    If pos = 1 Then 
     ReDim Preserve inj0(c, 2) 
     inj0(0, 1) = "80" 
     Set Rng = Cells(2, i) 
     inj0(c, 2) = Rng.Offset(-1, 0).Value 
     inj0(c, 0) = Rng.Offset(3, 0).Value 
     c = c + 1 
    End If 
Next 
+0

どこでエラーが発生しますか? –

+0

'ReDim Preserve inj0(c、2)'では、添字が範囲外です – peetman

+6

配列の_last_次元だけを 'ReDim preserve'することができます。オンラインヘルプから_ Preserveキーワードを使用すると、最後の配列次元のサイズを変更することができ、次元数を変更することはできません。 –

答えて

0

次のようにコードを変更してください:

c = 0 
ReDim inj0(2, 0) 
inj0(1, 0) = "80" 
For i = 1 To LastCol 
    pos = InStr(Cells(2, i), "80") 
    If pos = 1 Then 
     ReDim Preserve inj0(2, c) 
     Set Rng = Cells(2, i) 
     inj0(2, c) = Rng.Offset(-1, 0).Value 
     inj0(0, c) = Rng.Offset(3, 0).Value 
     c = c + 1 
    End If 
Next 

を使用すると、寸法が交換する必要がある場合は、最終的にはあなたがapply WorksheetFunction.Transpose methodをすることができます。