For ~ Next文で、ループをしたいのにカウント変数(i)が一定じゃない(不規則)な場合について、解決法を紹介します。
ループが出来れば、マクロの記述もスッキリしますし、手直しも簡単に出来ます。
![](https://ramq-cat.com/wp-content/uploads/2021/01/098912.jpg)
For〜Nextを使って、処理をループさせたいのですが、変数で悩んでいます。
![](https://ramq-cat.com/wp-content/uploads/2021/01/084919.jpg)
![](https://ramq-cat.com/wp-content/uploads/2021/01/084919.jpg)
![](https://ramq-cat.com/wp-content/uploads/2021/01/084919.jpg)
つまり、変数に法則性が見つからないということでしょうか。
![](https://ramq-cat.com/wp-content/uploads/2021/01/098912.jpg)
![](https://ramq-cat.com/wp-content/uploads/2021/01/098912.jpg)
![](https://ramq-cat.com/wp-content/uploads/2021/01/098912.jpg)
カウント変数が変則的だと、ループさせることは出来ないのでしょうか。
![](https://ramq-cat.com/wp-content/uploads/2021/01/084919.jpg)
![](https://ramq-cat.com/wp-content/uploads/2021/01/084919.jpg)
![](https://ramq-cat.com/wp-content/uploads/2021/01/084919.jpg)
「For〜Next文」のカウント変数にはいくつか応用編がありますので紹介します。
![エクセルマクロ](https://ramq-cat.com/wp-content/uploads/2020/11/1484715_s.jpg)
![エクセルマクロ](https://ramq-cat.com/wp-content/uploads/2020/11/1484715_s.jpg)
For〜Next文の基本的な書き方
記述例
For i = 1 to 20
MsgBox i
Next i
この場合、カウント変数は1ずつ増加していきます。
結果
メッセージボックスに、1から20までの数字が、順番に表示されます。
![](https://ramq-cat.com/wp-content/uploads/2021/02/1412b7cdb8f1305946c4d4ca7576d38c.png)
![](https://ramq-cat.com/wp-content/uploads/2021/02/1412b7cdb8f1305946c4d4ca7576d38c.png)
OKを押すと、2、3、4・・・と続きます。
カウント変数の増加数を、任意のものにする
記述例
For i = 1 to 20 Step 2
MsgBox i
Next i
この場合、カウント変数は2ずつ増加していきます。
結果
![](https://ramq-cat.com/wp-content/uploads/2021/02/76c691c22c7ef40a64aa64b04f05e90c.png)
![](https://ramq-cat.com/wp-content/uploads/2021/02/76c691c22c7ef40a64aa64b04f05e90c.png)
OKを押すと、5、7、9・・・と続きます。
Stepを使い、カウント変数を減少させる
記述例
For i = 20 to 1 Step -2
MsgBox i
Next i
この場合、カウント変数は2ずつ減少していきます。
結果
![](https://ramq-cat.com/wp-content/uploads/2021/02/82cd89bf6e3e7beeac7a6a7e3c296e8a.png)
![](https://ramq-cat.com/wp-content/uploads/2021/02/82cd89bf6e3e7beeac7a6a7e3c296e8a.png)
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)を指定します。
結果
![](https://ramq-cat.com/wp-content/uploads/2021/02/5bc9fc4d63d4a0ab3f0efe11bd966220.png)
![](https://ramq-cat.com/wp-content/uploads/2021/02/5bc9fc4d63d4a0ab3f0efe11bd966220.png)
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
結果
![](https://ramq-cat.com/wp-content/uploads/2021/02/a88e5b631e0ef8187e3605a9d1a5a789.png)
![](https://ramq-cat.com/wp-content/uploads/2021/02/a88e5b631e0ef8187e3605a9d1a5a789.png)
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に、任意の配列を格納します。
結果
![](https://ramq-cat.com/wp-content/uploads/2021/02/2d2e3ff6face4e798a1d0d6dd774d920.png)
![](https://ramq-cat.com/wp-content/uploads/2021/02/2d2e3ff6face4e798a1d0d6dd774d920.png)
OKを押すと、4、17、8・・・と続きます。
コメント