こんにちは!大阪市住之江区に拠点を置く会社『縁紡ぐ』の稲垣です。
当社は、Excel、ACCESS、RPAなどのシステム開発や既存ツールを使った業務効率化の提案、また、ITスキルアップのための教育に力を入れています。効率的なビジネス運営を目指している企業様、ITスキルの向上を図りたい企業や個人の方に、最適なご提案をさせていただきます。業務プロセスの改善とITスキルアップをサポートし、共に成長するパートナーでありたいと考えています。
Excel VBAにおける定数管理:標準モジュールとクラスモジュール
こんにちは!大阪市住之江区に拠点を置く会社『縁紡ぐ』の稲垣です。
当社は、Excel、ACCESS、RPAなどのシステム開発や既存ツールを使った業務効率化の提案、また、ITスキルアップのための教育に力を入れています。効率的なビジネス運営を目指している企業様、ITスキルの向上を図りたい企業や個人の方に、最適なご提案をさせていただきます。業務プロセスの改善とITスキルアップをサポートし、共に成長するパートナーでありたいと考えています。
さて、今回は、Excel VBAを用いた開発の際、アプリケーション全体で共有する定数の管理方法は、そのコードの品質、メンテナンス性、そして読みやすさに大きな影響を及ぼします。
定数を管理する方法として、クラスモジュールと標準モジュールの二つが考えられます。この記事では標準モジュールとクラスモジュールでの管理による違いを紹介します。
手続き型、関数型なら標準モジュールがおすすめ
クラスモジュールを使わずにプログラミングする場合は、標準モジュールがおすすめです。
クラスモジュールで定数を管理する場合、その定数を使用するたびにクラスのインスタンスを生成する必要があります。これは、特に大規模なアプリケーションや多くの定数を扱う場合において、余計な手間となり得ます。一方で、標準モジュール内で定数を宣言することで、これらの定数はアプリケーション起動時に自動的に利用可能となり、インスタンス化の手間を省くことができます。
実際にコードでクラスで作成した場合と、標準モジュールで設定する場合との違いをみてみましょう。
クラスで作成した場合
定数を管理するクラス(ConstApplicationClass)
まずは、定数を管理するクラスを作成します。クラス名は、「ConstApplicationClass」で作成。
'最小値と最大値
Private Const MIN_COUNT As Integer = 1
Private Const MAX_COUNT As Integer = 99
Public Property Get getMinCount() As Integer
getMinCount = MIN_COUNT
End Property
Public Property Get getMaxCount() As Integer
getMaxCount = MAX_COUNT
End Property
クラスの定数を利用する方法
利用するときには、「ConstApplicationClass」をインスタンス化して、getterでプロパティを取得します。
Sub test()
'アプリケーション定数のインスタンス化
Dim cstApplication As ConstApplicationClass
Set cstApplication = New ConstApplicationClass
Dim I As Long
’getMinCountで最小値を取得 getMaxCountで最大値を取得
For I = cstApplication.getMinCount To cstApplication.getMaxCount
'処理
Next I
Set cstApplication = Nothing 'メモリ解放
End Sub
標準モジュールで作成した場合
標準モジュール
標準モジュールで「ConstApplication」という名前をつけます。
'最小値と最大値
Public Const MIN_TO_COUNT As Integer = 1
Public Const MAX_TO_COUNT As Integer = 99
モジュールの定数を利用する場合
値を取得するには、モジュール名+定数名で取得することができます。
Sub test()
Dim I As Long
'モジュール名+定数名で取得できる
For I = ConstApplication.MIN_TO_COUNT To ConstApplication.MAX_TO_COUNT
'処理
Next I
End Sub
明らかにコードの量が変わってきますね。
コードの可読性とアクセス性は標準モジュール
標準モジュールで定数を管理する最大の利点の一つは、その可読性とアクセス性にあります。標準モジュールに定数を定義しておけば、どのモジュールからでも直接アクセスすることが可能です。これにより、コードの理解が容易になり、開発者間でのコード共有がスムーズに行われます。また、定数が一箇所に集約されているため、変更や管理も効率的に行えます。
クラスで作成しなくても、Constで宣言した値には再代入はできませんので、安全性は保たれています。
メンテナンスのしやすさ
クラスの場合、属性を追加したときに、合わせてgetterを作成する必要があります。
Access修飾子をpublicでやれば、取得はできるますが…
インスタンス化するためのコードも増えますので、メンテナンスの良さでも、標準モジュールが上かなと思います。
オブジェクト指向で組むならclassがよい
クラスで開発するなら、アプリケーション全体の定数を、classで管理するのもありです。統一性もとれますし。Accessなどほかのものに移行もしやすくなるので。
ただし、絶対にclassで管理したほうがいい!というには、インスタンス化の手間があるので、絶対こっちがおすすめとは言い切れません。
結局は、好みの問題かもしれません。
まとめ
Excel VBAにおける定数の管理方法として、クラスモジュールと標準モジュールのどちらを選択するかは、そのアプリケーションの構造や開発者の好みによって異なります。
インスタンス化の手間を避けるのであれば、標準モジュールでの管理がよいと思います。みなさんは、クラスモジュール、標準モジュールどちらを活用して定数管理をするか検討してみてはいかがでしょうか。
稲垣
- Excel、ACCESSでのシステム開発が得意
- ITスキルを共有し実践的に学びながら成長する人を見るのが幸せ
- 自家焙煎するほどのコーヒー好き
- 使用言語 VBA、Python、Javascript、Java、HTML、CSS etc.
- 保有資格 Kintoneアソシエイト、日商簿記検定2級、マンション管理士、管理業務主任者、情報セキュリティマネジメント、ExcelVBA etc.
- 業務フロー図の作成や業務時間分析を通して、効率化ポイントを探る人
- お客様にとって本当に良いことかを第一に考える人
コメント