2017-01-02 15 views
0

各ループでaの小さな配列に整数の配列を反復する問題があります。私はこのようなものを持っている:配列の各ループに対してインデックスを取得するVBA

Dim arr(3) as Integer 
Dim vari as variant 

for each vari in arr 
    debug.print vari 
next var 

それは私もそれが編曲であるかどうか(配列内の指定した項目のインデックス番号を参照する方法が必要になり、正しく値を返していますが(1)、(2 )など)。どのように私は各ループのためにこれを行うのですか?私はfor x = y to zループを使用してそれを行う方法を知っていますが、私はむしろ各ループのためにそれを保持したいと思います。

+0

なぜあなたは "むしろ各ループのためとして、それを維持する" でしょうか?あなたの質問は、基本的には「私が知っているツールを使わずにXをどうやって行うことができますか? – Comintern

+0

配列内のアイテムの数が変化し続ける可能性が高いので、各ループのメンテナンスを容易にすることができるようにしたいと考えていました。これを行うためにUBound LBoundを使用することは私には起こりませんでした。 –

答えて

2

エレメントインデックスに簡単にアクセスするには、従来のforループを使用する必要があります。 For Eachループからインデックス番号を取得する方法はありません

Sub Test2() 

    Dim arr(3) As Integer 
    Dim vari As Variant 
    arr(0) = 5: arr(1) = 4: arr(2) = 3: arr(3) = 2 

    Dim lIdx As Long 
    For lIdx = LBound(arr) To UBound(arr) '* though you have defined the bounds to be 3 above !! anyway... 
     vari = arr(lIdx) 
     Debug.Print vari, lIdx 
    Next lIdx 
' For Each vari In arr 
'  Debug.Print vari 
' Next Var 
End Sub 

...これを試してみてください。あなたがここに証拠が必要な場合はVB6/VBAでFor Eachhttps://msdn.microsoft.com/en-us/library/windows/desktop/ms221053(v=vs.85).aspx

+0

リンクをありがとう。また、「LBound to UBound」は魅力的に機能し、「それぞれのために」必要性を排除します。 –

0

を強調インタフェースIEnumVARIANTのドキュメントは、あなたが本当にFor Eachを使う、という場合は、あなたが変数、すなわち、カウンタ変数を使用して索引を追跡する必要がありますidx以下のコード:

Dim arr(1 to 3) as Integer '<-- 1 to 3 if you want your array index start with 1 instead of zero 
Dim vari as variant 
Dim idx as long: idx = LBound(arr) 

For Each vari In arr 
    debug.print "The item at index " & idx & " is: " & vari 
    idx = idx + 1 
Next vari 
0

ここでこれを最初に修正してみてください。

サブforEachArray()

Dim element As Variant 
Dim animals(0 To 5) As String 
'We have created an array that can hold 6 elements 

animals(0) = "Dog" 
animals(1) = "Cat" 
animals(2) = "Bird" 
animals(3) = "Buffalo" 
animals(4) = "Snake" 
animals(5) = "Duck-billed Platypus" 
'We fill each element of the array 


For Each element In animals 
'animals consists of 6 "elements" 

    Debug.Print element 
    'printing to the immediate window 

Next 

End Subの