For~Nextステートメントを使って繰り返し処理を学ぶ
今回は繰り返し処理です。書籍や日常会話の中では「ループ」と呼んでます。
ループもIF文同様マクロの記録では再現出来ない質の高い機能です。使えると実力が数段上がります。
動きは単純ですので簡単な機構で理屈を理解してから自分の仕事に落とし込んでみてください。
ひとつ前の記事で紹介したIF文と本記事で紹介する繰り返し処理が使えると大半の事は出来る様になりますよ。
ここまで理解出来たらやっと初心者を名乗れるぐらいのスキルになります。
勉強はまだまだ序盤です。
前回の記事
前回はメッセージボックスとIF文について勉強しました。
IF文と今回のループが理解出来るとさらに色んな事が出来るようになります。
本記事での課題
今回の課題です。前記事に引き続き非常に重要な事を勉強しますので必ずマスターしてください。
繰り返し処理について
繰り返し処理についても他の処理と同様色々な方法があります。
1つの処理を勉強しても書き方が違うので横展出来ません。
ただし「一定の条件でコードをループさせる」という事については共通です。
今回私が記事を書いたのは勉強初期に自力で学習出来るところまでサポートしたいという思いがある為です。
よって全部を説明する事は考えていません。
代表的なものを1つ挙げて説明させていただきます。それは「For~Next」というコードになります。
For~Nextステートメント
早速コードを紹介します。先にコードを説明します。
これはセルA2~セルA1000に おはようございます と記入するコードです。
Option Explicit
Sub 繰り返し処理()
'変数の定義
Dim d As Long
'変数 d に 2~1000の値を入れ替えながらループ
For d = 2 To 1000
'変数 d の値にしたがってセルに おはようございます を記入する
Cells(d, 1) = "おはようございます"
Next
End Sub
まず今まで勉強してきたものを整理します。
コード内の「For」と「Next」以外はなんとなく分かりますよね。
次はコード全体を把握してから各要素を個別に見ていきましょう。
各要素について(Forなど)
それではFor~Nextステートメントの説明に移ります。簡単に言うと For と Next の間をループします。
赤字の部分は毎回同じです。黒字の部分にいろいろな値を入れる事で作業をループさせます。
変数 は各自で好きなものを設定してください。ひとまず定義はLongにします。
次に 〇〇 to ×× です。上記のコードでは 2 to 1000 になってますね。
これは2~1000まで数値が1つずつ変わりますという事を書いています。
Next は次に進んでしまうのではなくForにコードを戻す役割をしています。
「For」と「Next」の間に書かれた処理を繰り返すという建付けです。コードの建付けはイメージできましたか?
分かりにくいかもしれないので次はローカルウインドウを用いながらコードの動きを見てみましょう。
VBEのローカルウインドウとステップインを使ってコードの流れを説明
分かりにくい方のために手掛かりを提供します。これらの機能を使うとコードの理解が進みます。
ローカルウインドウ
最初のころVBEの説明をしました。ローカルウインドウという場所があったのを覚えていますか?
VBEにローカルウインドウがデフォルトで表示されていないという方はまず次の操作をお願いしたいです。
VBEの画面の上方に「表示」というアイコンがいます。そこからローカルウインドウを選択してください。
これでコードが実行されていく中で可変する変数の値を見る事ができます。
ステップイン
先程書いたコードのどこでも良いのでマウスでワンクリックしてからF8キーを押してみてください。
先頭のSub・・・が黄色の枠に変化して左に矢印出ていませんか?これがステップインです。
こんな感じ。これはコードを1行ずつ実行できるという機能なんですよ。
もっと前に言えよと言われてしまうかもしれませんね。お許しください。
解説:For~Nextステートメントを理解する
F8キーを1回押すと変数の定義はスルーされてForのところに黄色の枠が来ていますね。
そこでローカルウインドウを見るとdが値0でLong型という記載を見つけることが出来ます。
次にF8キーを押すと おはようございますのところに黄色の枠が移動しますね。
ローカルウインドウのdの値には2がセットされています。
F8キーを押すたびに黄色枠が動いていきます。
黄色枠がコードを通過すると処理が済むという流れで進んでいきます。
もう1回F8キーを押すとNextに黄色枠が進みます。
セルA2にはおはようございますが入力されていると思います。
次にF8キーを押すとForに戻らずおはようございますのコードに来ます。
これはForを無視しているのではなく省略されているだけです。
dの値が3になっている事で変数dは数値を変えながらループしている事が分かります。
このまま続けるとF8キーを千回押さないと処理が終了しないです。
それは大変ですのでVBE画面の上部「実行」タブ内のリセットを押しましょう。
これで途中でも処理を抜けられます。
セルにはおはようございますが記載されてしまっていると思いますのでひとまず手動で消しましょう。
まとめ
何回か書いて動かすとイメージとデータが結びついてくると思いますので根気よくやってみてください。
前回のIF文と組み合わせて使うとかなり多くの事が出来る様になります。
- 繰り返し処理の考え方
- ローカルウインドウの見方
- ステップインの使い方
Enjoy Excel
例えば表の全ての行をループさせるコードを1つ書きます。
その後ループでつかんだセルに書いてある情報により処理を分ける事が出来ます。
AならBする、CならDするという様に範囲内すべてのセルの情報を1クリックで仕分け出来る様になります。
こちらに記事を用意しますが少し難しいかもしれません。必要に応じて読んでみて下さい。
関連記事【If&For】マクロ内で分岐とループを組み合わせる-1
手作業でやる事を思えばかなり大きな改善になります。
ここにVLOOKUP関数等ワークシート関数を混ぜて使うとさらに使い勝手の良いものが出来るかもしれません。
この後はワークシート関数を勉強して最後に1つVLOOKUP関数を用いたデータ抽出シートを作る予定です。
そこまでをもってVBAの勉強を終了したいと思っています。
参考:関連記事
本シリーズはこちらの記事とも連携しています。