【2026年8月最新】ExcelVBAのグローバル変数(Public変数)とは?業務マクロの開発効率を上げる使い方
この記事の内容
「先輩が作った業務マクロを引き継いだが、コードのあちこちに出てくるglb〇〇という変数が何を意味しているのか分からない」「複数のマクロで同じ値を使い回したいが、そのたびに同じ値を書くのは面倒」——ExcelVBAを業務で使っていると、こうした場面によく出会います。
この悩みを解決する仕組みが、この記事のテーマであるグローバル変数(Public変数)です。1つの値を、複数のマクロ(プロシージャ)から共通で参照・更新できるようにする仕組みで、業務マクロの開発効率を大きく左右します。
この記事では、グローバル変数の基本的な宣言方法から、実践的な使いこなしテクニック、Excelの「名前の定義」機能との違い、そして非エンジニアの経営者・管理職の方に本当に知ってほしい「なぜこの仕組みの使い方を誤ると、マクロが保守不能になるのか」まで、実務目線で解説します。
この記事を最後まで読むと、次の6つが明確になります。
01 BASIC CONCEPT グローバル変数(Public変数)とは何か 複数のマクロで値を共有するための仕組み
グローバル変数とは、1つのExcelブックの中にある複数のマクロ(プロシージャ)から、共通の値を読み書きできるようにする変数のことです。VBAではPublicというキーワードを使って宣言することから、Public変数とも呼ばれます。
📚 用語解説
変数:プログラムの中で、値を一時的に記憶しておくための「名前付きの入れ物」のこと。Excelのセルに似た概念ですが、変数は画面には表示されず、マクロの処理の途中経過や設定値などを保持するために使われます。
📚 用語解説
プロシージャ:VBAにおける処理のひとまとまりの単位。「Sub〇〇()」から「End Sub」までの1ブロックが1つのプロシージャで、「マクロ」と呼ばれるものの多くはこのプロシージャを指します。1つのモジュールの中に複数のプロシージャを書くことができます。
通常、VBAのマクロ(プロシージャ)内で宣言した変数は、そのプロシージャの処理が終わると同時に値が消えてしまいます。しかし、複数のプロシージャをまたいで「共通の設定値」や「処理中に一貫して使い続けたい値」を扱いたい場面は多くあります。こうしたケースで活躍するのが、プロシージャをまたいでも値を保持し続けるグローバル変数です。
1-1. 具体的にどんな場面で使われるのか
グローバル変数は「複数の担当者・複数の処理が参照する共通の設定台帳」だとイメージしてください。この台帳の管理が雑になると、後から「どこで値が変わったのか分からない」という混乱を招きます。
1-2. 具体的なイメージ:請求書番号の採番を例に
もう少し具体的なイメージを持つために、「請求書番号を自動採番する業務マクロ」を例に考えてみます。このマクロには、「見積書作成」「請求書発行」「入金確認シート更新」という3つの別々のプロシージャがあり、それぞれが同じ「現在の請求書番号」という値を参照・更新する必要があるとします。
もしグローバル変数を使わなければ、3つのプロシージャそれぞれが個別に最新の請求書番号をシートから読み直す処理を書く必要があり、コードが冗長になるだけでなく、「あるプロシージャだけ番号の更新漏れが起きる」といったズレも生じやすくなります。グローバル変数で「現在の請求書番号」を一元管理しておけば、どのプロシージャからも同じ最新の値を参照でき、更新も1箇所に集約できます。
02 HOW TO DECLARE 宣言方法をコードで理解する(Public / Dim / Static) 変数のスコープ(有効範囲)の違いを実例で見る
VBAには、変数の「有効範囲(スコープ)」を決める3つの主な宣言方法があります。コードが読めなくても構いません。「どこで使えて、どこで消えるか」だけ押さえれば十分です。
📚 用語解説
スコープ(有効範囲):その変数の値を読み書きできる「範囲」のこと。1つのプロシージャ内だけで有効なのか、モジュール内の複数プロシージャで有効なのか、ブック全体のすべてのモジュールで有効なのか、という3段階のレベルがあります。
2-1. Public:ブック全体で共有するグローバル変数
' 標準モジュールの先頭(プロシージャの外)に記述する
Public glbTaxRate As Double
Sub SetTax()
glbTaxRate = 0.1
End Sub
Sub CalcPrice()
Dim price As Long
price = 1000 * (1 + glbTaxRate) ' 別のプロシージャからも参照できる
End Sub
Publicで宣言した変数は、同じブック内の標準モジュールに置かれたすべてのプロシージャから参照・更新できます。これが、いわゆる「グローバル変数」です。
2-2. Dim:宣言した場所によって範囲が変わる
Dimは最もよく使われる宣言方法ですが、どこで宣言するかによって有効範囲が変わる点に注意が必要です。
| 宣言方法 | 宣言する場所 | 有効範囲 |
|---|---|---|
| Dim(プロシージャ内) | Sub〜End Subの内側 | そのプロシージャの中だけ。処理が終わると値は消える |
| Dim(モジュール先頭) | 標準モジュールの先頭 | そのモジュール内の全プロシージャ。他のモジュールからは参照不可 |
| Public(モジュール先頭) | 標準モジュールの先頭 | ブック内のすべてのモジュール・プロシージャから参照可能 |
2-3. Static:プロシージャ内だけど値が消えない変数
Staticは少し特殊な宣言方法です。プロシージャ内で宣言する点は通常のDimと同じですが、そのプロシージャが再度呼び出されたときも、前回の値を保持し続けるという違いがあります。「同じマクロを何度も実行した回数をカウントしたい」といった場面で使われます。
1つのプロシージャ
内でのみ有効
同じモジュール内の
プロシージャで共有
ブック内すべての
プロシージャで共有
2-4. Private:あえて「モジュール内限定」にする書き方
モジュールの先頭でDimを使うと、その変数は自動的に「モジュール内限定」の扱いになりますが、これをより明確にするためにPrivateというキーワードを使うこともできます。DimとPrivateは、モジュールレベルで使う場合はほぼ同じ意味ですが、Privateと書いた方が「あえて他のモジュールから隠している」という意図がコードを読む人に伝わりやすくなります。
' このモジュール内だけで使う変数だと明示する
Private modWorkCount As Long
「本当にブック全体で共有すべき値なのか、それとも1つのモジュール内で完結する値なのか」を意識しながらPublicとPrivateを使い分けることが、後述する保守性の高いマクロ設計の第一歩になります。
03 PRACTICAL TECHNIQUE グローバル変数を使いこなす実践テクニック 命名規則と定数活用で、事故を未然に防ぐ
グローバル変数は便利な反面、使い方を誤ると「どこで値が変わったか分からない」という混乱を招きます。ここでは、実務でよく使われる2つの工夫を紹介します。
3-1. 接頭辞(プレフィックス)で「グローバルだと一目で分かる」ようにする
多くの現場では、グローバル変数の名前にglb(globalの略)やg_といった接頭辞を付ける命名規則が使われます。コードを読んだときに「これはグローバル変数だ」と一目で判別できるようにするための工夫です。
Public glbSheetName As String ' 対象シート名
Public glbBaseRow As Long ' 処理の基準行
Public glbErrorCount As Long ' エラー件数のカウンタ
3-2. Public Const:変更されては困る値は「定数」にする
グローバル変数の中には、「処理中に更新したい値」だけでなく、「絶対に変更されてはいけない固定値」もあります。後者には、変数ではなく定数(Const)を使います。
📚 用語解説
定数(Const):一度設定したら、プログラムの実行中に値を変更できない「変わらない値」のこと。変数と違って途中で書き換えられないため、「税率」「消費税率」「基準日」のように、うっかり書き換えられると困る値を守るために使われます。
Public Const TAX_RATE As Double = 0.1
Public Const TARGET_SHEET As String = "売上データ"
この使い分けにより、「意図せず値が書き換わってしまう」という事故を、コードの構造そのもので防ぐことができます。変数は変化する値、定数は変化させたくない値、という原則を意識するだけで、マクロの安全性が大きく向上します。
「処理の途中で値が変わるか?」を自問してみてください。変わるならPublic変数、変わらないならPublic Constを使う、というシンプルな基準で迷いなく使い分けられます。
3-3. 初期化のタイミングを1箇所にまとめる
グローバル変数を安全に使うためのもう一つのコツは、「いつ初期値を設定するか」を1箇所に集約することです。複数のプロシージャがバラバラのタイミングで同じ変数に初期値を代入していると、「結局どの値が最新なのか」が分かりにくくなります。
よく使われるのが、ブックを開いたときに自動的に実行されるWorkbook_Openイベントで、グローバル変数の初期化処理をまとめて行う方法です。
' ThisWorkbookモジュールに記述
Private Sub Workbook_Open()
glbSheetName = "売上データ"
glbErrorCount = 0
End Sub
この方法であれば、「グローバル変数の初期値がどこで設定されているか分からない」という混乱を防げます。ブックを開いた瞬間に必ず1回だけ初期化される、という一貫したルールがコード上で明確になるためです。
①接頭辞で一目でグローバルと分かるようにする ②変わらない値は定数にする ③初期化は1箇所に集約する。この3つを徹底するだけで、グローバル変数まわりのトラブルの多くは未然に防げます。
04 VS NAMED RANGE Excelの「名前の定義」とグローバル変数の違い 似て非なる2つの「共通の値」を扱う仕組み
Excelには、VBAを使わなくても「名前の定義」という機能でセルや値に名前を付け、複数の数式から参照できる仕組みがあります。「グローバル変数と何が違うのか」を整理しておきましょう。
| 観点 | Excelの「名前の定義」 | VBAのグローバル変数(Public変数) |
|---|---|---|
| 操作方法 | メニュー操作・数式バーから設定(VBA不要) | VBAコードでの宣言・代入が必要 |
| 参照できる範囲 | ワークシートの数式、VBAコードの両方から参照可能 | VBAコード内からのみ参照可能 |
| 値の保持 | ブックに保存され、閉じても値が残る | 基本的にブックを閉じると値は失われる(別途保存処理が必要) |
| 主な用途 | 数式で使う固定的な参照範囲・定数的な値 | マクロ実行中に動的に変化する処理用の値 |
📚 用語解説
名前の定義:Excelの機能の一つで、特定のセル範囲や値に分かりやすい名前を付け、数式内でセル番地の代わりにその名前を使えるようにする仕組み。「数式タブ」→「名前の定義」から設定でき、VBAを使わない一般的なExcel利用者にもなじみのある機能です。
大まかな使い分けとしては、数式でも使う固定的な値は「名前の定義」、マクロの実行中だけ必要な動的な値は「グローバル変数」という整理になります。両者は競合するものではなく、目的に応じて使い分けるものだと理解しておくとよいでしょう。
Public変数に格納した値は、ブックを閉じたとき、あるいはVBA編集中にコードを実行し直した(リセットが発生した)ときに失われます。マクロを再度開いたときにも保持しておきたい値は、セルやレジストリなど、ブックの外に永続的に保存する仕組みと組み合わせる必要があります。
4-1. 「グローバル」の範囲は、あくまで1つのブックの中
ここで注意しておきたいのが、VBAのPublic変数は「そのブック(VBAプロジェクト)の中でグローバル」なのであって、他の別のExcelブックからは直接参照できないという点です。「グローバル」という言葉の響きから、パソコン全体やすべてのExcelファイルで共有されると誤解されがちですが、実際の有効範囲はあくまで1つのブックの中に閉じています。
複数のブックをまたいで値を共有したい場合は、共通の設定を記載した別ファイルを参照する、あるいは共通の処理をまとめたアドイン(複数のブックから読み込める拡張ファイル)を用意するといった、別の工夫が必要になります。
05 MAINTENANCE RISK 【独自】なぜグローバル変数の乱用が「保守不能マクロ」を生むのか 便利さの裏にある、見えにくいリスク
ここからは、この記事の独自セクションです。グローバル変数は便利な仕組みですが、使い方を誤ると業務マクロの保守性を大きく損ないます。実際によくあるパターンを整理します。
5-1. 「どこで値が変わったか分からない」問題
グローバル変数は、ブック内のあらゆるプロシージャから書き換えることができます。これは裏を返せば、ある変数の値がおかしくなったとき、原因となる書き換え箇所を特定するのに、すべてのプロシージャを調べる必要があるということです。プロシージャの数が増えるほど、この調査コストは膨れ上がります。
5-2. 「なんとなく全部Public」がもたらす連鎖的な不具合
「とりあえず動けばいい」という発想で、本来ローカル変数で十分な値まですべてPublicにしてしまうケースがあります。この状態で複数のマクロを並行して改修すると、あるマクロの修正が、意図せず別のマクロの動作に影響するという連鎖的な不具合が発生しやすくなります。
5-3. 属人化した「暗黙のルール」への依存
グローバル変数の運用ルール(どの変数が何を意味するか、いつ初期化すべきか)が、作成した担当者の頭の中にしかドキュメント化されていないケースは非常に多く見られます。担当者が異動・退職すると、残されたマクロは誰も安全に触れない「ブラックボックス」と化してしまいます。
とりあえず全部
Publicで宣言
運用ルールが
担当者の頭の中に
異動・退職で
引き継ぎ情報が消失
誰も安全に
触れないマクロに
本記事の事例は一般的に起こりうるパターンの説明であり、特定の企業事例を示すものではありません。マクロの規模・運用体制によって発生条件や影響度は異なります。
5-4. 「設計時点の一手間」と「保守不能後の作り直し」のコスト差
グローバル変数の設計を丁寧に行うコストと、保守不能になってから作り直すコストには、大きな差があります。以下は、説明のための概算イメージです。
| タイミング | 主な作業内容 | 影響範囲(概算イメージ) |
|---|---|---|
| 作成時(命名規則・用途を整理) | 変数名・コメントの整理のみ | 数十分程度 |
| 引き継ぎ時(ドキュメント未整備) | 既存コードの読み解き・仕様の逆算 | 数時間〜1日程度 |
| 保守不能後(原因不明の不具合が頻発) | マクロ全体の再設計・作り直し | 数日〜数週間規模になることもある |
この表からも分かる通り、「変数の命名規則を統一し、用途をコメントで残しておく」という一手間は、後々の大規模な作り直しを防ぐための、極めて費用対効果の高い投資だと言えます。
06 GENAI CASE 【独自データ】GENAI実運用:AIによるVBAマクロのレビュー・保守 Claude Codeが業務マクロの保守をどう支援しているか
弊社(株式会社GENAI)では、Claude Max 20xプラン(月額$200・約30,000円)を契約し、営業・広告運用・記事制作・経理・秘書業務まで社内のあらゆる業務でClaude Codeを活用しています。この中には、既存のExcelマクロのレビュー・保守業務も含まれます。
| 項目 | 内容 |
|---|---|
| 契約プラン | Claude Max 20x(月$200 / 約30,000円) |
| 利用開始 | 2025年後半〜 |
| 対象業務 | 既存VBAマクロの動作確認・改修、WordPress/LP制作、スクリプト書き捨てなど開発全般 |
弊社の実運用の肌感としては、属人化しがちなマクロの中身をAIに読み解かせることで、「このグローバル変数はどこで使われているか」「どのプロシージャに影響するか」といった調査作業が大幅に効率化されています。従来は担当者の記憶や手作業でのコード追跡に頼っていた工程を、AIが数分で整理してくれる感覚です。
これらは弊社の肌感・概算に基づくものであり、業種・業態・マクロの規模によって効果は変動します。「業界平均」ではなく、あくまで弊社1社の実運用データとしてご参照ください。
6-3. 小さく始めて、リスクの高いマクロから順に着手する
弊社がAIとの協働でマクロの保守を進める際も、「すべてのマクロを一斉に見直す」ことは狙いません。最初は、担当者が一人しか把握していない、あるいは業務影響の大きいマクロを1つだけ選んで、AIによる棚卸しを行うところから着手します。
この進め方であれば、限られた工数の中でも、最もリスクの高い箇所から確実に手当てしていくことができます。焦って一度にすべてを整理しようとすると、かえって業務が止まってしまうリスクがあるため、優先順位をつけて着実に進めることが成功のポイントです。
6-4. 棚卸しで実際に見えてくること
AIによるマクロの棚卸しを行うと、多くの場合、次のような発見があります。
こうした発見自体が、そのマクロの保守リスクを可視化する第一歩になります。棚卸しの結果を踏まえて、優先度の高いものから少しずつ整理していくことで、無理なくマクロの保守性を改善していくことができます。
07 HOW TO INSTRUCT AI 非エンジニアがAIにマクロ開発・保守を任せる3つのコツ VBAを書けなくても、正しく要件を伝えれば十分に使いこなせる
VBAのコードを自分で書けるようになる必要はありません。重要なのは、「このマクロに何をしてほしいか」「何を変えてはいけないか」を具体的に言語化する力です。ここでは非エンジニアでも実践できる3つのコツを紹介します。
7-1. 【コツ1】「既存の動作は変えたくない」ことを明示する
既存マクロの改修をAIに依頼する際、「この機能を追加して」とだけ伝えると、意図せず既存の動作まで変更されてしまうことがあります。「今動いている部分の挙動は変えずに、この機能だけ追加してほしい」と変更してよい範囲を明示することが重要です。
7-2. 【コツ2】マクロ全体のコードをそのままAIに渡す
一部分だけを切り出してAIに見せると、グローバル変数が他の部分でどう使われているかが分からず、見当違いの改修提案につながることがあります。可能な限りマクロ全体のコードを渡し、「このグローバル変数は他のどこで使われているか教えて」と聞くところから始めるのが安全です。
7-3. 【コツ3】改修結果を必ず本番データの前にテストする
AIによるマクロ改修は非常に精度が高くなっていますが、「一発で完璧に動く」と過信するのはリスクがあります。特に経理・在庫など実データに影響するマクロについては、改修後のコードを本番データに適用する前に、複製したテスト用データで動作確認する工程を必ず設けてください。
マクロの改修・動作確認は、必ず複製したテスト用データで行い、原本の業務データを直接使わないようにしてください。グローバル変数が関わる不具合は、想定外の箇所にまで影響が及ぶことがあります。
08 CONCLUSION まとめ ── 変数の設計は、マクロの寿命を左右する グローバル変数の正しい理解は、業務マクロを長く安全に使う土台になる
この記事では、ExcelVBAのグローバル変数(Public変数)の基本から、Dim・Staticとの違い、実践的な使いこなしテクニック、Excelの「名前の定義」との違い、そして「なぜグローバル変数の乱用が保守不能マクロを生むのか」という実務目線での重要性までを解説しました。最後にポイントを振り返ります。
グローバル変数というキーワードを覚えることが目的ではありません。この記事で本当にお伝えしたかったのは、「便利な仕組みほど、使い方のルールを最初に決めておくことが長く安全に使い続けるための鍵になる」という発想です。この発想さえ持てれば、コードが書けなくても、AIに的確な指示を出せるようになります。
特に、担当者の異動や退職によって「誰も中身を分からないマクロ」が社内に眠っているという状況は、多くの企業で共通して見られる課題です。放置すればするほど棚卸しのハードルは上がっていくため、思い立ったタイミングで着手することが、結果的に最も低コストな選択になります。
属人化した業務マクロの棚卸し・保守設計を、AI鬼管理が一緒に進めます
グローバル変数の整理のような細かい作業から、マクロ全体の保守体制づくりまで。
弊社の実運用ノウハウをベースに、個別に導入設計のご相談を承ります。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
AI活用を自社で回せるようになりたい方へ
AI鬼管理
Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。
よくある質問
Q. グローバル変数はいくつまで宣言できますか?
A. 技術的な上限は非常に大きく、実務で問題になることはほぼありません。ただし、数が増えるほど管理が難しくなるため、実務上は「本当に共有が必要な値だけに絞る」ことが推奨されます。目安として、数十個を超えてくるようであれば、設計を見直すサインだと捉えるとよいでしょう。
Q. Public変数とPublic Constの使い分けの基準は?
A. 処理の途中で値が変わる可能性があるならPublic変数、実行中に変わることのない固定値であればPublic Constを使います。税率や対象シート名のように「うっかり書き換えられると困る値」は定数にしておくと安全です。
Q. グローバル変数の値が急に消えることがあるのはなぜですか?
A. VBA編集中にコードの実行がリセットされたり、ブックを閉じたりすると、Public変数の値は失われます。マクロを再度開いたときにも保持しておきたい値は、セルやテキストファイルなど、ブックの外に保存する処理と組み合わせる必要があります。
Q. クラスモジュールでもPublic変数は使えますか?
A. 使えますが、標準モジュールで宣言する一般的なグローバル変数とは扱いが異なります。クラスモジュール内のPublic変数は、そのクラスのインスタンス(オブジェクト)ごとに独立した値を持つ「プロパティ」に近い性質になります。
Q. 既存のマクロにグローバル変数が多すぎる場合、どう整理すればいいですか?
A. まずはすべてのグローバル変数を洗い出し、それぞれ「どこで使われているか」「本当にグローバルである必要があるか」を確認するところから始めます。AIにコード全体を読ませて一覧化してもらうと、この棚卸し作業を効率的に進められます。
Q. 非エンジニアでもAIにマクロの改修を任せられますか?
A. 任せられます。「既存のこの動作は変えたくない」「この機能を追加してほしい」といった要望を日本語で伝えれば、AIが既存コードを踏まえた改修案を提示してくれます。ただし、改修結果は必ずテスト用データで確認する工程を残すことが重要です。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
Claude Code を業務に落とし込む
専門研修コース一覧
受講者本人の業務を題材に、「使いこなせる」状態になるまで伴走する研修プログラム。1対1特化型・ハンズオン・法人講座の3コースを展開中。業務特化・実装まで踏み込むタイプのClaude Code研修です。
研修コース一覧を見る →AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。




