ExcelVBA入門第9回 5種類のモジュールの違い
入門記事として、ここまで「標準モジュール」にコードを書くという説明をしてきましたが、そもそも「標準モジュール」とはなんでしょうか? モジュールには他にも種類があって、それぞれ使いどころが違うので、今回はその解説です。
モジュールは5種類ある
モジュールは、ざっくり言うと、プログラムを書くための「土台」です。これまで、プログラムはプロシージャという「まとまり」を作って、その中に書いてきましたが、それを書くための場所ですね。
新規ExcelファイルのVBEを立ち上げたばかりのときは、こんな状態になっています。いつもここはスルーして「標準モジュール」を挿入していましたが、実は既に、モジュールは存在しています。
この2つは、モジュールです。
ここに、「挿入」から各種モジュールを挿入して使っていますよね。
全部で5種類のモジュールがあります。目的に適したモジュールを選び、その中にプロシージャを作って、コードを書いていきます。
ここで重要なのが、プロシージャに書かれたプログラムを走らせるには、そのプロシージャを起動するきっかけが必要だということです。第1回で紹介しているように、標準モジュールにプロシージャを書いたら、それを走らせるための起動ボタンを作ったりしましたよね。
この5種類のモジュールは、その「きっかけ」がそれぞれ違うんです。
シートモジュール
このモジュールは、Excel上で「該当のシートに対して行った操作」を「きっかけ」にして動くプロシージャを書くことができます。1つのシートに対して1つのモジュールがそれぞれ自動で作成されます。
たとえば、該当のシートを「選択したとき」、該当シート内の「選択セルを変更したとき」「セル内容に変更があったとき」などに起動するプロシージャを作ることができます。ユーザーに「プログラムを起動させる」という意識を持たせずに自動で処理を走らせたい、というときなどに便利です。
こういった「きっかけ」のことをイベントと呼び、ユーザーが行ったイベントによって自動で実行されるプロシージャのことを、イベントプロシージャと呼びます。
以前書いたこの記事を応用して、「特定シートの特定範囲のセルが変更されたときだけ○○をする」というプロシージャを書いたりすることができます。
該当のシートモジュールを開いて、上のボックスから「きっかけ(イベント)」を選ぶと、自動で対応したプロシージャが挿入されるので、中にコードを書くことで実装できます。(上記は「シートに変更があったとき」です。)
ブックモジュール
このモジュールは、「Excelファイルに対して行った操作」を「きっかけ」にして動くイベントプロシージャを書くことができます。Excelファイルのことを「ブック」と呼ぶので、「ブックモジュール」という名称です。
たとえば、ブックを「開いたとき」、「保存したとき」、「新しいシートを作成したとき」などに起動するプロシージャを作ることができます。シートモジュールと同じく、ユーザーに「プログラムを起動させる」意識を持たせずに自動で処理を走らせたいときに便利です。
ブックモジュールを開いて、上のボックスから「きっかけ(イベント)」を選ぶと、自動で対応したプロシージャが挿入されるので、中にコードを書くことで実装できます。(上記は「ブックを開いたとき」です。)
ブックモジュールでは、ブックに対する操作の他、ブック上の全シートに適用されるイベントプロシージャも作れます。
フォームモジュール
このモジュールは、「ユーザーフォームに対して行った操作」を「きっかけ」にして動くイベントプロシージャを書くことができます。
VBE上でフォームモジュールを挿入し、まずオブジェクト画面で部品を載せたりして形を作ります。
次にコード画面で、「どの部品にどんな操作がされたとき」というプロシージャを作ります。ユーザーフォームは、使っている側が「プログラムを動かしているぞ」と意識しやすい部類ですね。
ただ、その中でもいろいろあって、たとえば「コンボボックス(選択式のボックス)の中身が変更されたとき」のプロシージャは勝手に動く印象を受けますが、「コマンドボタンをクリックしたとき」のプロシージャはユーザーが意識して動かせる感じがします。
目的達成のために、ユーザーが使いやすい形のために、どんなスタイルが一番スムーズなのか、ということを考慮するのも大事なことです。
標準モジュール
ここまで解説してきたモジュールは、シート・ブック・フォームという「オブジェクト」が「操作された」のをきっかけに動く、イベントプロシージャを作成できるモジュールです。これらとは違い、他のオブジェクトに依存しないのが「標準モジュール」です。
オブジェクトに依存するモジュールは「何かが何されたとき」というプロシージャ名が自動で挿入されましたが、標準モジュールでは、「自分でプロシージャを作って」「自分で動くきっかけを与えて」という作業が必要です。こういったプロシージャは、ジェネラルプロシージャと呼ばれます。
この作業をすることで、初心者さんには「プログラミングをして、動かす」という概念が分かりやすいかなと思っているので、個人的には最初は標準モジュールから始めるのをおすすめしています。
クラスモジュール
これだけちょっと毛色が違って、「きっかけ」で動くものではありません。ざっくり言うと、「同じような構造をしているものをたくさん扱って、同じような動きをさせたい」というときに、使うと便利なモジュールです。
クラスモジュールに「どんな構造、どんな動き」という「定義」を書いて、他のモジュールからその「定義」を利用する、というイメージです。
同じようなものを同じような動きに…、というのを標準モジュールだけで書こうとすると、「同じようなコードをたくさん書かなきゃいけない」ということになってしまいます。長いコードというのは、書くのも大変ですし、メンテナンスも大変です。
そういった構造のものを、クラスモジュールを使うことによってスッキリして読みやすい・メンテしやすいコードにしたり、プログラムの走るスピートを速くしたりすることができるんです。
ただ、正直ちょっと難しいので、初心者さんは扱わなくても良いと思います。他の4つのモジュールが理解できて、複雑なものが作れるようになってきたと思えたらチャレンジしてみるのが良いと思います。
興味がある方はこちらをどうぞ!
まとめ
まずは標準モジュールだけでも有用なものは作れます。でも、だんだん作れるようになってくると、「こういうことをしてみたい」「ああいうことはできないのかな」という展望がどんどん広がっていきますよね。
こういったモジュールの特性を活かすと、作れるものの範囲が更に広がりますので、活用してみると楽しいと思います。
ほかの入門記事はこちら
- ExcelVBA入門第0回 始める前に
- ExcelVBA入門第1回 動かしてみる
- ExcelVBA入門第2回 とりあえず覚えておくべきこと
- ExcelVBA入門第3回 変数の宣言
- ExcelVBA入門第4回 RangeとCells
- ExcelVBA入門第5回 ステップ実行
- ExcelVBA入門第6回 If ~ End Ifステートメント
- ExcelVBA入門第7回 インデントとコメントアウト
- ExcelVBA入門第8回 繰り返し処理
- ExcelVBA入門第9回 5種類のモジュールの違い
- ExcelVBA入門第10回 3種類のプロシージャと命名規則
- ExcelVBA入門第11回 スコープ(適用範囲)
- これからExcelのマクロを始めたいという方に!簡単な練習問題作りました。
- 私がExcelVBAでよく使う便利なコード・スニペットまとめ
- プログラム初心者さんへ贈る、エラーが起きたら試してみて欲しいこと
- ExcelVBAのクラスモジュールって何?という人向けの使い方まとめ
書籍を執筆しています。
コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)
YouTubeでQ&Aコンテンツを企画しています
運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。