Excel VBAを社内に配布するときのTips|LLMで作ったマクロを全員に使ってもらう方法

Excel VBAマクロを社内配布する際の実践テクニック。外部参照方式・ボタン自動配置・モジュール命名など、LLMで作ったVBAツールを社内展開するためのTipsをまとめました。

ExcelVBA業務自動化社内ツールTips

📦 Excel VBAを社内に配布するときのTips

ChatGPTやClaudeにVBAのコードを書かせるのは、もう普通になった。

でも 「作ったあと、どうやって社内に配る?」 ここで詰まる人が多い。

自分用に動くマクロと、社内の全員に使ってもらえるマクロは、作り方がちょっと違う。この記事では、実際に企業さまへExcelツールを納品するなかで身につけた 配布のコツ をまとめます。


Excelの開発タブ。ここからVBAエディタを開く

🎯 この記事の前提

  • VBAのコードはLLM(ChatGPT / Claude)に書かせる
  • 自分が使うだけでなく、チームや部署に配布したい
  • 配布後の アップデート もラクにしたい

💡 Tips 1:Excelにマクロを埋め込まない

これが一番大事。

❌ やりがちなパターン

データが入ったExcelファイルに直接VBAを書いて、そのまま配布する。

これをやると、ファイルごとにコードのコピーが増える。バグが見つかっても、配布済みの全ファイルを回収して直すハメになる。

✅ 配布するならこうする

マクロ入りのExcel(ツール)データ用のExcel を分ける。

📗 ツール.xlsm(マクロ入り) → 📊 データ.xlsx を開いて処理する

ツール側のVBAで、対象のExcelファイルを開いて処理する形にしておく。

Sub ProcessFile()
    Dim filePath As String
    filePath = Application.GetOpenFilename("Excelファイル,*.xlsx")
    If filePath = "False" Then Exit Sub

    Dim wb As Workbook
    Set wb = Workbooks.Open(filePath)

    ' ここでデータ処理
    ' ...

    wb.Save
    wb.Close
    MsgBox "✅ 処理が完了しました!"
End Sub

こうしておくと:

  • アップデートはツール.xlsmだけ差し替えればOK
  • データファイルにはマクロが入らないから安全
  • ユーザーは「ツールを開く → ファイルを選ぶ → 実行」だけ

💡 Tips 2:操作ボタンもVBAで自動配置する

配布したツールに「実行ボタン」を置きたい。

手動でボタンを配置すると、レイアウトが崩れたり、マクロの紐付けが切れたりする。ボタン配置自体もVBAで自動化 できる。

📌 シート上にボタンを自動生成

Sub CreateButtons()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("メニュー")

    ' 既存のボタンを削除
    Dim shp As Shape
    For Each shp In ws.Shapes
        If shp.Type = msoFormControl Then shp.Delete
    Next

    ' 実行ボタン
    Dim btn As Shape
    Set btn = ws.Shapes.AddFormControl(xlButtonControl, 50, 50, 200, 40)
    btn.TextFrame.Characters.Text = "▶ 実行する"
    btn.OnAction = "ProcessFile"

    ' エクスポートボタン
    Set btn = ws.Shapes.AddFormControl(xlButtonControl, 50, 110, 200, 40)
    btn.TextFrame.Characters.Text = "📊 エクスポート"
    btn.OnAction = "ExportData"

    ' ヘルプボタン
    Set btn = ws.Shapes.AddFormControl(xlButtonControl, 50, 170, 200, 40)
    btn.TextFrame.Characters.Text = "📖 使い方"
    btn.OnAction = "ShowHelp"
End Sub

初回セットアップ時にこれを実行すれば、ボタンが揃った状態のツール が完成する。


💡 Tips 3:モジュール名はちゃんとつける

VBAのモジュールが増えてくると、何がどこにあるか分からなくなる。

VBAエディタのモジュール一覧。Module1に全部入りは避けたい

❌ よくある惨状

Module1   ← 全部入り。何が何だか分からない
Module2   ← 追加で書いたやつ
Module3   ← コピーしたまま

✅ こうする

Main       ← エントリーポイント(ボタンから呼ぶ処理)
Config     ← 設定値(シート名, 列番号, メールアドレス)
DataAccess ← データ読み書き
Formatter  ← 出力整形・フォーマット
Mailer     ← メール送信
Setup      ← 初回セットアップ用

英語の命名が難しければ、ローマ字でも全然OK

Syori       ← メイン処理
Settei      ← 設定値
DataYomikaki ← データ読み書き

大事なのは「何が入ってるか名前で分かること」。Module1 に全部突っ込むのだけは避ける。

ポイント:

  • LLMにコードを書かせるとき「Main, Config, DataAccess に分けて」と指示すると、最初から整理されたコードが出てくる

💡 Tips 4:Config モジュールで設定値を分離する

同じツールを別の部署やチームにも展開するとき、変わるのは設定値だけ ということが多い。

' Config モジュール
Public Const SHEET_NAME As String = "売上データ"
Public Const NOTIFY_EMAIL As String = "admin@example.com"
Public Const COMPANY_NAME As String = "営業部"

' 共通設定(変更不要)
Public Const DATE_FORMAT As String = "yyyy/mm/dd"
Public Const MAX_ROWS As Long = 10000

