Excel VBAにおける定数管理:標準モジュールとクラスモジュール

Excel VBAにおける定数管理:標準モジュールを選択した理由

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における定数の管理方法として、クラスモジュールと標準モジュールのどちらを選択するかは、そのアプリケーションの構造や開発者の好みによって異なります。

インスタンス化の手間を避けるのであれば、標準モジュールでの管理がよいと思います。みなさんは、クラスモジュール、標準モジュールどちらを活用して定数管理をするか検討してみてはいかがでしょうか。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次