【VBA】For ~ Next文・カウント変数(i)が一定じゃない(不規則)

For ~ Next文で、ループをしたいのにカウント変数(i)が一定じゃない(不規則)な場合について、解決法を紹介します。

ループが出来れば、マクロの記述もスッキリしますし、手直しも簡単に出来ます。

For〜Nextを使って、処理をループさせたいのですが、変数で悩んでいます。

つまり、変数に法則性が見つからないということでしょうか。

カウント変数が変則的だと、ループさせることは出来ないのでしょうか。

「For〜Next文」のカウント変数にはいくつか応用編がありますので紹介します。

エクセルマクロ
目次

For〜Next文の基本的な書き方

For カウント変数 = 最初の数字 to 最後の数字
    処理
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・・・と続きます。

VBAの説明

「DataA」という箱に任意の配列を格納する

データの0番目(最初のデータ)から最後のデータをループする

メッセージボックスに、格納した配列を順番に表示する。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

この記事を書いた人

子育てに奮闘しながらも、再びガッツリ走り込める日を夢見るフルタイム会社員。

コメント

コメントする

CAPTCHA


目次
閉じる