【VBA】For〜Next分(繰り返し処理)を使い倒す!【2飛ばし・逆にカウント】

Excelマクロ(VBA)を使用してFor文を使っている人は必見です!
For文のStepを使用すると実現できるプログラミングの幅が増えることを知ってますか?

  • カウンタを1つ飛ばしする方法
  • 逆順でカウントを行う方法

For分を使った繰り返しはよく使用されるのでStepの使用方法を知ってた方が効率的にソースコードの作成が可能です。Stepのいろいろな使用方法をマスターして効率的なマクロの作成を行えるようになりましょう!

この記事を読んで欲しい人

  • For文の基本的な使用方法を理解している人
  • For文のカウンタをX回飛ばしで使いたい人
  • For文のカウンタを逆順で処理したい人
この記事を読むと
  • For文を応用した使用方法を理解できる
  • 効果的な繰り返し処理を行うことができる

では、確認していきましょう

関連記事

For文のカウンタを一つ飛ばしする方法

カウントを一つ飛ばしで処理する方法を確認していきましょう。
イメージとしてはこのような感じです。

通常のカウンタ

1→2→3→…→9

1つ飛ばしの場合

1→3→5→7→9

通常通りの指定だとカウンタが1ずつ増えていくところ、1つ飛ばしで増えていっていることがわかります。このような指示を行うことができるようになります。

入力構文

入力構文を確認していきましょう

入力構文
For 変数=初期値 To 終了値 Step XX
  処理
Next 変数

通常のFor文と違う箇所は1箇所だけです。
StepXX の部分だけ通常と違います。

XXに2を入力すると2ずつカウントされるという意味になります。
2以外の別の数字に置き換えるとその数字ぶんずつカウントされます。

StepXXの書き方は今回のポイントなので覚えるようにしましょう!

プログラム例

プログラム例の確認をしていきましょう。

  • 1から9までのカウントを行う
  • 1つ飛ばしで数を数える
  • 数えてる数を出力する

このような用件のプログラムを作成しました。

 Sub forStep2()
 
    ' カウンタを宣言
    Dim i
     'For 文開始
    For i = 1 To 9 Step 2
        '現在のカウンタ値を出力
        MsgBox " カウンタ =" & i
    Next i
    
 End Sub

For 1 To 9の部分で1から9までのカウントを行ってます
Step 2の部分で2つ飛ばしでカウントされることがわかります。
MsgBoxでカウントを出力してます。

Step2を追加することで1つ飛ばしのプログラムを作成することができました。
皆さんもソースコードを作成して実行してみてください。

For分のカウンタを逆順にする方法

次にカウンタを逆順にする方法を確認してみましょう
イメージとしては以下のような感じです。

逆順のカウント

10→9→8→7→…→2→1

10からカウントが減っていって1まで逆順でカウンタとされていくことがわかります。
入力構文を確認していきましょう。

入力構文

カウンタを逆順にする方法の入力構文を確認しましょう。

入力構文
For 変数=初期値 To 終了値 Step -XX
  処理
Next 変数

こちらも通常のFor文とほとんど一緒ですが
Step -XXという部分だけ違うことがわかります。

XXに1を入力すると-1ずつ逆順にカウントアップされます。

Step-XXを変更することによって逆順のカウントを変更することが可能です

プログラム例

プログラム例の確認をしましょう

  • 10から1までのカウントを行う
  • 逆順で数を数える
  • 数えてる数を出力する
 Sub forStepUp()
 
    ' カウンタを宣言
    Dim i
     'For 文開始
    For i = 10 To 1 Step -1
        '現在のカウンタ値を出力
        MsgBox " カウンタ =" & i
    Next i
    
 End Sub

Step -1の部分で逆順にカウントを指示してます。
皆さんもソースコードを作成して実行してみてください。逆順に実行されることがわかるかと思います。

For文でStepがない場合について

Stepの使い方を確認してきました。
ここで以下のようなプログラムを記載した時にどのような処理になるかを確認しましょう。
Stepがない場合の挙動についての理解を深めましょう

確認したい関数
For i = 10 To 1
  処理
Next i
10から1までカウンタがされていくのでしょうか?
プログラムの結果を確認していきましょう!

プログラムの結果を確認

プログラムを実行してみました。
サンプルプログラムはこちらです。

 Sub forSumple()
 
    ' カウンタを宣言
    Dim i
     'For 文開始
    For i = 10 To 1
        '現在のカウンタ値を出力
        MsgBox " カウンタ =" & i
    Next i
    
 End Sub

プログラムの実行結果は

何も出力されませんでした!

考察

サンプルプログラムを実行しても何も出力されませんでした。
この結果から考察してみます。

  • Forの繰り返しが一度も行われてない
  • iの値は10に変更されている

To1に合致していない繰り返し処理を行われていないようでした。

To1は置き換えると

i <= 1

になると想定します。

そしてStepXXに何も入力されてないと

Step 1

になると辻褄があいます。

結論:Stepを未入力の時はStep1になる

まとめ

いかがだったでしょうか。

  1. StepXXを指定するとXX飛ばしでカウントアップされる
  2. Step-XXを指定すると逆順でカウントアップされる
  3. StepXXを指定しないと自動でStep1が入力される

For文でStep付きの使用方法を確認しました。
Stepの使い方を習得すると繰り返し処理の幅が広がりますのでこの機会に習得しましょう。

関連記事