ExcelVBAでメッセージを管理するには標準モジュールかクラスモジュールか検討

こんにちは!大阪市を拠点に活動している『縁紡ぐ』の稲垣です。
SWELLを使ったホームページ制作や、Excel、ACCESS、RPAなどのシステム開発を行っています。
また、Excel、Word、Outlookの研修や、情報セキュリティ研修も行っています。身近なITの相談相手になりたいと思っています。
お気軽にお問い合わせください。
ExcelVBAでメッセージを管理するには標準モジュールかクラスモジュールか検討
こんにちは!大阪住之江区に会社がある縁紡ぐです。ExcelやACCESSなど業務効率化のお困りごとの相談をお受けしていますので、お気軽にお問い合わせください。
Excel VBAを使用している際に、エラーメッセージやユーザーへの通知メッセージなどを管理する必要が出てくることがよくあります。メッセージの管理方法として、今回は標準モジュールとクラスモジュールのどちらを使用するかについて検討し、その結果を共有したいと思います。
結論:標準モジュールで実装
検討結果として、メッセージの管理は、標準モジュールでの実装がよいと判断しました。
- インスタンス化の手間を省く
- メッセージ管理に適している
これが理由です。
ただし、処理もクラスモジュールですべて管理しているのであれば、クラスモジュールでの実装もありだと思います。実際、クラスモジュールでビジネスロジック部分を開発するときは、クラスモジュールで実装することもあります。
JavaのようなDIコンテナが使えたらインスタンス化の手間もかからないのですが…まぁ、ないものは仕方ないですよね。
クラスで実装した場合
コードを見ると手間が分かりやすいと思います。
ApplicationMessageクラス
Option Explicit
'入力値のエラーメッセージ
Private Const COUNT_INPUT_MESSAGE As String = "〇の数を入力してください"
'Getメソッド
Public Property Get getCountInputMessage() As String
getCountInputMessage = COUNT_INPUT_MESSAGE
End Property
メッセージクラスを利用する時
Sub test()
'変数の宣言
Dim toCount As Variant
'定数メッセージクラスをインスタンス化
Dim constMessage As ApplicationMessage
Set constMessage = New ApplicationMessage
toCount = Application.InputBox( _
prompt:=constMessage.getCountInputMessage, _
Default:=1, _
Type:=1)
End Sub
実際に利用するときに、インスタンス化をしてGetメソッドで取得する必要がでてきます。まぁ、クラスでもっている変数をPrivateにしなければ、メソッドは必要ないですが、隠蔽しないならあまりクラスで用意する必要がないということで。。。
標準モジュールでの実装
Messageモジュールを作成する。
Public Const COUNT_INPUT_MESSAGE As String = "〇の数を入力してください"
メッセージを利用する時
Sub test()
'変数の宣言
Dim toCount As Variant
toCount = Application.InputBox( _
prompt:=Message.MSG_COUNT_INPUT, _
Default:=1, _
Type:=1)
End Sub
インスタンス化も必要がないですし、Publicで宣言しているので「モジュール名+プロパティ名」で、値を参照することができます。この場合「Message.MSG_COUNT_INPUT」です。
インスタンス化の手間を省く
VBAではDIコンテナのような技術はありません。なので、クラスモジュールを使用する場合、メッセージを管理するたびに新たにインスタンスを生成する必要があります。多くのメッセージを扱う場合において、毎回インスタンス化することは、開発の効率を低下させる可能性があります。
標準モジュールではこのようなインスタンス化が不要であり、よりスムーズに開発を進めることができます。
メッセージの管理に適している
VBAの場合、定数の宣言は、Constで行います。Constで宣言した変数に、再代入することはできません。なので、勝手に変数を書き換えられることもありません。
なので、メッセージを変に書き換えされ、それが表示されてしまった💦ということも、考えにくいです。
そして、メッセージは通常、アプリケーション全体で一貫して使用されるのが普通ですよね。標準モジュールでは、これらのメッセージを一箇所に集約して管理することができ、プログラムの可読性や保守性を向上させてくれると思います。また、定数は上書きされることがないため、誤ってメッセージが変更されるリスクを回避することが可能です。
結論
VBAで開発する場合、クラスですべて作成するなどのプロジェクトでの制約がない場合は、標準モジュールでの実装が工数の削減ができ、管理上も問題ないと思います。
なので、わたしとしては、
ExcelVBAでは、メッセージは標準モジュールで実装がオススメ
という結論になりました。
もし迷っている方がいらっしゃって、少しでも参考になれば幸いです。

稲垣
- Excel、ACCESSでのシステム開発が得意
- ITスキルを共有し実践的に学びながら成長する人を見るのが幸せ
- 自家焙煎するほどのコーヒー好き
- 使用言語 VBA、Python、Javascript、Java、HTML、CSS etc.
- 保有資格 Kintoneアソシエイト、日商簿記検定2級、マンション管理士、管理業務主任者、情報セキュリティマネジメント、ExcelVBA etc.
- 業務フロー図の作成や業務時間分析を通して、効率化ポイントを探る人
- お客様にとって本当に良いことかを第一に考える人
コメント