スポンサーリンク

【初心者向け】VBA(マクロ)コードは上の行から下の行にかけて順番に実行される、例外的に繰り返す・飛ばすこともある


プログラミングは未経験あるいは触り始めたばかりの方にとって、パッと見ると記号の羅列のように感じられると思います。

IMG_1287

プログラミングは1行1行が小さな命令になっており、それらが合わさって1つの大きな命令となります

そして、1行1行の小さな命令が実行される順番にはルールがあります。

今日は、初めて勉強するプログラミングが Excel VBA である方に向けて、1行1行の小さな命令がどのような順番で実行されるかお話しします。

スポンサーリンク

1、プログラミングにおける1行1行の命令は基本的には上の行から下の行にかけて順番に実行される

「何を当たり前なことを」と思われる方もいると思いますが、何行かにわたって書いた VBA コード(プログラミング)は、基本的には上の行から下の行にかけて順番に実行されます。

プロシージャ内に記述した VBA コードは上の行から下の行にかけて順番に実行

Excel VBA のコードを書くためには、Excel シートを開いた状態で「Alt + F11」を押して VBE(エディタ)を開きます。

Image

そして、この状態で「Alt → I → M」を押して、標準モジュールという「VBA コードを記述するところ」を出します。

すると、以下の「真っ白な空間」が出てくるので、ここに VBA コードを書くわけですね。

Image

VBA コードはプロシージャ内に書かなければいけません。

プロシージャというのは Sub ~ End Sub で囲われる範囲のことです。

標準モジュールの一番上に Sub と入力(大文字でも小文字でも良い)し、その後に半角スペースを空けて自分が好きな名前を入力しましょう。

今回、Test としておきます。

Image[6]

この状態で Enter キーを押すと、下に自動的に「End Sub」と記述されます。

Image(3)

この Sub Test() と End Sub の間に VBA コードを記述します。

Image(4)

そして、ここに書き込んだ1つ1つの命令は、基本的に上の行から下の行にかけて順番に実行されていきます。

Image(5)

言い方を変えれば、実行したい命令の順番に上から書いていくということです。

順番に実行する命令の例

さて、順番に実行する命令の例として次のシートを題材にしたいと思います。

Image(6)

このシートに入力してある、売上高(セル C3)と売上原価(セル C4)から売上総利益を計算してセル「C5」に表示し、文字の色を赤色にして、セルの背景色を黄色にしてみたいと思います。

VBA コードは以下のようになります。

この VBA コードを実行する(VBE を開いた状態で F5 を押す)と、以下のようなることが確認できます。

Image

さて、一瞬でこのように↑ 表示が変わるわけですが、これは順番に命令が実行された結果なんです。

以下の ①~③の3つの命令が、上の行から下の行にかけて順番に実行されたということですね↓

Image(7)

仮に、超スロー再生すると ①~③が実行されるごとに以下のように変わって行くわけです。

最初

Image(6)[4]

   ↓

①売上高(セル C3)と売上原価(セル C4)から売上総利益を計算してセル「C5」に表示

Image(8)

   ↓

②セル「C5」の文字の色を赤色にする

Image(9)

   ↓

③セル「C5」の背景色を黄色にする

Image(10)

2、命令が実行される順番の例外もある、繰り返す・飛ばす場合

さて、VBA コードは基本的には上の行から下の行にかけて順番に実行されると何回も書きましたが、例外もあります。

「繰り返し処理」「飛ばす処理」をする場合です。

これらを使った場合には、上から下にかけての実行の流れが変わり、反対に下から上に流れることもあります。

繰り返し処理

繰り返し処理は、言葉の通り何回も同じ処理を繰り返す処理のことです。

VBA では For 文 または Do 文を使います。

さて、繰り返し処理の一例として、以下のシートを取り上げますね。

最初、A列の A1 ~ A10 に 1 〜 10 の番号がふってあるものとします。

Image

以下のようにセル B1 〜 B10 に A1 ~ A10 の2倍の数字を並べて、文字の色を赤色にし、セルの背景色を黄色にしたいと思います。

Image

VBE(エディタ)を開き以下の VBA コードを記述します。

プロシージャ名は Test としました。

以下の状態で上記 VBA コードを実行すると一瞬で表示が変わることが確認できると思います。

Image(36)

さて、これは For 文を用いて i が 1 から 10 になるまで同じ処理を 10回繰り返した結果なのです。

i =1 の時の処理の後↓

Image(37)

   ↓

i =2 の時の処理の後↓

Image(38)

   ↓

i =10 の時の処理の後↓

Image(39)