こうしておくと:

  • 展開時に「Configモジュールのここだけ変えてください」で済む
  • コア処理のコードに触らなくていいから 事故が起きない
  • LLMに「Configモジュールを参照する形で書いて」と指示すればOK

💡 Tips 5:初回セットアップもマクロ化する

「シートを作って、ヘッダーを入れて、列幅を調整して…」

この手順をマニュアルに書いても、誰かが必ず間違える。セットアップ自体もVBAにやらせる。

Sub InitialSetup()
    Dim ws As Worksheet

    ' シート作成(なければ追加)
    On Error Resume Next
    Set ws = ThisWorkbook.Sheets(SHEET_NAME)
    On Error GoTo 0

    If ws Is Nothing Then
        Set ws = ThisWorkbook.Sheets.Add
        ws.Name = SHEET_NAME
    End If

    ' ヘッダー設定
    Dim headers As Variant
    headers = Array("日付", "担当者", "内容", "金額", "ステータス")

    Dim i As Long
    For i = 0 To UBound(headers)
        ws.Cells(1, i + 1).Value = headers(i)
    Next

    ' スタイル適用
    With ws.Range("A1:E1")
        .Interior.Color = RGB(66, 133, 244)
        .Font.Color = RGB(255, 255, 255)
        .Font.Bold = True
    End With

    ' 列幅調整
    ws.Columns("A:E").ColumnWidth = 15

    ' ボタン配置
    CreateButtons

    MsgBox "✅ セットアップ完了!"
End Sub

配布先の人は ボタン1つで環境構築完了

マクロ実行後のExcel。セットアップが自動で完了する


💡 Tips 6:エラーが出たとき、ユーザーが困らないようにする

VBAのエラーメッセージは、非エンジニアには意味不明。日本語でやさしく教えてあげる

Sub ProcessFile()
    On Error GoTo ErrorHandler

    ' メイン処理
    ' ...

    MsgBox "✅ 処理が完了しました!"
    Exit Sub

ErrorHandler:
    MsgBox "⚠️ エラーが発生しました" & vbCrLf & vbCrLf & _
           "原因:" & Err.Description & vbCrLf & vbCrLf & _
           "対処法:" & vbCrLf & _
           "1. シート名が「" & SHEET_NAME & "」になっているか確認" & vbCrLf & _
           "2. データが入っているか確認" & vbCrLf & _
           "3. 解決しない場合は管理者に連絡", _
           vbExclamation, "エラー"
End Sub

💡 Tips 7:ヘルプをHTMLで同梱して、ボタンから開けるようにする

使い方マニュアルをPDFやWordで別に渡しても、誰も見ない

ツールと同じフォルダにHTMLファイルを置いて、ボタンから開けるようにする。

Sub ShowHelp()
    Dim helpPath As String
    helpPath = ThisWorkbook.Path & "\help.html"

    If Dir(helpPath) <> "" Then
        Shell "cmd /c start """" """ & helpPath & """", vbHide
    Else
        MsgBox "ヘルプファイルが見つかりません。" & vbCrLf & _
               "ツールと同じフォルダに help.html を置いてください。", _
               vbExclamation
    End If
End Sub

HTMLファイルはシンプルでOK。

<!DOCTYPE html>
<html lang="ja">
<body style="font-family: sans-serif; max-width: 600px; margin: 2rem auto;">
  <h2>📖 使い方ガイド</h2>
  <h3>1. 初回セットアップ</h3>
  <p>「▶ 初回セットアップ」ボタンをクリック</p>
  <h3>2. データ処理</h3>
  <p>「▶ 実行する」ボタンをクリック → ファイルを選択</p>
  <h3>3. うまくいかないとき</h3>
  <p>シート名が正しいか確認してください</p>
</body>
</html>

ヘルプを更新したいときは HTMLファイルを差し替えるだけ。ツール本体を触る必要なし。


📋 配布チェックリスト

VBAツールを社内に配る前に、これを確認する。

  • 🔗 マクロとデータが分離されているか(埋め込みではないか)
  • 📂 モジュールが役割ごとに分割されているか
  • ⚙️ 設定値がConfigモジュールに分離されているか
  • 🔘 操作ボタンが配置されているか
  • 🛠️ 初回セットアップがマクロ化されているか
  • ⚠️ エラー時にユーザー向けメッセージが出るか
  • 📖 ヘルプHTMLが同梱されているか

✅ まとめ

Tips やること
📎→🔗 Excelにマクロ埋め込まない。ツールとデータを分離
🔘 ボタンもVBAで自動配置
📂 モジュール名をちゃんとつける(ローマ字でもOK)
⚙️ 設定値をConfigモジュールに分離
🛠️ セットアップもマクロ化
⚠️ エラーメッセージは日本語で
📖 ヘルプはHTMLで同梱、ボタンから開く

LLMにコードを書かせるのは簡単。でも 使ってもらえるツール にするには、こういう地味なところが大事。

配布を前提にした設計にしておくだけで、社内展開がめちゃくちゃ楽になります。

このブログを書いている人

福岡のAIエンジニア。生成AI(ChatGPT・Claude)を活用した業務自動化、Webサイト開発、技術顧問を行っています。
「何から始めればいいかわからない」というご相談も歓迎です。

© 2022-2025 infoHiroki. All rights reserved.