【初心者でもできる】エクセルVBAで最も簡単なクラスを作る方法


empty

photo credit: txmx 2 via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

突然ですが、「クラスモジュール」って使ったことありますか?

エクセルVBAについて、ネットでも書籍でもたくさんの情報を得ることができますが、クラスモジュールについては

  • 何のために使うの?
  • 実際どういうふうに作るの?

といった情報が極端に少なくなる印象があります。

知らなくても目的のマクロは作れるし、書籍とかでも「やりなさい」って言われないし、まあいっか…となってたりしないでしょうか?

私も、そうでした。

ただ、以下の記事にも書いている通りですが、間違いなくわかっていたほうがいいし、使えたほうがいいんです。

ノンプログラマーでも「クラス」を学ぶべき理由
ノンプログラマーがVBAやGASを学習していくと、その先に謎の言葉ばかりが登場する恐怖のエリア登場します。「クラス」です。今回は、「なぜノンプログラマーがクラスを学ぶべきなのか」について書きたいと思います。

ということで、このシリーズでは、「初心者でもわかるエクセルVBAのクラスモジュール」をテーマに、その使い方と便利さについてお伝えできればと思います。

とにかく、ひたすら、少しずつ、丁寧に解説していきますよ!

初回の今回は、エクセルVBAで最も簡単なクラスを作ってみよう!です。

多分、世界一簡単なクラスといっていいでしょう。

では、行ってみましょう!

「クラス化」をするお題について

まず、どんなクラスを作るのかを簡単にお伝えしておきましょう。

こちらです。

エクセルVBAでクラス化するエクセル表

なーんだ、ただのエクセル表じゃないか。

と思われるかも知れませんが、そうなんです。ただのエクセル表のデータを「クラス化」していきたいと思います。

クラスの説明には、よく車とか鯛焼きとかの例が用いられるのですが、かえって分かりづらい…という声もあったりします。

エクセルVBAのクラスの説明は、エクセル表で説明しちゃったほうが、イメージしやすかったりするんですよね。

そのまんま実務でも活用できるかも知れない、というか活用できますので、効率もよいです。

ということで、上記のエクセル表を記述したブック「メンバーリスト.xlsm」を題材にすすめていきますよ。

最も簡単なクラスを作成する

では、最も簡単なクラスを作っていきましょう。

本当に簡単です。誰でもできますので、ひとまずやってみましょう。

クラスモジュールを挿入する

クラスを作るには、クラスモジュールというモジュールが必要です。

いつもは標準モジュールにコードを書きますが、クラスを作る場合はクラスモジュールにコードを書くのです。

まず、「メンバーリスト.xlsm」でVBEを開いて、メニューから「挿入」→「クラスモジュール」を選択します。

VBEでクラスモジュールを挿入

すると、以下のようにプロジェクトエクスプローラーには「クラスモジュール」のフォルダ内に「Class1」というクラスモジュールが挿入されます。

コードウィンドウには、「Class1」が開かれ、コードを書くことができます。

ここに何らかのコードを入力していって、クラスを作っていくわけですね。

クラスモジュール「Class1」を挿入した

はい、以上。

最も簡単なクラスが完成です!

…空っぽですけどね。

オブジェクトブラウザーで作成したクラスを確認する

では、本当にクラスが作成できたか、オブジェクトブラウザーで確認してみましょう。

オブジェクトブラウザーを使うと、コード内で使用するオブジェクトがどういうメソッドやプロパティといったメンバーを持っていて、それぞれどういう書き方をするか、みたいな情報を調べることができます。

少しVBAに慣れている人であれば、Rangeオブジェクトとか、Worksheetオブジェクトとか、いろいろオブジェクトブラウザーで調べた経験ありますよね?

では、 F2 キーを押下して、オブジェクトブラウザーを開いてみてください。

そこで、左上の「プロジェクト/ライブラリ」ボックスから「VBAProject」を選んでみてください。

すると、「クラス」ボックス内に「Class1」が追加されていますね。

つまり「Class1」という名前のクラスを作成できたわけです。

オブジェクトブラウザーでClass1とそのメンバーを確認する

右側の「メンバー」ボックスを見ても、何もないですね。メンバー空っぽです。

