t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

VBA クラスモジュールはもっと当たり前に使われるようになって欲しい

私がクラスモジュールの使い方を知るまでのエピソード

私が初めてオブジェクト指向の便利さを理解したのは、なぜかVBScriptだった。

ExcelファイルをVBScriptのファイルにドラッグ&ドロップすると内容を読み取ってAccessのデータベースに登録し、ドロップされたExcelファイルは対象年月のフォルダに自動的に格納されるという処理だ。

これまで通りのやり方で作ろうとしたけれど、当時の私にとっては処理が複雑すぎて破綻してしまった。そこでクラスを使うことを思い立ったのだ。

クラスの使い方としては、Excelからの読み取りとAccessへの書き込みをメソッドにしただけの拙いものだったけれど、複雑さをオブジェクトに閉じ込めてメインコードがスッキリ記述できることに感動を覚えた。

これまでJava等で学習してきたオブジェクト指向の知識が初めて実を結んだ瞬間だった。それで、VBAでもオブジェクト指向をやりたいと思った。

それでVBAに関するあらゆる書籍を読み漁った。でも、どこにも書いてない。全機能Bibleだとかパーフェクトマスターといった書籍にすら載っていないのだ。

当時は結構がっかりした。そもそも標準モジュールを挿入する段階で「ん?クラスモジュールって何だ」って気づくだろう。

こんなに堂々と存在している機能についてどの書籍も説明していないなんて。
「何が全機能だこの野郎」とか「どこがパーフェクトやねんアホ」って思うよね。

※後にAmazonでクラスモジュールについて書かれた既に絶版した書籍を発見するが、その頃にはネットの情報であらかたクラスモジュールについて使い方が判明していた。

さて、私がVBAでクラスモジュールを扱えるようになったのは、ここ2~3年のことだ。目を皿にして検索しまくった結果、幸いにも、以下の2サイトのおかげで私はVBAでクラスモジュールを使う方法を学ぶことができた。

1) トップページ - だるまのエクセルVBA
2) EXCEL-VBA開発講座

今でもこの2つのサイトオーナー様には大変感謝している。

オブジェクト指向は特別な技術ではない

Excelでは、当たり前のようにオブジェクト指向の技術が使われている。WorkbookもWorksheetもRangeもオブジェクトである。Excelは、オブジェクトの塊だと言える。

VBAの入門書にも、オブジェクト・メソッド・プロパティという用語は登場する。
でもそれらを読んだ人のうち、いったい何人がオブジェクトについて正しく理解しているだろうか。

オブジェクトとは何かということが分からない限り、Excel VBAの学習は場当たり的になってしまう。

「ブックはこう使います。シートはこう使います。レンジはこう使います。」という具合にバラバラに理解しても一応プログラムは作れるようになるかもしれないが、これでは新しいオブジェクトが登場するたびに無限に覚えることが増えてしまう。

逆にオブジェクトとは何かということが分かってしまえば、VBAExcelを扱うのはとても簡単なことだ。
プロパティやメソッドの違いはあれど、結局それらはすべてオブジェクトなのであって、オブジェクトにはオブジェクトの共通の扱い方があるということを知っておくと、新しいオブジェクトが登場したときもその知識を応用できるようになる。

オブジェクト指向は特別な技術ではなく、最近のプログラミングでは常識的に登場する技術である。
先ほど述べたように、ごく普通にExcelで利用されているものだ。

VBAでクラスモジュールがなかなか使われない訳

まずは圧倒的に情報量が不足していることが主要因だろう。私も情報収集にすごく苦労したので、この現状を打破したくて色々と記事も書いてきたけれど、いろんな人によっていろんな切り口から説明が出てくるといいなと思う。

それから、以下の書籍ではオブジェクト指向を説明する際のたとえ話が余計な混乱を招いていると述べられている。

オブジェクト指向でなぜつくるのか 第2版

オブジェクト指向でなぜつくるのか 第2版

たとえば、よくあるたい焼きと焼き型の話とか、動物クラスから派生する犬・猫とか。

なるほど。たとえ話が余計な混乱を招くというのは面白い視点である。確かに、たい焼きを量産するための、あるいはワンワン・ニャーニャーするための技術が、どう実務に結びつくのかさっぱりわからなかった。少なくとも私にとっては、例題で扱う犬猫と実際に応用する場合との乖離がオブジェクト指向を理解するうえで一番のハードルだったように思う。

オブジェクト指向は現実のモノの扱いにヒントを得て設計されただけであり、もちろん現実世界を模倣することそのものが目的ではない。

分かってしまえば簡単なことなのだけど、オブジェクト指向とはつまり、コードを整理整頓する技術である。これまでバラバラに扱っていたデータとプロシージャを、オブジェクトという一つの入れ物にまとめて扱いやすくするための道具がクラスモジュールである。

比喩表現による混乱もクラスモジュールの活用方法が浸透しない一因かもしれない。

クラスモジュールはもっと当たり前に使われるようになって欲しい

無理やりにでもクラスモジュールを使えということではない。しかし、何かを理解しようと思ったら自分でそれを作ってみるのが一番だと思う。つまり真にオブジェクトについて理解しようと思ったら、自分でオブジェクトを作ってみるのが早いのではないか。

そうした観点からも、この先どんどんVBAでクラスモジュールを使った実例や、分かり易い解説が増えるといいなと思う。

初めて出会う概念というのは難しく感じるものだけれど、クラスモジュールやオブジェクトは分かってしまえば何も難しいことはない。むしろ、複雑でごちゃごちゃしがちなコードをいかにシンプルに扱うかという、プログラマーが楽をするための技術なのだ。

VBAの入門書でもJavaの本みたいに、変数、制御文、配列なんかの説明の次は、ごく普通にクラスモジュールとオブジェクトについて詳しく紹介されているといいなと思う。

今のところそういった本は出てないけれど、いつかクラスモジュールが上級者向けの技術なんかじゃなくて、もっと当たり前に使われるようになって欲しいと願う。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。