非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【ExcelVBA】Excel VBAツールの設定情報をシートに一覧化する方法

   

Excel VBAで作成したツールが増えてくると、設定情報の管理が煩雑になりがちです。ファイルパス、ユーザー名、各種フラグなど、ツールごとにバラバラに記述されていると、更新や引き継ぎの際に手間がかかります。本記事では、Excel VBAツールの設定情報を専用のシートに一覧化し、VBAから簡単に読み書きできるようにする方法を解説します。これにより、ツールの保守性・運用性を大幅に向上させることができます。

設定情報の一元管理の重要性

なぜ設定情報の一元管理が重要なのでしょうか?

  • 変更の容易性: 設定値を変更する際に、コードを修正することなくシート上の値を変えるだけで済むため、誤操作のリスクを減らせます。
  • 保守性の向上: どの設定がどこにあるか一目で分かり、ツールの動作を理解しやすくなります。
  • 引き継ぎの効率化: 開発者以外でも設定内容を把握しやすくなり、ツールの引き継ぎがスムーズになります。
  • デバッグの効率化: 特定の設定値が原因でエラーが発生した場合、シートを確認するだけで問題の切り分けがしやすくなります。

実装方法の概要

設定情報を管理するための専用シート(例: 「Settings」シート)を作成し、そこに「設定項目名 (Key)」「設定値 (Value)」「説明 (Description)」などの列を設けます。VBAからは、このシートを操作して設定値を読み込んだり、必要に応じて書き換えたりする関数を作成します。

サンプルコード:設定シートの準備

まず、設定情報を格納するシートを作成します。シート名は「Settings」とします。以下の図のように、A列にKey、B列にValue、C列にDescriptionを記述してください。

Settingsシートの構成例
  • A1セル: Key
  • B1セル: Value
  • C1セル: Description

※実際のシートには、A2から以下のように設定情報を入力します。

Key Value Description
FilePath C:\Data\ 処理対象ファイルのパス
LogEnabled TRUE ログ出力の有効/無効
AdminMail admin@example.com 管理者メールアドレス

サンプルコード:設定値の読み込み

指定したKeyに対応するValueをSettingsシートから読み込む関数です。Keyが見つからない場合は、エラーを避けるために空文字を返します。

Function GetSetting(ByVal key As String) As Variant
    Dim ws As Worksheet
    Dim foundCell As Range
    
    On Error GoTo ErrorHandler
    
    Set ws = ThisWorkbook.Sheets("Settings")
    
    ' A列でKeyを探す
    Set foundCell = ws.Columns("A").Find(
        What:=key, _
        LookIn:=xlValues, _
        LookAt:=xlWhole, _
        SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, _
        MatchCase:=False
    )
    
    If Not foundCell Is Nothing Then
        ' Keyが見つかったら、隣のB列の値を返す
        GetSetting = foundCell.Offset(0, 1).Value
    Else
        ' Keyが見つからない場合
        GetSetting = Empty ' または vbNullString
        Debug.Print "設定 '" & key & "' が見つかりません。"
    End If
    
    Exit Function
    
ErrorHandler:
    MsgBox "GetSetting関数でエラーが発生しました: " & Err.Description, vbCritical
    GetSetting = Empty
End Function

Sub TestGetSetting()
    Dim filePath As String
    Dim logEnabled As Boolean
    Dim adminMail As String
    
    filePath = GetSetting("FilePath")
    logEnabled = CBool(GetSetting("LogEnabled")) ' ブール値に変換
    adminMail = GetSetting("AdminMail")
    
    Debug.Print "ファイルパス: " & filePath
    Debug.Print "ログ有効: " & logEnabled
    Debug.Print "管理者メール: " & adminMail
    
    ' 存在しない設定を試す
    Debug.Print "存在しない設定: " & GetSetting("NonExistentKey")
End Sub
 

 

サンプルコード:設定値の書き込み

指定したKeyに対応するValueをSettingsシートに書き込むサブルーチンです。Keyが見つからない場合は、何もしません。

Sub SetSetting(ByVal key As String, ByVal newValue As Variant)
    Dim ws As Worksheet
    Dim foundCell As Range
    
    On Error GoTo ErrorHandler
    
    Set ws = ThisWorkbook.Sheets("Settings")
    
    ' A列でKeyを探す
    Set foundCell = ws.Columns("A").Find(
        What:=key, _
        LookIn:=xlValues, _
        LookAt:=xlWhole, _
        SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, _
        MatchCase:=False
    )
    
    If Not foundCell Is Nothing Then
        ' Keyが見つかったら、隣のB列の値を更新
        foundCell.Offset(0, 1).Value = newValue
        Debug.Print "設定 '" & key & "' を '" & newValue & "' に更新しました。"
    Else
        Debug.Print "設定 '" & key & "' が見つかりません。書き込みできませんでした。"
    End If
    
    Exit Sub
    
ErrorHandler:
    MsgBox "SetSetting関数でエラーが発生しました: " & Err.Description, vbCritical
End Sub

Sub TestSetSetting()
    ' 設定値を更新
    Call SetSetting("FilePath", "D:\NewData\")
    Call SetSetting("LogEnabled", False)
    
    ' 更新後の値を確認
    Debug.Print "更新後のファイルパス: " & GetSetting("FilePath")
    Debug.Print "更新後のログ有効: " & GetSetting("LogEnabled")
    
    ' 存在しない設定を更新しようとする
    Call SetSetting("NonExistentKey", "SomeValue")
End Sub
 

 

設定シートの活用例

設定シートには、以下のような情報を格納することができます。

  • ファイルパス、フォルダパス
  • メールアドレス (送信元、送信先、管理者)
  • APIキー、認証情報 (セキュリティに注意し、パスワードなどは別管理を検討)
  • 処理のON/OFFを切り替えるフラグ (TRUE/FALSE)
  • データベース接続文字列
  • 実行モード (開発用、本番用)
  • 処理の閾値や定数

ユーザーが頻繁に変更する可能性のある設定は、シートに直接入力してもらい、開発者のみが変更するべき設定は、シートを保護するなどの対策も考えられます。

まとめ

本記事では、Excel VBAツールの設定情報を専用シートに一覧化し、VBAから効率的に管理する方法を解説しました。この方法を導入することで、ツールの運用・保守が格段に楽になり、開発者だけでなく利用者にとっても使いやすいツールを提供できるようになります。ぜひ、ご自身のVBAツールにこの設定管理手法を取り入れてみてください。

スポンサーリンク

 - Excel, VBA