ただ、Class1のクラスモジュールに、いろいろと書き込んでいくのです。すると、プロパティとかメソッドなどのメンバーを追加できるというわけです。

つまり、クラスモジュールにコードを書いていくことで、普段使っているWorksheetオブジェクトや、Rangeオブジェクトのように、「Class1オブジェクト」を操作をすることがでるようになるというわけです。

クラス名を変更する

「Class1」などという名前ではちょっと分かりづらいので、クラス名を変更しましょう。

では、いったんオブジェクトブラウザーを閉じてください。

プロジェクトエクスプローラーで「Class1」を選択すると、下側のプロパティウィンドウに「Class1」の情報が表示されます。

(たいした情報はないですが…)

そこで、「(オブジェクト名)」の右側の欄は、直接編集できるので、編集をしちゃいましょう。

ここでは「Person」とします。

クラスモジュールのオブジェクト名を編集する

では、再度 F2 キーでオブジェクトブラウザを開いて確認してみましょう。

オブジェクトブラウザーで変更したクラス名を確認する

すると、クラス名が「Person」になっていますね。

つまり、クラスモジュールの(オブジェクト名)が、すなわちクラス名なんですね。

まとめ

以上、エクセルVBAで最も簡単なクラスの作り方をお伝えしました。

また、クラス名の変更の仕方も確認できました。

しかし、メンバーは空っぽです…ここに便利なプロパティやメソッドなどのメンバーを追加していき、実際にそれを活用していくというわけです。

このシリーズでは、そのクラスの作成と活用についての一連の流れを、超ゆっくりペースで紹介していきます。

次回は、クラスに最も簡単なプロパティを作成していきます。

エクセルVBAでクラスに最も簡単なプロパティを追加する方法
「初心者でもわかるエクセルVBAのクラスモジュール」をテーマにお送りしています。今回はエクセルVBAで、クラスモジュールにパブリック変数を宣言して、クラスに最も簡単なプロパティを追加する方法です。

どうぞお楽しみに!

連載目次:初心者でもわかる!エクセルVBAでクラスを作ろう

名前は聞いたことあるけどよくわからない「クラスモジュール」。本シリーズでは、初心者でも少しずつ丁寧にその作り方と便利さについてお伝えしていきますよ!
  1. 【初心者でもできる】エクセルVBAで最も簡単なクラスを作る方法
  2. エクセルVBAでクラスに最も簡単なプロパティを追加する方法
  3. エクセルVBAで自作クラスをインスタンス化する方法
  4. エクセルVBAでクラスに最も簡単なメソッドを追加する方法
  5. エクセルVBAで表の1行分のデータを表すクラスを作成する方法
  6. エクセルVBAでProperty Getプロシージャを使って簡単なプロパティを作成する方法
  7. エクセルVBAでプロパティを他のモジュールからアクセスできないようにする方法
  8. エクセルVBAでProperty Letプロシージャを使ってプロパティ設定をする方法
  9. エクセルVBAでPropety Getプロシージャを使ってプライベート変数にアクセスする方法
  10. エクセルVBAでクラスのインスタンス生成時に初期データを格納するメソッドを作る方法
  11. エクセルVBAでインスタンスの集合をコレクション化する方法
  12. エクセルVBAでコレクション化したインスタンスを取り出す方法
  13. エクセルVBAでクラスモジュールを使って独自のコレクションを作る方法
  14. エクセルVBAでインスタンス生成時に自動で処理を実行するイベントプロシージャClass_Initialize
  15. エクセルVBAで自作コレクションのインスタンス生成時に初期データも投入する方法
  16. エクセルVBAで自作コレクションの要素を取得するプロパティの作り方
  17. エクセルVBAで自作のコレクションに要素を追加するメソッドを作成する
  18. エクセルVBAで自作コレクションの要素を削除するメソッドの作り方
  19. エクセルVBAでエクセル表のデータを反映するメソッドとクラスを使うメリット

  投稿者プロフィール

タカハシノリアキ株式会社プランノーツ 代表取締役
株式会社プランノーツ代表、コミュニティ「ノンプロ研」主宰。1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ
★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ
★フォロー頂ければ嬉しいです。

タイトルとURLをコピーしました