【ExcelVBA入門】クラスモジュールのメリット・使い方を徹底解説!

皆さんは、VBAクラスモジュールを使ったことがありますか?
クラスモジュールを使いこなせるようになると、オブジェクト指向をVBAに取り入れることができます。

控えめに言ってもコードの質がとても上がるので、使い方を覚えておくのがおすすめです!

ただ、クラスの概念が難しく使いこなせないと思っている方も多いのでは?

そこで今回は、

  • クラスの基礎
  • メンバ変数を使った変数の使い方
  • コンストラクタ・デストラクタを使った変数の使い方
  • アクセサを使った汎用的な変数の使い方

といった基礎から応用的な方法まで、徹底的に解説します!

クラスモジュールとは

クラスモジュールとは、標準モジュールと同じくVBAのコードを書く場所の一つです。

クラスモジュールを使うメリットは次の通りです。

  • 変数の値をどこからでも書き換えられるリスクを減らすことができる
  • どのモジュールの関数を実行しているか見ただけでわかるようになる
  • 引数の数が多い関数を作りたい場合でも長い関数を使わなくてすむ


上記は一例ですが、クラスモジュールを使いこなすと速くメンテナンスに優れたコードを書くことができます。

※3については後程説明しますがメンバ変数、アクセサを使うことで関数の引数を減らすことができます。

クラスモジュールの基礎的な使い方とは

次にクラスモジュールの使い方について、簡単に紹介します。

クラスモジュールの追加方法

まず、クラスモジュールの作り方について説明します。

挿入タブからクラスモジュールを選択すると、新しいクラスモジュールを追加することができます。

標準モジュールとおなじく、クラスを開くとVBAのコードを書くウィンドウが表示されます。

クラスモジュールでSub・Functionを使う方法

標準モジュールと同じく、SubFunctionを書くことができます。

オブジェクト名「Class1」のクラスモジュール:

標準モジュールと同じくSubの場合はCallFunctionの場合は変数に値を入れるような形で呼び出すことができます。

1点だけ違う点がありまして、呼び出す前にクラス宣言をしなければなりません。

上記を踏まえ、別のモジュールからクラスモジュールを呼び出す場合は、次のように書きます。

サンプルコード:

クラス宣言した際の変数.関数名」で関数を呼び出すわけですね。

「標準モジュールと同じ使い方もできる」とまずは思っていただければOKです。

ちなみに、Functionは他にもいろいろ使い方がありまして、以下で詳しく解説しているので気になる方は見てみてくださいね!

【VBA入門】Functionの使い方(呼び出し、引数、戻り値)
更新日 : 2019年5月27日

クラスモジュールの応用的な使い方とは

ここまでは標準モジュールをクラスモジュールで書く方法をメインに紹介してきましたが、クラスモジュールを使うメリットは他にもたくさんあります。

メンバ変数コンストラクタ・デストラクタアクセサの3点です。

それぞれ説明しますね。

メンバ変数の使い方

最初は、メンバ変数の使い方です。

クラスモジュールの先頭かつ関数の外に書く変数のことです。

例えば、次のような感じですね。

Dimの代わりにPublicPrivateを書いたあと、型を付けて変数宣言をしています。

Publicの場合は次のように値取得、代入ができるようになります。

取得方法:

代入方法:

なお、Publicにしておくと「クラス宣言した変数名.メンバ変数名」で呼び出すことができますが、Privateはアクセサを使わなければ呼び出すことができなくなります。

値を変えられると困る変数の場合は、Privateにしてクラス内でのみ書き換えるように作ることもできるわけですね。

コンストラクタ・デストラクタの使い方

コンストラクタはクラス宣言時、デストラクタはクラス破棄時に呼び出される関数です。

コンストラクタとデストラクタは次のように書きます。

省略可能なので必須ではないため、開始時・終了時に実行したい処理がある場合のみ使うのがおすすめです。

アクセサを使う方法

アクセサは先ほど説明した、Privateのメンバ変数にアクセスするための方法です。

Propertyを使ってGetLetを書くことで、以下のようにデータ取得、書き換えを行うことができます。

クラスモジュール「Class2」:

標準モジュール:

また、この例では値を入れるLetに変数を一度設定すると書き換えできなくする処理をif文で追加しています。

このように、変数に値を入れるときに条件を追加できるのがアクセサを使うメリットでもあります。

逆に言うと、条件追加が不要の場合はメンバ変数をPublicにしたほうが無駄なアクセサを書く必要がないので、用途に応じて使い分けるのがおすすめです!

まとめ

今回は、VBAのクラスモジュールの使い方について解説しました。

慣れないうちは少し苦労するかもしれませんが、クラスを覚えると圧倒的にVBAを書く力が伸びます。

少しずつでもいいので使ってみて、ぜひ習得してくださいね!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

フリーランスエンジニア兼ライターのワキザカ サンシロウです。
ExcelVBAの自動化ツール開発、WEB開発をメインにエンジニア業務をこなしつつ、サムライエンジニアにてライター業務をしております。

プログラミングをこれからやってみたい方に向けて、ためになる記事を全力で書いていきますので宜しくお願い致します!

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説