For ~ Next文で、ループをしたいのにカウント変数(i)が一定じゃない(不規則)な場合について、解決法を紹介します。
ループが出来れば、マクロの記述もスッキリしますし、手直しも簡単に出来ます。
For〜Nextを使って、処理をループさせたいのですが、変数で悩んでいます。
つまり、変数に法則性が見つからないということでしょうか。
カウント変数が変則的だと、ループさせることは出来ないのでしょうか。
「For〜Next文」のカウント変数にはいくつか応用編がありますので紹介します。
For〜Next文の基本的な書き方
記述例
For i = 1 to 20
MsgBox i
Next i
この場合、カウント変数は1ずつ増加していきます。
結果
メッセージボックスに、1から20までの数字が、順番に表示されます。
OKを押すと、2、3、4・・・と続きます。
カウント変数の増加数を、任意のものにする
記述例
For i = 1 to 20 Step 2
MsgBox i
Next i
この場合、カウント変数は2ずつ増加していきます。
結果
OKを押すと、5、7、9・・・と続きます。
Stepを使い、カウント変数を減少させる
記述例
For i = 20 to 1 Step -2
MsgBox i
Next i
この場合、カウント変数は2ずつ減少していきます。
結果
OKを押すと、16、14、12・・・と続きます。
カウント変数が、一定ではない場合
「Select Case」を使った記述例1
Sub macro1()
Dim i As Long
Dim DataA As Variant
For i = 1 To 20
Select Case i
Case 3, 5, 7, 9, 10, 12
MsgBox i
End Select
Next i
End Sub
1から20のうち、任意の数字(3, 5, 7, 9, 10, 12)を指定します。
結果
OKを押すと、7、9、10・・・と続きます。
この「Select Case」をどんな順番で記述しても、「i = 1 to 20」の序列(1から20まで1ずつ増加)が有効になっています。※例2参照
「Select Case文」を使った記述例2
Sub macro2()
Dim i As Long
Dim DataA As Variant
For i = 1 To 20
Select Case i
Case 3, 15, 7, 2, 10, 12
MsgBox i
End Select
Next i
End Sub
結果
OKを押すと、7、10、12・・・と続きます。
Select Caseで記述したような、3, 15, 7, 2, 10, 12の順番にはなりません。
自分で配列を作ってループさせる
記述例
Sub macro3()
Dim i As Long
Dim DataA As Variant
DataA = Array(1, 20, 4, 17, 8, 3, 4, 12, 16)
For i = 0 To UBound(DataA)
MsgBox DataA(i)
Next i
End Sub
DataAに、任意の配列を格納します。
結果
OKを押すと、4、17、8・・・と続きます。
コメント