今回は繰り返し処理です。ループって呼んだりもします。
前回はメッセージボックスとIF文について勉強しましたね。
IF文と今回のループが理解出来るとさらに色んな事が出来るようになります。
もう少しお付き合いください。
では早速始めます。
繰り返し処理についても他の処理と同様色んな方法があります。繰り返し処理はフォーマットが様々で1つの処理を勉強しても書き方が違うので横展出来ません。ただ一定の条件でコードをループさせるという事については共通です。
今回私が記事を書いたのは勉強初期に自力で学習出来るところまでサポートしたいという思いがある為ですので全部は説明しません。代表的なものを1つ挙げて説明させていただきます。
それは「For Next」というコードになります。
早速コードを紹介します。
これはセルA2~セルA1000に おはようございます と記入するコードです。
まず今まで勉強してきたものを整理します。
ForとNext以外はなんとなく分かりますよね。
・Sub ○○○()~ EndSub までが1つのかたまり
・Dim ~ は変数の定義
・cells ~ はセルの番地に変数を使った処理
For Nextの説明に移ります。
簡単にいうと For と Next の間をループします。
・・・いやいや簡単すぎでしょ。。。ちゃんと説明します。
まず最初のコードです。
For 変数 = ○○ to ××
これは型だと思ってください。
変数 は各自で好きなものを設定してください。ひとまず定義はIntegerで良いかと思います。3万行を超えるような仕事になったらLongにする必要があります。忘れてしまった方は以前の記事を参照ください。
次に 〇〇 to ×× です。
上記のコードでは 2 to 1000 になってますね。これは2~1000まで数値が1つずつ変わりますという事を書いています。
Next は次に進んでしまうのではなく次のループに入ってくださいという事でFor~にコードを戻す役割をしています。
コードが流れる順番としては以下のようになっています。
① d に 2 がセットされる
② Cells(2,1) = "おはようございます" ’セルA2に おはようございます
③ For に戻る
④ d に 3 がセットされる
⑤ Cells(3,1) = "おはようございます" ’セルA3に おはようございます
⑥ For に戻る
⑦ d に 4 がセットされる
⑧ Cells(4,1) = "おはようございます" ’セルA4に おはようございます
⑨ For に戻る
dが1000に達するまで続いてdが1001になったらForで指定した数値の範囲外になるので処理が終了し次の処理に進む。という流れになります。
いかがでしょうか?理解出来ましたか?分かりにくい方のためにもう少し手掛かりを提供します。最初のころVBEの説明をしました。ローカルウインドウという場所があったのを覚えていますか?
ここを見る時がきました。
ローカルウインドウがデフォルトで出てないという方はVBEの画面の上方に「表示」というアイコンがいますのでそこからローカルウインドウを選択してください。
ではコードウインドウに戻りまして先程書いたコードのどこでも良いのでマウスでワンクリックしてからF8キーを押してみてください。先頭のSub・・・が黄色の枠に変化して左に矢印出ていませんか?
こんな感じ。
これってコードを1行ずつ実行できるという機能なんですよ。もっと前に言えよって言われてしまうかもしれませんね。お許しください。
ではF8キーを1回押していきますと変数の定義はスルーされてForのところに黄色の枠が来ていますね。そこでローカルウインドウを見るとdが値0でInteger型という記載を見つけることが出来ます。
次にF8キーを押すと おはようございますのところに黄色の枠が移動しますね。
ローカルウインドウのdの値には2がセットされています。
F8キーを押すたびに黄色枠動いていき黄色枠がコードを通過すると処理が済むという流れで進んでいきます。
もう1回F8キーを押すとNextに黄色枠が進みます。セルA2にはおはようございますが入力されていると思います。
次にF8キーを押すとForに戻らずおはようございますのコードに来ます。これはForを無視しているのではなく省略されているだけです。dの値が3になっている事でdはちゃんと数値を変えながらループしている事が分かります。
F8キーを数千回押さないと処理が終了しないのでVBE画面の上部「実行」からリセットを押しましょう。これで途中でも処理を抜けられます。セルにはおはようございますが記載されてしまっていると思いますのでひとまず手動で消しましょう。
いかがでしょうか。理解は進みましたか?
前回のIF文と組み合わせて使うとかなり多くの事が出来る様になります。
例えば表のすべての行をループさせるコードを書いてループさせたセルに書いてある情報がAならBする、CならDするという様に処理を分岐させながら表のすべての情報を仕分け出来てしまうんですよ。これって今までの手作業からするとかなり大きな事じゃないですか?
ここにVLOOKUP関数等ワークシート関数を混ぜて使うとさらに使い勝手の良いものが出来るかもしれません。この後はワークシート関数を勉強して最後に1つVLOOKUP関数を用いたデータ抽出シートを作る予定です。ひとまずそこまでをもってVBAの勉強を終了したいと思っています。
次いきましょう。