Excel/VBA

TOP

クラスモジュールの使いどころ

クラスモジュールの使いどころを説明した画像です。

どういったパターンでクラスモジュールを使用するのか

結論として、クラスモジュールを使用しなくても開発を完了させることは可能です。
ただし、クラスモジュールを活用することで、運用後のメンテナンス性や可読性が向上し、結果的に運用しやすいツールを作成できます。

では、どのような場合にクラスモジュールを使うべきかというと、主に同じ処理を何度も繰り返す場合や、将来的に仕様変更で処理の内容が変わる可能性がある箇所に利用することが効果的です。
仮に、下記のようなコードがあったとします。

クラスモジュールの使いどころの例の画像です

このコードでは、変数(str_1・str_2)に格納された文字列を、それぞれ小文字に変換しています。

ここで問題となるのは、「小文字に変換する」という処理が2回書かれている点です。

例えば、運用後に「大文字に変換するようにしてほしい」と依頼があった場合、2箇所の修正が必要になります。

2箇所だけであれば、そこまで苦労はありませんが、コードが長くなり、さまざまな場所で小文字に変換する処理が行われている場合、それらをすべて修正するのは大変です。

こういった場合に使用できるのがクラスモジュールです。

クラスモジュールの使い方

クラスモジュールの使い方は、まずVBE(Visual Basic Editor)を開き、『プロジェクト内で右クリック』 ⇒ 『挿入をクリック』 ⇒ 『クラスモジュールを選択』の順で追加をします。

クラスモジュールの追加方法を説明した画像です。

プロジェクト内でクラスモジュールを作成するのが最初の場合『Class1』というクラスモジュールが作成されます。

クラスモジュールの追加方法を説明した画像です。

追加したクラスモジュールに、文字列を全て小文字にする関数を作成します。下記のサンプルコードを参考にしてください。

サンプルコード


'引数で渡された文字列を小文字に変換します
Function LCaseConversion(arg_str As String) As String
    LCaseConversion = LCase(arg_str)
End Function
        

次に標準モジュールを追加します。追加方法は、『プロジェクト内で右クリック』 ⇒ 『挿入をクリック』 ⇒ 『標準モジュールを選択』の順で追加をします。

クラスモジュールの追加方法を説明した画像です。

追加した標準モジュールに、下記のコードを記述し、作成したクラスモジュールを使用できるようにします。『プログラミングの専門用語では、インスタンスを生成するともいいます。』

サンプルコード


Sub 小文字変換()

    Dim class_1 As Class1
    Set class_1 = New Class1
    
End Sub
        

Class1というのはクラスのオブジェクト名です。オブジェクト名は左下にあるプロパティから変更することもできます。
Class1をclass_1というオブジェクト変数に入れると下記の画像のように、クラスモジュールに作成した関数が使用できるようになります。

クラスモジュールの追加方法を説明した画像です。

クラスの関数を使用できるようにした後は、クラスモジュールに作成した関数を使用して小文字に変換することができました。

クラスモジュールの追加方法を説明した画像です。

一見すると、コードが増えて複雑になったように思えるかもしれませんが、もし「大文字に変換するように」と仕様変更があった場合、クラスモジュール内の関数を1箇所変更するだけで対応が完了します。

さらに、大文字に変更する以外に「文字列の追加」など別の処理を加えてほしいという依頼があった場合も、クラスモジュールにその処理を追加するだけで対応が可能です。このように、クラスモジュールを使用することで、運用時のメンテナンスが格段に簡単になります。複数の箇所で同じ処理を繰り返すのではなく、1箇所にまとめることで、将来的な変更にも柔軟に対応できるのが大きなメリットです。

あえてクラスモジュールを使用する理由

冒頭でも述べた通り、クラスモジュールを使用しなくても開発を完了させることは可能です。さらに、上記で説明した小文字に変換する関数も、標準モジュールに記述すれば同じことができます。

では、なぜあえてクラスモジュールを使用するのかというと、開発者によって理由はさまざまですが、最も大きな目的の一つは『可読性』です。

例えば、標準モジュールを複数作成し、その中の1つに関数を記述し、その関数を他の標準モジュールから呼び出す場合、デバッグ時にその関数がどのモジュールに記述されているのかが分からなくなることがあります。

こうなると、運用時やバグ発生時の対応に多くの時間がかかってしまう可能性があります。

一方、クラスモジュールの場合、一度クラスのインスタンスを生成してから関数を呼び出すことになる為、関数がどこに記述されているのかが明確になります。これにより、バグが発生した際にも素早く対応できるようになります。

このような理由から、クラスモジュールを使用することで、コードの管理が容易になり、長期的な運用にも適しています。


関連記事