For nextの繰り返し処理で、途中の数値をスキップしながら繰り返し処理を実行したいときがあります。
このときFor NextでStepを記述することで、途中の処理をスキップしながら繰り返しを実行できます。
1 2 3 |
For i = X To Y Step W 処理 Next |
XからYまでWずつ処理を実行
以下で具体的な説明をしていきます。
ここでは、0,3,6,9と3の倍数のときに処理を実行させる方法を紹介します。
目次
For NextをStepでスキップしながら繰り返し処理を実行
ここでは「i=0~10」の範囲でと繰り返し処理するなかで、iが3の倍数のときに処理を実行します。
まずは全体のプログラムを紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
'プログラム0|変数宣言の指定 Option Explicit 'プログラム1|プログラム開始 Sub Sample10() 'プログラム2|変数設定 Dim i As Long, k As Long 'プログラム3|初期値を設定 k = 1 'プログラム4|i=5~1まで繰り返し処理 For i = 0 To 10 Step 3 'プログラム5|A列に値を出力 Range("A" & k).Value = i 'プログラム6|kをカウントアップ k = k + 1 Next 'プログラム7|プログラム終了 End Sub |
以下で詳しく説明します。
プログラム0|変数宣言の指定
1 |
Option Explicit |
「Option Explicit」とは、変数宣言を強制するためのものです。
予期しないエラーを防止できるため「Option Explicit」を入力することを習慣化することを推奨しています。
詳しい説明は以下のページで紹介しています。
プログラム1|プログラム開始
1 |
Sub Sample10() |
VBAではプロシージャという単位でプログラムを呼び出します。
プロシージャの構文は下記となっています。
1 2 3 |
Sub プロシージャ名() '実行プログラム End Sub |
「Sub」で始まり「End Sub」で終わります。
プロシージャに関連するmoduleの話については以下で説明しています。
プログラム2|変数設定
1 |
Dim i As Long, k As Long |
本プログラムで使用する変数を設定します。
Long(整数)型の変数を使います。
iはFornextの数値カウンターとして使用します。
kはセルに出力する行番号として使用します。
変数については、以下のページで紹介しています。
プログラム3|初期値を設定
1 |
k = 1 |
プログラム5でA列に出力するときの行番号であるkについて、初期値を1とします。
数値(Long型)で指定した変数は、デフォルトで0となっています。
この事例では、プログラム5でA1から数値を出力させていきます。
したがって、k=1で初期値を1とします。
プログラム4|0~10の範囲で3の倍数のときのみ処理
1 2 3 4 5 6 7 8 |
For i = 0 To 10 Step 3 'プログラム5|A列に値を出力 'Range("A" & k).Value = i 'プログラム6|kをカウントアップ 'k = k + 1 Next |
上記のForとNextの間を、i=0~10の間で3の倍数の数値のみ、処理を行います。
Stepで特定の場合のみ処理を回す
処理
Next
XからYまでの数値で、Wずつ繰り返し処理を行うことができます。
ここでは、X=0,Y=10,W=3が入っています。
なおX このように0,3,6,9と3の倍数で処理を実行していきます。 A列のk行目のセルにiを出力します。 やりがちな記述ミスとして、上記のプログラムがあります。 A列のi行目のセルにiを出力してしまっています。 この場合i=0とき、セルA0に0を出力させるプログラムなのですが、セルA0が存在しないため、エラーとなります。 そのため、どのような結果を得たいのかを逆算してプログラムを組んでいく必要があります。 上記で変数に1を加算することができます。 この事例では、「k = k + 1」と記述して、kに1ずつ加算していきます。 VBAに限らず、プログラミングでは「右辺を先に計算して、左辺を更新する」という考え方があります。 つまり「右辺(k + 1)を先に計算して、左辺(k)を更新する」のです。 この考え方は、使うことが多いので、覚えておくと役立ちます。 以下のような結果が得られます。 1行ずつ3の倍数の値を出力できました。 プログラム1と対になるプログラムで、プログラム終了させるための記述です。 「End Sub」を読み込むと、プログラムが終了します。 プログラムの解説はここまでです。 ここでは行削除の事例をもとにfor nextの逆順処理について紹介しました。 この事例のように行削除などで行数が変化する場合は、逆順処理が有効な場合があります。 実行する処理によって、取捨選択できるようになると、レベルアップできるはずです。 VBAを活用すると、仕事を効率化できる幅を広げることができます。 たとえば私が実際にVBAを活用して効率化してきた作業は以下の記事で紹介しています。 興味がある人は以下の記事もご覧ください。 動画でも解説しています。 (音声が小さいので、ボリュームを上げてご覧いただければと思います) 私はプログラミング初心者からVBAを勉強を始めて少しずつレベルアップしていきました。 少しずつレベルアップしながら、難しい内容に挑戦していくと効率的に学ぶことができます。 上記のリンクでは、VBA勉強に役立つ内容を紹介しています。 興味がある人はご覧ください。
プログラム5|A列に値を出力
やりがちなミス
プログラム6|kをカウントアップ
プログラム4からプログラム6を実行
プログラム7|プログラム終了
行数が変化する場合は、逆順が必要になる場合がある
Excel VBAについて詳しく理解したいなら
エクセルマクロVBAで出来ることを15の事例で紹介|日常業務をラクにするヒントを見つけよう!VBAの勉強方法