1. はじめに
Excel業務の自動化と“起動時制御”の課題
Excelのブックを開くだけで、自動的に処理を開始させることができます。
ただし、Accessと違い Excelでは「自動実行を制御する仕組み」が標準ではありません。
ブックを開くたびに必ず処理が始まるので、メンテナンスや検証の際にはやや不便です。
「起動時に自動実行するか」を設定ファイルに記載し、起動時にこのファイルに従って制御すると、この問題が解消できます
2. 外部設定ファイル(INI)の準備
Excelの起動設定を制御するため、.ini ファイルに設定値をまとめて管理します。
INIファイルとは
セクションという単位( [●●●] )ごとに、キー名称と値をそれぞれ設定できます。
今回は test セクションの中の OpenExeF(起動時実行フラグ)を読み取ります。
[default]
; テンプレート(共通定義)
ApiKey =
OpenExeF =
[test]
ApiKey = test-api-key-123
; 自動実行フラグ(1=自動実行、0=手動)
OpenExeF = 0
3. 起動時の自動実行を制御する(VBAトリガー)
起動制御のベースとなるのは、Excelブックの Workbook_Open() イベントです。
処理の流れは次のとおりです。
1.Power Queryの更新を開始する
2.INIの設定値を取得する
3.後続処理(今回はメッセージポップアップ)します
今回はまったこととして、Power Queryの更新は非同期のため、
クエリ完了を待たずに次の処理へ進み、設定が正しく反映されないことがありました。
そのため、クエリの更新完了を待機する一行を入れておきます。
Private Sub Workbook_Open()
Application.EnableEvents = False
Application.ScreenUpdating = False
' 設定読込クエリを更新 → 完了待ち
ThisWorkbook.Queries("設定読込").Refresh
Application.CalculateUntilAsyncQueriesDone
' 例:結果表示(任意。設定読込シートC2にModeなどを出す想定)
On Error Resume Next
MsgBox "現在の設定は " & Worksheets("設定読込").Range("C2").Value & " です"
On Error GoTo 0
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
4. Power Query によるiniファイルの呼出
Power QueryでINIファイルを読み込み、指定セクションとキーの値を抽出します。
Power Query エディターで「詳細エディター」を開き、以下のコードを貼り付けます。
※なお、クエリ名は「設定読込」と設定しておきましょう。
パワークエリ(M言語)コード
※1行目と2行目のファイル名とフォルダパス、及び最終数行のフィルタについては、環境に合わせて適宜修正してください
let
// パス設定
フォルダーパス = "C:\Users\kenic\Downloads\2025.10.31_自動実行制御\",
ファイル名 = "test.ini",
INIパス = (if Text.EndsWith(フォルダーパス, "\") then フォルダーパス else フォルダーパス & "\") & ファイル名,
// INI読み込みと整形
行データ = Lines.FromBinary(File.Contents(INIパス)),
空白除去 = List.Transform(行データ, each Text.Trim(_)),
有効行 = List.Select(空白除去, each _ <> "" and not Text.StartsWith(_, ";") and not Text.StartsWith(_, "#")),
// セクション・キー・値の抽出
抽出結果 =
List.Accumulate(
有効行,
[セクション = null, 行リスト = {}],
(状態, 行) =>
if Text.StartsWith(行, "[") and Text.EndsWith(行, "]") then
[セクション = Text.BetweenDelimiters(行, "[", "]"), 行リスト = 状態[行リスト]]
else if Text.Contains(行, "=") then
[セクション = 状態[セクション],
行リスト = 状態[行リスト] & {
[セクション = if 状態[セクション] = null then "default" else 状態[セクション],
キー = Text.Trim(Text.BeforeDelimiter(行, "=")),
値 = Text.Trim(Text.AfterDelimiter(行, "="))]
}]
else 状態
)[行リスト],
// テーブル化と重複処理
INI表 = Table.FromRecords(抽出結果),
逆順 = Table.ReverseRows(INI表),
重複除去 = Table.Distinct(逆順, {"セクション", "キー"}),
元順序 = Table.ReverseRows(重複除去),
// 絞り込みと型変換
抽出行 = Table.SelectRows(元順序, each ([セクション] = "test") and ([キー] = "OpenExeF")),
型変換 = Table.TransformColumnTypes(抽出行, {{"値", type number}})
in
型変換
5. 応用
設定を外だしすることで、今回のように起動時の制御をするだけでなく
複数のブックから共通の設定を参照できます。
たとえば――
- パス設定管理:ログファイルの保存先を指定可能
- APIキーを共通管理:ブックを配布しても内部にキーを残さず、安全に共有可能
-
APIキーの定期変更にも対応:
.iniファイルを入れ替えるだけで反映可能
このように、設定をExcel外に切り出してPower Queryで読み込む構成は、
「起動制御」だけでなく 環境管理・機密管理の基盤 としても活用できます。
6. まとめ
.ini ファイルは、Excel業務自動化のための設定の中核です。
各ブックが起動時に参照できるため、
最新の設定情報を外部から柔軟に制御できます。