【ゼロからわかるVBA入門】モジュールとプロシージャ

ノートとペンとスマートフォン
この記事は約6分で読めます。

プログラミング初心者向けのVBA入門講座第5回です。

前回「プログラムを作成しよう」では、とにかくプログラムを作成することを目的に”Hello,World!”と表示させるプログラムを作成しました。

入門講座第4回の記事はこちら

今回はVBAを学ぶ上で基本となるモジュールとプロシージャについて、初心者向けに基礎的な部分を説明していきます。

プロシージャとは

まず前回作成したプログラムをもう一度みてみましょう。

Sub Hello()
    MsgBox "Hello,World!"
End Sub

前回講座のなかでVBAのプログラムはこの「Sub 〇〇〇()」ではじまり、「End Sub」で終わると説明しました。(〇〇〇はマクロ名)

VBAのプログラムではSub <マクロ名>() の下にプログラムの命令を1行ずつ書いていきます。

マクロを実行すると命令を1行ずつ上から実行し、End Sub の行まできたらマクロを終了します。

この Sub ~ End Sub までのひとくくり(マクロの最小実行単位)をプロシージャといいます。

プロシージャは英語でprocedureと書き、「手順、手続き」といった意味です。

プロシージャプログラムの命令が書かれた手順書とイメージしてください。

プロシージャの概要図

プロシージャの種類

プロシージャには次の種類があります。

  • Sub プロシージャ
  • Function プロシージャ
  • Property プロシージャ

このうちのPropertyプロシージャはプロパティを定義するためのプロシージャなのですが、高度な話になるため本入門講座では取り扱いません。

SubプロシージャとFunction プロシージャ には次のような違いがあります。

  • Sub プロシージャ : 値(結果)を返さないプロシージャ
  • Function プロシージャ : 値(結果)を返すプロシージャ

値を返すプロシージャというのはいわゆる関数を作成するためのプロシージャです。

エクセル関数のSUM関数やAVERAGE関数が計算した結果の合計値や平均値を返すのと同じで、Function プロシージャはプログラムを実行した結果を返します。

詳しくはFunction プロシージャについて紹介するときにあらためて説明します。

モジュールとは

プロシージャが命令を書いた手順書だとするとモジュールはその手順書を記述する場所(エリア)に相当します。

前回の講座では標準モジュール(場所)に”Hello”というタイトルのプロシージャ(手順書)を書いたことになります。

ひとつのモジュールに複数のプロシージャを記述することができます。

モジュールの概要図

モジュールの種類

Excelを構成する部品でありVBAの操作対象となるものを「オブジェクト」といいます。ブックやシート、セルといったものがオブジェクトに該当します。(オブジェクトについての詳細は後日あらためて説明します)

オブジェクトのうちモジュールが用意されているのは次の3つです。

  • ブック(Workbookモジュール)
  • シート(Sheetモジュール)
  • フォーム(UserFormモジュール)

また、どのオブジェクトにも属していない汎用的なモジュールとして

  • 標準モジュール
  • クラスモジュール

があります。このうちクラスモジュールはクラスを定義するときに使う特別なモジュールで、本入門講座では取り扱いません。

オブジェクトに属したモジュールにはそれぞれ適した用途があるのですが、それは使用する場面がきたときに別途説明します。

いまの段階では「特別な理由がない限り、マクロは標準モジュールに記述する」ものと覚えておいてください。

まとめ演習

プロシージャとモジュールの関係およびプログラムの流れを体験してみましょう。

標準モジュールに次のコードを記述してみてください。

Sub Test1()
    MsgBox "1"
    MsgBox "2"
End Sub
Sub Test2()
    MsgBox "Test2 が実行されました"
End Sub

書き込んだときに Test1 と Test2 の間に区分線が自動で挿入されたと思います。

これはプロシージャの区分線で、その前後では別のプロシージャであることを意味します。今回は1つのモジュールに Test1 と Test2 の2つのプロシージャを記述しました。

プロシージャ区分線

それではマクロ名 Test1 を実行してみてください。

VBEからマクロを実行する場合、実行したいプロシージャ内をクリックしてカーソルをプロシージャ内に位置した状態で F5 ボタンで実行できます。

メッセージボックスの OK をクリックしていくと表示が 「1」→「2」と変化したと思います。

これはマクロ名 Test1 のプロシージャ内の命令文を MsgBox “1” → MsgBox “2” と1行ずつ実行し、End Sub の行で終了したことを意味します。

End Sub の行まできたところで終了するので、その下の行に書いたマクロ名Test2のプロシージャが実行されることはありません。

マクロ名 Test2 を選択して実行すればメッセージボックスには「Test2 が実行されました」と表示されます。

これが1つの標準モジュールに複数のプロシージャを記述してマクロ名を指定して実行したときの動きです。

おまけ

それでは Test1 のプロシージャを次のように書き換えてみてください。(Test2 のプロシージャはそのまま残しておいてください)

Sub Test1()
    MsgBox "1"
    MsgBox "2"
    Call Test2
    MsgBox "3"
End Sub

Test1 のマクロを実行するとメッセージボックスの表示は「1」→「2」→「Test2 が実行されました」→「3」となったと思います。

これは3つ目の命令文 Call Test2 でTest2 プロシージャを呼び出して実行した後に、その下の行 MsgBox “3” が実行されたという動きになります。

プロシージャ呼び出しの流れ

実際のプログラムはこのように複数のプロシージャを呼び出したりしながら実行されることが多いのです。そのあたりはまた後日詳しく紹介していきます。

まとめ

今回の講座ではモジュールとプロシージャについて紹介しました。

VBAを学ぶ上では大切な基礎となる部分です。

いまの時点ではまだ実態がつかみづらいかもしれませんが、VBAを使っていくにつれて、徐々に理解が深まっていくと思います。

そのためにも自分がプログラムを書くときや他人のプログラムを読むときには、そのプログラムがどこのモジュールにあるどのプロシージャなのかを意識するように心がけてください。

コメント

タイトルとURLをコピーしました