先達はあらまほしきことなり

デジタルテクノロジーの活用と展望

クラスモジュールの効用

VBAのクラスモジュールについて解説している書籍や記事が少ないせいか、ほとんど活用されていない。
クラスモジュールを使わなくてもやりたいことは実現できる。
しかし、クラスモジュールを使うともっと楽に実現できるし、保守・改修コストも低くて済む。

VBAではクラスモジュールと呼んでいるものは、プログラミング言語一般的には単にクラスと呼ぶ。
20世紀半ばに初期のプログラミング言語が発明されたが、すでにその当時からほとんどのプログラミング言語にクラスの概念があった。
クラスの概念とは今でいうオブジェクト指向デザインパターンなどの総合的な考え方だ。

私はVBAプログラミングの現場を数々見てきたので、VBAにおいてクラスモジュールが積極的に使われない原因がよく分かるが、そのことについては別の機会で記したい。

本記事では、クラスモジュールの代表的な効用をいくつか紹介する。
(本格的な使い方は別の機会に)

・ユーザー定義型ではできない複雑なデータ型を定義できる
 ユーザー定義型では、配列型を含めることができないが、クラスモジュールならできる

・ワークテーブルを使わなくても、テーブル的にデータを保持できる
 一次的なデータの格納先として、レコードセット的な役割を果たせる

・Map(連想配列)のItemにできる
 Key:ItemのItem部分でオブジェクト型を格納できるので、入れ替えやソートができる

MVCモデルでVBAプログラミングを設計できる
 フォームモジュールはView、標準モジュールはController、クラスモジュールはModelとして機能させることで開発スピードと保守性が上がる

デザインパターンを取り入れられる
 例えばJavaでいうところのDaoやDtoがクラスモジュールで可能になる

・インターフェースが使える
 VBAにもインターフェースがあり、これを実装することでポリモーフィズム(多態性)が実現できる

など他にも多様な活用方法がある。

JavaC#などのオブジェクト指向に慣れ親しんだプログラマーならクラスモジュールを使うことをためらわないのだが、
VBAプログラミング言語の母国語であるプログラマーは、クラスモジュールの効用を知らないケースが多い。
宝の持ち腐れだ。

 

(補記)
VBAのクラスモジュールについての解説が世の中にほとんどない中、誤解を招くような解説があるのが残念だ。
例えば、クラスモジュールの解説でよくみかけるのが、Propertyプロシージャの説明だ。

私からの批判ポイントは2つ。

その1
Propertyプロシージャはクラスモジュール特有のものではなく、標準モジュールでも使える。
あたかもクラスモジュール特有のような文脈で解説してあることが問題だ。

その2
クラスモジュールを使う場面で、Propertyプロシージャはほとんど使わない。
Propertyプロシージャでなくては困ることはないのだ。