Excel VBA | 超初心者(Excel操作+マクロ体験):基本文法 - Step指定

Excel VBA VBA
スポンサーリンク

Step指定は「カウンタの増え方・減り方を決めるつまみ」

For文は、

For i = 1 To 10
    ' 繰り返し処理
Next i
VB

のように書くと、i が 1,2,3,4,…,10 と「1ずつ」増えながらループします。
この「1ずつ」の部分を、自分でコントロールするための仕組みが Step指定 です。

「2ずつ進めたい」「逆向きに減らしたい」「5行おきに処理したい」
こういう“進み方のルール”を決めるのが Step の役割です。


Step指定の基本構文と動きのイメージ

基本構文

書き方はこうです。

For 変数 = 開始値 To 終了値 Step 増分
    ' 繰り返したい処理
Next 変数
VB

増分(Step に指定する値)は、
正の数なら「増える」、負の数なら「減る」方向に進みます。

何も書かなければ、デフォルトは Step 1 です。
つまり、いつもの For文は「暗黙に Step 1 が指定されている」と考えてOKです。

2ずつ進める例

Sub SampleStep2()

    Dim i As Long

    For i = 1 To 10 Step 2
        MsgBox i
    Next i

End Sub
VB

このときの i の変化は、

1 → 3 → 5 → 7 → 9 → 次は 11(10を超えるので終了)

という流れになります。

「開始値からスタートして、Step ずつ増やしながら、終了値を超えたら終わり」
これが Step の基本ルールです。


Step指定で「行を飛ばしながら処理する」実用例

A列の奇数行だけに値を入れる

Sub SampleOddRows()

    Dim i As Long

    For i = 1 To 10 Step 2
        Range("A" & i).Value = "奇数行"
    Next i

End Sub
VB

このコードは、

A1, A3, A5, A7, A9 にだけ「奇数行」という文字を入れます。

i が 1,3,5,7,9 と変化していくので、
Range(“A” & i) は “A1″,”A3″,”A5″,”A7″,”A9” となります。

「1行おきに処理したい」「2行ごとに色を変えたい」
といったときに、Step 2 はとてもよく使います。

5行おきに処理する

Sub SampleEvery5Rows()

    Dim i As Long

    For i = 1 To 50 Step 5
        Range("A" & i).Value = "ここでマーク"
    Next i

End Sub
VB

i は 1,6,11,16,…,46 と進みます。
「一定間隔でマークを付ける」「5行ごとに集計する」など、
“間隔”を意識した処理に Step はぴったりです。


Stepをマイナスにして「逆順ループ」を書く

下から上へ向かって処理する

Sub SampleReverse()

    Dim i As Long

    For i = 10 To 1 Step -1
        MsgBox i
    Next i

End Sub
VB

このときの i の変化は、

10 → 9 → 8 → … → 1 → 次は 0(1より小さいので終了)

という流れです。

「上から下へ」ではなく「下から上へ」処理したいとき、
例えば「行を削除しながら上に詰める」ような処理では、
逆順ループが安全なことが多いです。

逆順で行を削除する例

Sub SampleDeleteRows()

    Dim i As Long

    For i = 10 To 1 Step -1
        If Range("A" & i).Value = "削除" Then
            Rows(i).Delete
        End If
    Next i

End Sub
VB

上から削除していくと、行が詰まってインデックスがずれてしまいますが、
下から削除していけば、まだ見ていない行の番号は変わりません。

「削除を伴う処理は、Step -1 で逆順に回す」
これは実務でかなり役立つパターンです。


Step指定と「終了条件」の関係をしっかり理解する

ループが止まる条件

For文は、

開始値からスタートして
Step ずつ増減させて
「終了値を超えた(または下回った)」時点で止まる

というルールで動きます。

例えば、

For i = 1 To 10 Step 3   ' 1,4,7,10 → 4回
Next i
VB

i は 1 → 4 → 7 → 10 → 次は 13(10を超えるので終了)
となり、4回ループします。

一方、

For i = 1 To 10 Step 4   ' 1,5,9 → 3回
Next i
VB

この場合は、1 → 5 → 9 → 次は 13(10を超えるので終了)
となり、3回ループです。

「終了値にぴったり届くかどうか」は重要ではなく、
「終了値を超えたら終わり」というのが本質です。

Stepの符号と開始値・終了値の関係を間違えると一度も回らない

For i = 10 To 1   ' Step を書かない → デフォルトは +1 → 一度も回らない
Next i
VB

このように、「10から1へ向かいたいのに Step を書かない」と、
i は 10 → 11…と増えていく方向になってしまい、
開始時点で「すでに終了値を超えている」ので、ループは0回で終わります。

逆に、

For i = 1 To 10 Step -1   ' これも一度も回らない
Next i
VB

も同じです。
1 から 10 へ向かいたいのに、Step -1 で減る方向に進もうとするので、
開始時点で「終了値より小さい」状態になり、やはり0回で終わります。

「開始値から終了値へ、Step の符号の方向に向かって進んでいく」
このイメージを毎回頭の中で確認すると、Step指定のミスがかなり減ります。


Step指定を使うときの考え方のコツ

まず「手作業ならどう進めるか」をイメージする

例えば、

「A1, A3, A5, A7…だけ見たい」

と自分が手でやるなら、

1行目を見る
2行目は飛ばす
3行目を見る
4行目は飛ばす

というふうに、「2行おき」に進みますよね。
この「2行おき」が、そのまま Step 2 になります。

「自分の手がどう動くか」を先にイメージしてから、
それを Step の数字に落とし込むと、しっくりきやすいです。

「何が毎回変わっているか」を意識する

Step指定を使うときも、変わっているのは結局カウンタ変数 i です。
その i を、

行番号に使う
列番号に使う
配列のインデックスに使う

など、「どこに差し込んでいるか」を意識して読むと、
ループの動きが頭の中で再生しやすくなります。


まとめ:Step指定は「ループのリズムを決めるダイヤル」

Step指定の本質は、

カウンタ変数が
どれくらいの間隔で
どちらの方向に進むか

を決める“リズム設定”です。

押さえておきたいポイントをコンパクトに言うと、

開始値から終了値へ、Step ずつ増減しながら進む
Step を省略すると 1(1ずつ増える)
Step を正にすると順方向、負にすると逆方向
終了値を超えた(または下回った)時点でループ終了
「行を飛ばす」「逆順で処理する」「一定間隔で処理する」ときに特に有効

タイトルとURLをコピーしました