【Excel VBA】開発を効率化!Config情報を管理するクラスモジュール
こんにちは、おくやんです。
Excel VBAの開発効率を大幅に向上させる、自作のライブラリクラスをご紹介しています。
今回はConfig情報を管理するライブラリクラスのご紹介です。
LibWorkSheetクラスとLibWorkBookクラスと合わせてご利用ください
LibWorkSheetクラス
LibWorkBookクラス
Key-Value型のConfig情報を、シート上で簡単に管理できるようにしたクラスとなります。
皆さんも、ぜひ活用してみて下さい。
名称
Configクラス
概要
configシートからKey-Value型の設定を自動で読取る
指定されたキー項目に該当する値を返す
関連クラス
LibWorkSheetクラスのインストールが必要
LibWorkBookクラスのインストールが必要
制約
本クラスを実装するWorkBook上に「config」というシート名があること
configシート上に「Key」、「Value」というカラムを持つ表が用意されていること
簡単な使い方
configシートの読取り
Configシート上に定義されたキー情報に紐づく値を取得する。
' config設定の読取り
Dim cnf As Config: Set cnf = New Config
Debug.Print cnf.Val("item_1") '=> 設定値_1
Debug.Print cnf.Val("item_2") '=> 設定値_2
Debug.Print cnf.Val("item_3") '=> 設定値_3
Debug.Print cnf.Val("item_4") '=> 設定値_4
プロパティ定義
Val(key_str, default_val) As Variant
指定されてたキーに該当するconfig設定値を取得する
[PARAM] key_str As String
設定に該当するキー項目を指定する
[PARAM] Optional default_val As Variant = Empty
指定されたキー項目がconfigシート上に未設定の場合に、戻り値に設定する値を指定する
本項目が未指定の場合に、キー項目が未設定だとエラーがRaiseされる
コンストラクタ定義
VBA実行高速化のため下記の設定を行う
画面の更新をOFF
確認メッセージの表示OFF
セルの自動計算をOFF
デストラクタ定義
VBA実行高速化解除のため下記の設定を行う
画面の更新をON
確認メッセージの表示ON
セルの自動計算をON
ソースコード
Visual Basic Editorからクラスモジュール Configを追加して、下記コードを張り付けてください。
Option Explicit
' 定数定義
' シート名
Private Const SHEET_CONFIG As String = "config"
' configヘッダ
Private Const CONFIG_HEADER_KEY As String = "Key"
Private Const CONFIG_HEADER_VALUE As String = "Value"
' メンバー定義
Private Info_ As Object
' Property定義
Private Property Get Info() As Object
Set Info = Info_
End Property
Private Property Set Info(setting_list As Object)
Set Info_ = setting_list
End Property
' settingシートから指定されたkeyに対応するvalueを返す
Public Property Get Val(key_str As String, Optional default_val As Variant = Empty) As Variant
If Info.exists(key_str) Then
Val = Info.item(key_str)
ElseIf Not IsEmpty(default_val) Then
Val = default_val
Else
Err.Raise number:=10003, description:="指定されたKeyが存在しません[Key:" & key_str & "]"
End If
End Property
' Initialize定義
' コンフィグ取得クラスの初期化処理
Private Sub class_initialize()
Call SwitchAppSettings(True)
Call GetConfigData
End Sub
' Terminate定義
Private Sub class_terminate()
Call SwitchAppSettings(False)
End Sub
' Private Function定義
' VBA高速化設定OnOff
Private Function SwitchAppSettings(switch_option As Boolean)
If switch_option Then
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
Else
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
End If
End Function
' configシートから設定項目を取得
Private Function GetConfigData() As Boolean
Set Info = CreateObject("Scripting.Dictionary")
Dim libWb As LibWorkBook: Set libWb = New LibWorkBook
If Not libWb.HasSheet(SHEET_CONFIG) Then
Err.Raise _
number:=10000, _
description:="設定シート[" & SHEET_CONFIG & "]が存在しません"
End If
Dim libWs As LibWorkSheet: Set libWs = New LibWorkSheet
libWs.Init sheet_name:=SHEET_CONFIG, key_column:=CONFIG_HEADER_KEY
' 列情報取得
Dim keyColumn As Long: keyColumn = -1
Dim valueColumn As Long: valueColumn = -1
Dim i As Long
For i = libWs.StartCol To libWs.MaxCol()
If libWs.Ws.Cells(libWs.HeaderRow, i).value = CONFIG_HEADER_KEY Then
keyColumn = i
ElseIf libWs.Ws.Cells(libWs.HeaderRow, i).value = CONFIG_HEADER_VALUE Then
valueColumn = i
End If
Next
If keyColumn = -1 Then Err.Raise _
number:=10001, _
description:="設定シートに定義項目[" & CONFIG_HEADER_KEY & "]が存在しません"
If valueColumn = -1 Then Err.Raise _
number:=10002, _
description:="設定シートに定義項目[" & CONFIG_HEADER_VALUE & "]が存在しません"
' 設定情報取得
Do Until libWs.Eof
If Left(libWs.Val(CONFIG_HEADER_KEY), 1) <> "#" Then
Call Info.Add(libWs.Val(CONFIG_HEADER_KEY), libWs.Val(CONFIG_HEADER_VALUE))
End If
Call libWs.ReadNext
Loop
GetConfigData = True
End Function