さて、VBA コードは上の行から下の行にかけて実行するのが基本ではありますが、

For 文を使う場合は、一度下の行まで行ってからまた上の行に戻ります

具体的には、For と Next で囲まれた間の行に書いてある命令を繰り返すことになります。

Image(40)

実行する命令の順番を VBA コードの横に ①、②、③、、、、と番号を付けていくと以下のようになります。

Image(41)

最初①を実行してから For 文の中に入ります。

そして

i = 1 のとき ② → ③ → ④ → ⑤ と上から下に順番に実行してから、また上に戻ります

次に

i = 2 となり ⑥ → ⑦ → ⑧ → ⑨ と上から下に順番に実行してから、また上に戻ります

次に

i = 3 となり ⑩ → ⑪ → ⑫ → ⑬ と上から下に順番に実行してから、また上に戻ります

以後 i が 4 から 10 になるまで繰り返し処理を行います。

このように、For 文を使う場合は一度上の行から下の行まで実行した後に、繰り返し処理するために再度上の行に戻ることになります。

処理の順番をイメージして下さいね!

飛ばす処理

さて、他にも例外として処理を飛ばす場合があります。

処理を飛ばすためには GoTo 文を使います。

GoTo 文を使えば、実行する VBA コードを指定したところまで飛ばすことができます。

さて、先と同じように次のシートに入力してある売上高(セル C3)と売上原価(セル C4)から売上総利益を計算してセル「C5」に表示してみたいと思います。

Image(6)[6]

セルの背景色の色付けや、文字の色の変更はしないものとします。

先の VBA コードに GoTo 文を付け足した以下のコードを見てみましょう↓

これを実行すると、以下のようになります。

セルの色付けも文字の色変更もされないことが確認できるかと↓

Image(8)[4]

さて、なぜそのようになったかというところで、GoTo 文の働きを見てみましょう!

GoTo 文を入れた VBA コードは以下の ①、②、③ の順番で実行されます(③ は命令ではなくラベルを通るだけ)。

Image(42)

②の 「GoTo Label1」は

Label1 まで飛べ!

という命令になります。

これによって、間に他の命令があっても飛ばされる(パスされる)わけなんですね。

Image

3、VBE でステップ実行(F8)を押して命令が実行される順番を確認しよう!

さて、VBA コードの1行1行の命令がどのように実行されていくか? 

その流れをイメージできるようになることは後々大事です。

何回も書きますように、基本は上の行から下の行にかけて順番に実行されますが、For 文や GoTo 文を使った場合のような例外もあるわけです。

さて、VBA コードがどのような順番で実行されていくか、確かめるために VBE(エディタ)を開いて F8 を何回も押してステップ実行してみることをお勧めします。

ステップ実行は、本来であればデバッグ(VBA コードの間違い探し)用にある機能ですが、処理の流れを理解するのにも使えます。

上の行から下の行まで順番に実行する場合

Alt + F11 でコードが書いてある VBE を開きましょう。

Image(43)

そして、ステップ実行のために F8 を何回も連続で押して行きます。

すると、F8 を押すたびに今現在実行している行が黄色くなります

F8 押し 1回目

Image(44)

F8 押し 2回目

Image(45)

F8 押し 3回目

Image(46)

F8 押し 4回目

Image(47)

F8 押し 5回目

Image(48)

これ↑は、上の行から下の行に順番にコードが実行されることの確認ですね。

Excel シートと VBE を同時に開きながら、1行1行の命令(VBA コード)の実行結果を確かめる分かりやすいです。

動画を作ってみました↓

左側が Excel シート、右側が VBE です。

For 文を使った場合

さて、次に For 文を使った場合のどのように処理が実行されていくか、動画を作ってみました。

左側が Excel シート、右側が VBE です。

右側の VBE 上で黄色くなっているところをよく追ってみて下さいね。繰り返し処理というものを理解しやすいと思います。

GoTo 文を使った場合

次は GoTo 文を使った場合にどのように処理が実行されていくかの動画です。

左側が Excel シート、右側が VBE です。

右側の VBE 上で飛ばされている命令があるのが確認できるかと思います。

4、まとめ

VBA コードは基本的には上の行から下の行にわたり、順番に実行されます。

ただし、For 文を使ったときの繰り返しや GoTo 文を使ったときの飛ばす処理がある場合には異なります。

どのような順番でコードが実行されるか、イメージするようにしましょう!

編集後記昨日

昨日(11/8)は、とある面白そうなセミナーのお誘いを受けました。

ただ、日付が月末なので何とか仕事を間に合わせて参加したいです。