Mutable_Yunの業務改善ブログ

業務改善や生産性向上のブログです。自動化の手段として、VBAやRPAの勉強に役立つ解説をしています。

Excel VBA入門 本当のど初心者向け③ 繰り返しのFor文

入門者~初心者向けVBA導入記事シリーズの3回目です。いよいよ本格的になってみました。きょうが折り返し地点です。頑張っていきましょう。

この記事は入門~初心者向けです。
レベルについてはExcel VBAの実力(レベル)を定義してみる 初心者~三段をご参照ください。

目次

この記事の狙い

この記事は、プログラミング自体が初めての人が、最初に選ぶ言語にVBAを選んだ場合に、入門者が初心者を卒業し、初級者の入口までレベルアップするためのシリーズの3回目です。半分ですね。5回までマスターすれば確実に初級者の入口に立てます。頑張っていきましょう。

初心者卒業のステップと今回の狙い
初心者卒業のステップと今回の狙い

繰り返しのFor文を学ぶ

今回は繰り返しのFor文を学びます。他にも繰り返しの構文はありますが、今はFor文だけ使えればOKです。この繰り返し構文はマスターするとできることが激増します。楽しみですね。

繰り返しの概念

初めてプログラミングを勉強する初心者がつまづきやすいのがこの繰り返しです。変数がよく分かっていないとつまづいてしまうようです。変数が良く理解できていない場合は、Excel VBA 入門 本当のプログラミング初心者の業務効率化の始め方とその第一歩②(全2回)変数は箱をもう一度復習して、何度も変数を使っておきましょう。

繰り返しのFor文の使い方は下記の様にします。

For文の構造
For文の構造

For文で変数に数字を代入します。その数字がNextを通った瞬間に1ずつカウントアップしていきます。For文は変数の値がToの後の数以下の間繰り返します。実際にコードを作ってみましょう。皆さんも書き写してみて下さい。コピペは禁止です。自分の手で書かないと覚えません。

ちなみに、For文と行ったら、VBAではForとNextのセットのことです。

Sub 初めてのFor文()

    For i = 1 To 3
        MsgBox i & "回目のメッセージ"
    Next i

End Sub

いつもなら緑色の三角ボタンで実行するところですが、今回は変数がどのように変化しているのかを観察するために、F8を押して一行ずつ実行していきます。この一行ずつ実行することをステップイン実行と言います。ステップイン実行は、実際に業務で使えるようなプログラムを作成する時にとても役立つ技なので是非とも覚えておきましょう。

変数の動きが追えるようにローカルウインドウを表示させます。表示⇒ローカルウィンドウ と押して下さい。それではF8を教てステップイン実行で動作の流れを確認していきます。

F8を一回押したところ
F8を一回押したところ

F8を一回押すと、Subの所に矢印がでます。この矢印は、次にこの行を実行しますよ、と言う意味です。今しましたよ、ではなく、次にF8を押したときに実行する、と言う事です。

一回押すと、ローカルウィンドウに変数が表示されます。今回は「i」を変数としたので「i」が表示されています。右にEmpty値と書いてありますね。ここは「i」という変数の箱にどんな値が入っているのかを表す場所です。今は、まだプログラムを一行も実行していない状態なので、何も入っていません。Empty値というのは何も入っていないと言う状態を表す特殊な値です。

その右に「Variant/Integer」と書いてありますが、これは今は気にしなくて良いです。今これの意味を理解しようとすると、挫折する可能性が高まります。この意味を学ぶのは初級者になってからでOKです。

F8を押して、進めていきましょう。For文のところでiの値が1になり、メッセージボックスが表示されてNextのところでカウントアップする事を確認しましょう。

3回メッセージボックスが表示されましたね。MsgBoxは今はメッセージボックスを表示させる命令だと思っていればOKです。その右に「 i & "回目のメッセージ"」と記述しました。

文字列はダブルクォーテーションで囲むのでしたね。iは変数なので囲みません。変数と文字列を結合させるために間に 「&」を書いています。これで、毎回違った回数を表示させています。

手を動かして練習する

それでは実際に自分で動かしてみましょう。

  • 練習1:変数の始まりの数と終わりの数をいろいろと変えて見ましょう
  • 練習2:1列目の1行目から5行目まで「こんにちは」を入れてみましょう

すぐ次に進まず、自分で考えて書いてみて下さい。

はい、書いてみましたか?練習1であえて大きな数を先に書いてみた人はいますか?好奇心があるのはいいことです。実験してみましょう。

Sub 練習1()

    For i = 3 To 1
        MsgBox i & "回目のメッセージ"
    Next i

End Sub

ステップイン実行してみると、どうなりましたか?Forの所からいきなりEnd Subに行ったと思います。これは「For文は変数の値がToの後の数以下の間繰り返す」ため、いきなり繰り返す条件を満たさないので一回もFor文の中身を実行せずに終わった、と言う事です。

次に練習2の解説です。必ず自分で挑戦してみてから解説に移って下さいね!

Sub 練習2()

    For i = 1 To 5
        Cells(i, 1) = "こんにちは"
    Next i

End Sub

鋭い方は、セルの番地の番号を変数にすれば良いのでは?と気づいたかもしれません。私は初めてこれを知ったとき感動しました。カウントアップする為の変数をセルの行番号に使ってしまう。素晴らしい発想です。

カウントアップする数字の幅を指定する

ちょっと応用です。先ほどの練習2で書いたSheet1の「こんにちは」を消して、下記を実行してみて下さい。

Sub サンプル()

    For i = 1 To 9 Step 3
        Cells(i, 1) = "こんにちは"
    Next i

End Sub

Step 3と書いてあります。これはiを3ずつ増やすと言う意味です。省略するとこれまでのように1ずつカウントアップします。これをステップイン実行すると、ローカルウィンドウでiの値が1,4,7,10と増えていくのが分かります。使いどころは表の更新などで、一列おきに同じデータがある、とか3行おきに色を変えたい、と言ったときに使います。Stepの後の数字はマイナスの数も入れられます。カウントダウンもOKなんですね!


余談ながら、初めに「For文は変数の値がToの後の数以下の間繰り返します」と解説した時に「Toの後の数になるまで繰り返します」と書かなかったのは、Step3などでToの後の数字を超えることがあるためなのでした。

応用問題

きょうの解説の中で最後の応用問題です。エクセルに九九のかけ算表を作成して下さい。
ヒント1:行番号に数字が使えると言うことは、列番号にも数字が使える
ヒント2:行番号のカウントアップ用と列番号のカウントアップ用に2つの変数を使う
ヒント3:繰り返すことを繰り返す

いかがでしょうか。まずは自分で書いてみましょう。

Sub 繰り返しの応用()

    For i = 1 To 9
        For j = 1 To 9
            Cells(i, j) = i * j
        Next j
    Next i

End Sub

まず、iに1が入り、内側のFor~Nextで列方向のカウントアップでjが1から9までカウントアップします。そしてiに2が入り同じくjがカウントアップしていきます。jが1から9までカウントアップする繰り返しをiが1から9までカウントアップするまで繰り返す、と言う事です。

百分は一見にしかず。エクセルシートが見える状態にしてF8でステップイン実行して処理の流れとエクセルシートの変化を観察して下さい。

ほら、できた。この記事でかなりできることがふえ、相当レベルが上がりました。確実に理解出来るまで何度も上を読み返し、実際に手を動かして実験してみて下さい。アウトプットが多いほど早く、確実に定着していきます。

次ページでは最重要文法の2つめ、条件分岐について解説します。

質問ご意見はお気軽にコメント欄にどうぞ!