Excel VBA設定ファイルの作り方!INI・JSON・シート活用でメンテナンスを楽にする
生徒
「先生、マクロの中で使っている保存先のフォルダ名や、計算に使う消費税率が変わるたびに、コードを書き直すのが大変です…。」
先生
「それは『設定ファイル』を使うと解決しますよ。プログラムの中に直接書き込むのではなく、外にある『設定』を読み込むようにするんです。」
生徒
「設定を外に出す…?具体的にどうやって構成すればいいんですか?」
先生
「INIファイルやJSON、あるいはExcelのシート自体を設定場所にする方法があります。それぞれの特徴を一緒に見ていきましょう!」
1. 設定ファイルとは?マクロの「柔軟性」を高める仕組み
Excel VBAで自動化ツールを作るとき、例えば「C:\Users\Desktop\集計」といった保存先のパス(ファイルの住所のこと)をプログラムの中に直接書くことがあります。これを専門用語でハードコーディングと言います。
しかし、パソコンを買い替えたり、他の人がそのツールを使ったりすると、フォルダの場所が変わってしまい、マクロが動かなくなってしまいます。そのたびに難しいプログラムの画面(VBE)を開いて中身を書き換えるのは、プログラミング未経験の人にはとても高いハードルです。
そこで、設定ファイルという「道具箱の外に貼ったメモ」のようなものを準備します。マクロは実行されるときにそのメモを読みに行き、「今日はこのフォルダに保存すればいいんだな」と判断します。こうすることで、プログラムを一切触らずに、メモを書き換えるだけでツールの動きを変えられるようになります。これが保守性(メンテナンスのしやすさ)の高いプロジェクト構成の基本です。
2. 一番簡単!Excelの「設定シート」を活用する構成
初心者の方に最もおすすめなのが、Excelブックの中に「設定」という名前の専用シートを作る方法です。プログラミングの知識がなくても、普段のExcel操作と同じ感覚で設定値を変更できるのが最大のメリットです。
プロジェクト構成としては、設定シートのセルに名前を付けて管理したり、特定のセル(例えばB2セルは保存先パス、B3セルは消費税率など)を決めておいたりします。マクロ側では、まずそのシートの値を読み込む「共通変数」を用意する構成が一般的です。
' 設定シートから情報を読み込む例
Sub LoadSheetSettings()
Dim savePath As String
Dim taxRate As Double
' 「設定」シートのB2セルから保存先を取得
savePath = Sheets("設定").Range("B2").Value
' 「設定」シートのB3セルから税率を取得
taxRate = Sheets("設定").Range("B3").Value
MsgBox "現在の保存先は " & savePath & " です。" & vbCrLf & _
"税率は " & taxRate * 100 & "% で計算します。"
End Sub
この方法は、ファイルが一つで完結するため管理が非常に楽です。設定項目が多い場合は、表形式にして「項目名」と「値」をセットで並べておくと、後で見返したときにも分かりやすくなります。
3. 伝統的な手法!INI(アイエヌアイ)ファイルの活用
INIファイルとは、古くからWindowsで使われている設定用のテキストファイルです。メモ帳で開くと、以下のような形式で書かれています。
[FolderSettings]Path=C:\Reports
INIファイルを使うメリットは、設定がExcelの外にあるため、複数のExcelツールで同じ設定を共有できることです。例えば、「社内共通のフォルダパス」を一つのINIファイルに書いておけば、すべてのマクロが同じ場所を読みに行けます。
VBAでINIファイルを扱うには少し複雑な命令(API呼び出し)が必要になりますが、一度「共通モジュール」として部品を作ってしまえば、次からは一行の命令で設定を読み書きできるようになります。プロジェクトの構成として、「設定読み込み専門のモジュール」を一つ用意するのがコツです。
' INIファイルから読み込むイメージ(概念コード)
Sub ReadFromIniFile()
Dim configValue As String
' 本来はAPIを使いますが、イメージとしては以下のような動きです
configValue = GetIniSetting("C:\config.ini", "FolderSettings", "Path")
If configValue <> "" Then
MsgBox "外部ファイルから取得したパス: " & configValue
End If
End Sub
4. モダンな形式!JSONで複雑な設定を管理する
最近のプログラミングで主流なのがJSON(ジェイソン)形式です。これはWebの世界で標準的に使われており、データの親子関係(階層構造)を表現するのが得意です。例えば、「ユーザーごとの詳細な権限設定」のように、項目が枝分かれしているような複雑なデータを扱うのに適しています。
Excel VBAでJSONを扱う場合は、外部のライブラリ(便利な拡張機能)を読み込むプロジェクト構成にします。少し難易度は上がりますが、将来的にWeb上のデータと連携したり、より高度なシステムと繋げたりしたい場合には、このJSON形式での管理が非常に役立ちます。
' JSON形式の設定を扱うイメージ
' { "User": { "Name": "Tanaka", "ID": 123 } }
Sub ProcessJsonSettings()
' JSONを解析して「名前」を取り出す
Dim userName As String
' ここで専用の解析ツール(パーサー)を使います
userName = "田中" ' 解析後の結果イメージ
MsgBox "こんにちは、" & userName & "さん。"
End Sub
5. 設定ファイルを「どこに置くか」のフォルダ構成戦略
設定ファイルを使う上で、初心者が一番悩むのが「ファイルの置き場所」です。プログラムの中で C:\Users\Admin\Documents... とフルパスで書いてしまうと、結局それが原因で動かなくなることがあります。
賢いプロジェクト構成は、「マクロブックと同じフォルダ」を設定ファイルの定位置にすることです。VBAには ThisWorkbook.Path という「自分自身が今どこにいるか」を調べる命令があります。これを使えば、ツールが入ったフォルダを丸ごとどこへ移動させても、設定ファイルを自動で見つけることができます。
このように、関連するファイルを一つのフォルダにまとめてパッケージ化することが、トラブルを防ぐ秘訣です。
6. 設定を読み込むタイミング(起動時と実行時)
設定ファイルを読み込むタイミングにも、いくつかのパターンがあります。プロジェクトの性質に合わせて選びましょう。
- ブックを開いた時:
Workbook_Openというイベントを使い、Excelを開いた瞬間に設定をすべて読み込んで「共通変数」に入れておきます。動作が速くなりますが、設定を変えたら一度Excelを開き直す必要があります。 - マクロを実行する直前: 毎回最新の設定を読みに行きます。設定を頻繁に変える場合に便利ですが、読み込みの分だけほんの少し処理時間がかかります。
基本的には、マクロのメイン処理が始まる直前に「設定読み込み用プロシージャ」を呼び出す構成にすると、ミスが少なく安全です。
' メイン処理の最初で設定を読み込む構成
Sub MainTool()
' 1. まず設定を読み込む(別の場所で作った部品を呼ぶ)
Call LoadAllSettings
' 2. 読み込んだ設定を使ってメインの処理をする
MsgBox "設定に基づいた処理を開始します。"
' 3. 終了
End Sub
7. 設定値の「バリデーション(入力チェック)」を忘れずに
設定ファイルを使えるようにすると、誰でも簡単に設定を変えられます。しかし、間違えて「保存先フォルダ名」を空っぽにしたり、数字を入れるべき場所に文字を入れたりしてしまうかもしれません。そのままマクロを動かすと、エラーで止まってしまいます。
プロジェクト構成の中に、「設定値が正しいかチェックする担当」の機能を入れておくと安心です。例えば、「フォルダが存在するか?」「税率は0以上の数字か?」といった確認を行い、もし間違いがあれば親切なメッセージを出してマクロを終了させるように作ります。これだけで、ツールとしての完成度が一気に高まります。
8. 設定ファイルを使い分ける判断基準
最後に、どの方法を選べばよいかの目安を整理しましょう。パソコン操作に慣れていないユーザー向けのツールなら「Excelシート」が一番親切です。一方、設定を勝手に書き換えられたくない場合や、複数のブックを連携させるなら「INIファイル」が向いています。
最初は「設定シート」から始め、慣れてきたら「INIファイル」や「JSON」へとステップアップしていくのが理想的です。大切なのは、「プログラムを書き換えずに動きを変えられる状態」を作ることです。この一工夫があるだけで、あなたの作ったVBAツールは、誰にでも使いやすい「本物のシステム」へと進化します。