Excel VBA 標準モジュールとクラスモジュールの違い

エンジニア

読了の目安時間: 329

ExcelのVBEにおいて、VBAを記述する際、ワークシート・ワークブックなどのモジュールに書き込まず、基本的には標準モジュールを設置して記述します。

ただ、新規にモジュールを追加しようとすると、標準モジュールとクラスモジュールの二種類が出てきて、ちょっと迷ってしまいます。

vba_mj1

標準モジュールとクラスモジュールの二つにはそれぞれに違いがあり、結論としては、基本は標準モジュールを使用すればOKで、オブジェクト指向の設計をする場合はクラスモジュールを利用する、という感じです。詳しくは下記にまとめてみました。

Excel VBA 標準モジュールとクラスモジュールの違い

VBAでは基本的に標準モジュールを使えばOK

VBAの記述では、基本的に標準モジュールを使うと覚えてOKです。エクセルの操作をあれこれ実現したいだけであれば、標準モジュールに記述すれば、ほとんど可能だからです。

▼標準モジュールの要点
・標準モジュールで定義したフィールドおよびメソッドはクラススコープとなる
・標準モジュールではオブジェクト生成、newによるインスタンスはできない。
(クラスモジュールを利用してのオブジェクト生成、newによるインスタンスは可能です。)

要するに、オブジェクト指向の設計が必要でなく、単にエクセル作業をマクロで自動化したいなどのニーズであれば、定数・ユーティリティを作成するだけですので、標準モジュールの利用だけでコト足りるということです。(javaでいうところのmain void~みたいな感じです。)

クラスモジュールはオブジェクト指向設計の実現に利用する

オブジェクト指向の設計をしない場合、クラスモジュールを使う必要がありません。VBAでは、Workbook、Worksheet、Rangeの三種のオブジェクトが用意されていますが、これ以外に、新たにオブジェクトの概念を追加しようとする場合、クラスモジュールを利用する必要があります。

▼クラスモジュールの要点
・クラスモジュールではオブジェクト生成(newによるインスタンス)ができる
・クラスモジュールで定義したフィールドおよびメソッドはインスタンススコープとなる(オブジェクトごとに持つ値)
・その他、あれこれVBAならではの制限アリ

Javaなどを使っている人であれば、VBAのマクロ作成時にオブジェクト指向の感じで作っていくと扱いやすいのかなと思います。逆にオブジェクト指向をよく分からない人は、クラスモジュールを利用せず、体当たり的に標準モジュールにコード記述していけば良いかと思います。

とはいえ、コンストラクタの引数が取れなかったり、継承クラスが非推奨だったりの制限があるので、こだわってオブジェクト指向の設計をしたいのであれば、いっそjava側で実装してしまったほうが良いのでは・・・とも思ってしまいますが、まあケースバイケースなのかと思います。

ワークシート・ワークブックなどのモジュールでなく、標準モジュールを使う理由

ワークシート・ワークブックなどのモジュールに書き込むと、エラーが発生した時、コードのどこに問題があったか調べることができません。対して、標準モジュールに書き込んだ場合、デバッグ時、エラーが出た時に該当するコードの箇所がカンタンに追跡できます。これだけでも標準モジュールを使った方が便利なことは分かるかと思います。

また、ワークシートなどに書き込んでしまうと、シートの切り換えなどで不都合が起きかねないので、やはり概念上、上位のポジションにある標準モジュールで管理したほうが良いように思います。

参考リンク

▼正直、こちらのサイト様見れば、すべて丸わかりです。とても詳しい・・・!
http://members3.jcom.home.ne.jp/daruma_kyo/aboutooa/vba_module.html

まとめ

VBAでは基本、標準モジュールと覚えておけばOKかと思います。正しく知識を得たい人は、いったんオブジェクト指向を学んでからVBAの勉強をすると効率的だと思います。

キヨタツ
キヨタツの一言

モジュールの解放って、なんかかっこいい。

今読んだ記事をシェアする

vba-thumb

Excel VBA 標準モジュールとクラスモジュールの違い

  • このエントリーをはてなブックマークに追加
  • Pocket

このブログサイトが参考になった人は、いいねボタン! 更新情報も受け取れます!

arrow
デル株式会社
  • Pocket
  • このエントリーをはてなブックマークに追加

キヨタツ

キヨタツ

WEBを中心に、色々な制作をする個人事業主です。過去、エンジニア&webディレクターで会社勤めをしていました。エンジニアで勤めていた頃は、MATLAB/simulink/VBA/C/C++など扱っていました。生産管理、MECE、オブジェクト指向など、エンジニアの知識はweb業界に入っても、かなり役立ちます。性格は、自虐好きです。