見出し画像

【Excel VBA】クラスモジュールに関する少し違った説明

クラスモジュールに関しては、説明している書籍がほとんどなく、考え方も複雑です。
複雑のような気がします。
今回のブログで、少し違った説明をしたいと思います。

クラスモジュールに関して、少し違った説明

こんにちは。伊川(@naonaoke)です。
クラスモジュールのサンプルコードをご視聴者様から頂きました。
そのコードを勉強している内に、世間で説明されていることが、少し違っているのはないかと思いました。
もちろん、間違っているということではありません。
しかし、私のようなバカには、仕切りが高すぎるということです。

クラスモジュールとは?で検索すると、おなじみの用語が出てきます。
また、この用語も、理解するのには、難しいですね。
なので、一般の説明と、少し視点を変えて説明します。
ここは、プロローグなので、クラスモジュールに関するコード等は、一切説明しません。
次回、クラスモジュールのコードを説明しますが、その予備知識として、よんでみてください。

このブログはこんな人にお勧め

クラスモジュールを勉強している人

クラスモジュールの、説明で、たい焼きの例、人間の例に飽きた人

実務で、クラスモジュールを使いたい人

このブログを、読み終わるころには・・・・

実験的な説明なので、理解できるかどうかは、わかりません。
しかし、どのブログよりもわかりやすく説明したいと思います。

クラスモジュールをネットで検索すると?

はっきり言って、よく分からないのが現状ではないでしょうか?

オブジェクト指向
カプセル化
継承
多様性
お馴染みの用語ですが、ここで、嫌になります。

オブジェクト指向は、知っておいたほうがいいです。


クラスモジュールの例

画像1

まず、たい焼きの例です。
おにぎりは、私が作成しました。
記事挿入
何かしらの製造過程が、例に出でます。
そして、極めつけが、クラスモジュールは設計図だという言葉にたどり着くのです。
抽象的で、わからなさすぎですね。

画像2

この情報だけで、クラスモジュールを書こうなんて、無謀すぎます。
いつまでたっても理解できないはずです。

人間をクラスモジュールで設定する

サンプルは、必ず、人間の設定が出てくる。
Personの、身長、年齢、体重等をクラスモジュールで設定する。
こんなことしたくない。
Excel ACCESSで、住所録を使って勉強してもスキルが向上しないのと一緒。
結局、クラスモジュール知らなくても、コード書けるし、きっと、みんなも知らないから、俺も知らなくてもいい。
こうなります。

クラスモジュールが持つ2つの顔

Personを例にするなら、ゲームのキャラクター設定には便利かと思いまます。しかし、実務ではゲームは作りません。

画像3

NETで検索すると、ほとんどが、このキャラクター設定系です。
しかし、そうではなく、辞書機能的な意味合いもあります。
いつも使うコードを中心に説明していきます。

ここからが本当のクラスモジュール 作業手順 その1 自転車に乗ることを考える

一度自転車に乗れたら、多分、一生、乗れるでしょう。

画像4

上の赤い部分は、小脳で、いつも、やることを記憶している脳です。
自転車に乗るということを小脳が記憶しています。
だから、5年、自転車に乗らなくても、自転車を運転できるはずです。

画像5

自転車に乗るということであるパーツに注目してください。

ここからが本当のクラスモジュール 作業手順 その2 あるパールに注目

画像6

この状態を、ハンドルを握っていると言うと思います。
初心者は、この自転車を運転している状態を、いきなり、コードで書こうとします。
VBAで言うなら、標準モジュールにとりあえずコードを書いていく状態です。
いわゆる、どんぶり勘定の宮大工が、設計図なしで、家を建築している状態です。

しかし、もったいない・・・・・・
ハンドルと握るを分けます。

ハンドルと言えば?
車のハンドル
自転車のハンドル
バイクのハンドル


にぎると言えば?

画像7

ゴルフでにぎるは、犯罪です。
賭けるなら、以前の総理大臣のようにチョコレートにしてください。

ここからが本当のクラスモジュール 作業手順 その3 汎用性のあるものを記載する

画像8

ここからが本当のクラスモジュール 作業手順 その4 プロパティって何?

日本語で直訳するなら、属性、設定、構文です。
しかし、「クラス」と呼ばれるデータ構造を作る設計図をブラックボックス化するための手法を「カプセル化」といいます。
このときに用いられる「構文」のことを「プロパティ」と呼ぶのです。

画像9

この握るって、辞書機能で登録できないか?
つまり、小脳で記憶しているものですね。
VBAでいうなら、小脳は、クラスモジュールにあたると思います。
このように、分けて設計しますよね。
これが、カプセル化です。

余談

Excelには、色々なプロパティがあります。
例えば、Rangeプロパティです。
このプロパティを、人様が、勝手に変更してはいけないのです。
伊川直助の属性を、男とするなら、その属性を他人が、勝手に女という属性に変更されたら、たまったもんではありません。
だから、Excelは、汎用性を与えてくれました。
プロパティを作成するのはいいけどさ、クラスモジュールにかいてくれない?
だから、クラスモジュールには、プロパティを作成するProperty プロシージャという特別なプロシージャがあるのです。
このプロパティを作成すれば、Rangeプロパティと同じように扱えるというのが、汎用性があるのです。
なんと言ってもミスがすくなくなます。

ここからが本当のクラスモジュール 作業手順 その5 握るを使い分ける

画像10

寿司屋の大将が、寿司職人に、握り方を教えるのは問題ありません。
しかし、バッターに寿司の握り方を教えても意味はありません。

さすがの大谷翔平さんでも、寿司の握り方で、ホームランは打てないでしょう。

画像11

だから、このように、分けるのです。

ここがポイント

オートルックアップクエリもそうですが、クラスモジュールに関しても情報が少なすぎですね。
SEの方は、このようなコードを日常茶飯事に記載しているのでしょう。
しかし、少ない情報を、いかに調理して、自分自身のスキルにするかですね。
特に、今回紹介した、汎用性のあるものを、クラスモジュールに記載できると便利になるのは、間違いないと思います。

まとめ

次回紹介する、クラスモジュールを紹介するために、予備知識として紹介しました。
このような記事、動画は、かれこれ、10本以上作成しました。
しかし、クラスモジュールの確信を得ているようには思えませんでした。
今回は、少しだけ確信をついているような気がします。

今回も最後まで読んでいただきありがとうございました。

よろしければサポートをお願いします。いただいたお金に関しては、書籍の購入に充て、より良い情報を皆様に提供します。