VBAのグローバル変数 (Public)とは?基本から応用まで徹底解説!

当ページのリンクには広告 (Amazonアソシエイト含む) が含まれています。
グローバル変数って何?

「VBAの、グローバル変数って何??」
このように悩んだことはありませんか?


・グローバル変数は、通常の変数と何が違うの?
 どうやって使えばいいのか?わからない

その場合は、VBAの「グローバル変数」を
使用すると解決します!


この記事では、エクセルVBAのグローバル変数の使い方について詳しく説明します。

基本的な使い方から、メリット・デメリット、注意点まで、初心者でもすぐに実践できる内容です。

ぜひ最後までお読みください。


【 この記事の概要 】

よく使う度
難しさ
覚えておくと安心度

VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?

そんな方には、UdemyのVBA講座がおすすめです。

動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!

多彩な講座から自分に合った講座を探そう!
UdemyでVBAを検索
UdemyでVBAを検索 画像出典:Udemy

\  自分のペースで学べるVBA講座はこちら  /

目次

この記事を見て「できるようになる」こと

この記事を読めば、以下のことができるようになります。

Excel VBAにおける「変数」とは?

VBAにおける変数は、データを一時的に記憶するための箱のようなものです。
プログラム内でデータを扱う際に、変数を使うことでデータを柔軟に操作できます。

引用元:エクセルVBAで変数を使いこなす方法 | 変数の基本から実践まで
変数のイメージ

変数の基本についてもっと知りたい方は、以下の記事で詳しく解説しています。

こちらもぜひご覧ください。

あわせて読みたい
エクセルVBAで変数を使いこなす方法 | 変数の基本から実践まで 「VBAの勉強を始めたものの、変数の意味がよく分からない…」このように悩んだことはありませんか? ・変数ってよく聞くが結局何なの?・変数で型を指定する理由が分から...

VBAの「変数」の種類をご紹介

VBAには、さまざまな種類の変数があります。

以下に代表的な変数を紹介します。

種類説明
通常の変数データを一時的に記憶するための箱。
スコープは宣言されたプロシージャ内のみ。
グローバル変数プロジェクト全体で使用可能な変数
モジュールの先頭で宣言され、すべてのプロシージャからアクセス可能。
大規模なプログラムでデータを共有するのに便利。
静的変数プロシージャの間で値を保持する変数。
Staticキーワードを使用して宣言され、プロシージャが終了しても
値が保持される。
計算の状態を保持したい場合に使用。
オブジェクト変数オブジェクトを参照するための変数。
Setステートメントを使用してオブジェクトを代入し、プロパティや
メソッドにアクセス可能。
エクセルのワークシートやセルなどの操作に使用。

本記事では、グローバル変数について詳しく解説します。

スポンサーリンク

Excel VBAにおける「グローバル変数 (Public)」とは?

VBAのグローバル変数は、Publicキーワードを使用して宣言され、モジュール全体、さらにはプロジェクト全体で利用できる変数です。

これにより、異なるプロシージャやモジュール間でデータを共有することが可能です。

また、セルに一旦データを書き込む必要がないため、直接プログラム内でデータを保持・共有でき、効率的なデータ管理が可能です。


グローバル変数とはどんなもの?

「通常の変数」と「グローバル変数 (Public)」の違い

VBAで使用される通常の変数は、特定のプロシージャ内でのみ使用される変数です。

一方、グローバル変数 (Public) は、モジュール全体やプロジェクト全体で使用される変数です。

これにより、複数のプロシージャやモジュール間でデータを共有することができます。

種類説明適用範囲 (スコープ)有効期間
通常の変数特定のプロシージャ内でのみ
使用される変数。
宣言されたプロシージャ内プロシージャが
実行されている間のみ
静的変数プロシージャが終了しても
値を保持する変数。
宣言された
プロシージャ内
プロシージャが
終了しても値が保持される
グローバル変数モジュール全体やプロジェクト
全体
で使用される変数。
宣言されたモジュール全体
またはプロジェクト全体
モジュールを
閉じるまで

VBAの「グローバル変数 (Public)」の宣言方法

VBAのグローバル変数を宣言するには、Publicステートメントを使用します。

通常の変数とは異なり、モジュールの先頭で宣言する必要があります。

以下に具体的な宣言方法を示します。


Public変数の宣言
設定解説
  • 変数名
    • 任意の名前で、宣言した変数に付ける識別子を指定します。
      プログラム内でこの名前を使って変数にアクセスします。
      変数名には、他の変数や予約語と重複しないような名前を選びます。
  • 変数の型
    • 変数に格納されるデータの種類を指定します。
      たとえば、整数を扱いたい場合は Long 型、文字列を扱う場合は String 型を指定します。
      これにより、プログラムの効率やメモリ使用が最適化されます。

グローバル変数 (Public)を宣言する場所

グローバル変数を宣言する際には、Publicステートメントを使用します。

宣言する場所については、通常の変数とは異なり「モジュールの先頭」で宣言します。

グローバル変数 (Public)の宣言場所について解説

グローバル変数 (Public)の宣言例

Public Num As Long

このコードは、変数「Num」を長整数型のグローバル変数として宣言します。

より詳しい情報は、Microsoft公式の変数を宣言するを参照してください。

VBAにおける「変数」のスコープとは?

VBAにおける変数のスコープとは、変数が使用できる範囲のことを指します。

「通常の変数」と「グローバル変数 (Public)」では、スコープが異なります。
このスコープを理解することは、VBAを効率的に設計するうえで非常に重要です。

スコープには、プロシージャ内のみで有効なローカル変数と、モジュールやプロジェクト全体で利用できるVBAのグローバル変数があります。

Publicステートメントを使って宣言されたグローバル変数は、プロシージャ間でデータを共有する際に特に便利です。

変数の有効範囲について
  • ローカル変数
    • 特定のプロシージャ内でのみ有効な変数。
  • グローバル変数 (Public)
    • モジュールやプロジェクト全体で利用できる変数。

スコープの具体例をご紹介

次のようなコード例を使って、VBA変数のスコープについてさらに解説します。
このコードでは、複数のプロシージャを順番に実行し、変数の動作とスコープを確認します。

このコードを、「プロシージャ1」 ⇒ 「プロシージャ2」 ⇒ 「プロシージャ3」 と順番に実行した場合、どのようになるでしょうか?


グローバル変数 (Public)のスコープについて解説
処理結果
  1. 「プロシージャ1」を実行した結果
    • 「変数 : Proc_1」は、「10」が格納されます。
    • 「グローバル変数 : Module_1」は、「100」が格納されます。
       
    • 「プロシージャ1」の処理が完了後は、以下の通りとなります。
      • グローバル変数:Module_1」は「100」を保持します。
      • 「変数:Proc_1」に格納した「10」は値が破棄されます。
         
  2. 「プロシージャ2」を実行した結果
    • 「変数:Proc_2」は、「20」が格納される。
    • 「グローバル変数:Module_1」は、「200」に変更され格納される。
      ※今回の数値「100」と、先ほど保持された「100」の合計を計算。
       
    • 「プロシージャ2」の処理が完了後は、以下の通りとなります。
      • グローバル変数:Module_1」は「200」を保持します。
      • 「変数:Proc_2」に格納した「20」は値が破棄されます。
  3. 「プロシージャ3」を実行した結果
    • 「グローバル変数:Module_1」は、「230」に変更され格納される。
      ※今回の数値「30」と、先ほど保持されたModule_1で保持した「200」の合計を計算。
    • 「プロシージャ3」の処理が完了後は、以下の通りとなります。
      • グローバル変数:Module_1」は「230」を保持します。

グローバル変数の有効期間

このように、VBAのグローバル変数 (Public)はモジュール全体、さらにはプロジェクト全体で利用でき、プログラムが実行されている限り値が保持されます。

モジュールが閉じられるまで有効なため、プログラムの複数箇所でデータを共有する際に非常に便利です。

VBAのグローバル変数をリセットする方法

VBAでグローバル変数をリセットすることは、予期しないデータ残りを防ぎ、プログラムの安定性を保つために重要です。

特に、大規模なプログラムや複数のプロシージャでグローバル変数を使用している場合、適切なタイミングで変数をリセットしないと、誤ったデータを参照するリスクがあります。

グローバル変数をリセットする基本方法

グローバル変数のリセットは、通常の変数と同様に、必要なタイミングで変数にデフォルト値を再代入することで実現できます。

たとえば、数値型の変数であれば「0」を、文字列型であれば空文字列(””)を代入してリセットします。

Public Module_1 As Long
Public Name_1 As String

Sub リセットプロシージャ()
    Module_1 = 0      '// 数値型のグローバル変数をリセット
    Name_1 = ""       '// 文字列型のグローバル変数をリセット
End Sub

プログラム終了時の自動リセット

VBAプログラムの実行終了時にグローバル変数をリセットする場合、終了処理を行うプロシージャ内でリセット操作を組み込むと、次回プログラム実行時に誤った値が参照されるのを防ぐことができます。

Sub プログラム終了処理()
    '// ここで変数のリセットを行う
    Module_1 = 0
    Name_1 = ""
End Sub

リセットのタイミングとベストプラクティス

  • プログラムの開始時や終了時、必要に応じてリセットを行うことで、予期しない値の保持を防ぎます。
  • また、リセットの必要が生じる条件を明確にして、必要最小限の場所でリセットすることがベストプラクティスです。これにより、プログラムの安定性が向上します。
スポンサーリンク

VBAのグローバル変数 (Pubilc)を使用する場合の注意ポイント

VBAでグローバル変数 (Public) を使用する場合、便利ではあるものの、適切な管理が重要です。

グローバル変数を乱用すると、プログラムが複雑になりやすく、デバッグや保守が困難になることがあります。

以下に、グローバル変数を使用する際の重要な注意点を解説します。

グローバル変数の使用を最小限に抑える

グローバル変数は、プログラム全体でアクセス可能であるため、便利に感じるかもしれません。

しかし、頻繁に使用するとプログラムの可読性が低下し、どのプロシージャで値が変更されたか追跡が難しくなります。

推奨方法
  • 可能な限りローカル変数を使用し、グローバル変数の使用は本当に必要な場合に限定しましょう。
  • データの共有が必要な場合でも、プロシージャ間の引数の受け渡しや、セルに値を一時的に保存する方法を検討してください。

グローバル変数の競合リスクに注意する

グローバル変数は、複数のプロシージャで同時にアクセスされる可能性があり、意図しない競合が発生するリスクがあります。

例えば、一つのプロシージャがグローバル変数を更新している最中に、他のプロシージャがその値を参照すると、予期しない動作が起こることがあります。

対策
  • グローバル変数にアクセスするタイミングを慎重に設計し、意図しない変更が加わらないようにしましょう。
  • 必要に応じてロック機構を導入し、複数のプロシージャが同時に同じ変数を操作するのを防ぎます。

一貫した命名規則を導入する

グローバル変数は、プログラムのあらゆる場所で参照される可能性があるため、明確で一貫した命名規則を設けることが重要です。

他の変数と区別しやすいように、グローバル変数には特別な接頭辞や命名パターンを採用することを推奨します。

対策
  • グローバル変数には「g_」や「Global_」といった接頭辞を付けることで、すぐにグローバル変数であることが分かるようにしましょう。

グローバル変数の初期化とリセット

VBAのグローバル変数は、プログラム全体で使用されるため、初期化とリセットのタイミングを適切に管理しなければなりません。

実行中にグローバル変数の値が変更された場合、その値が意図しないまま他の処理で使用される可能性があります。

推奨方法
  • グローバル変数の初期化やリセット処理を明確に行い、誤った値が残らないように注意します。
  • 初期化・リセットのタイミングはプログラム全体で統一し、予期しない不具合を防ぎましょう。
スポンサーリンク

VBAのグローバル変数 (Public)の使用例をご紹介

ここでは、具体的なコード例を通じてグローバル変数の使い方を紹介します。

以下に紹介する使用例は、すべてコピペしてすぐに実行できるコードです。
気になる例は、ぜひご覧いただき、実際に実行してみてください。

VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?

そんな方には、UdemyのVBA講座がおすすめです。

動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!

多彩な講座から自分に合った講座を探そう!
UdemyでVBAを検索
UdemyでVBAを検索 画像出典:Udemy

\  自分のペースで学べるVBA講座はこちら  /

使用例1: グローバル変数を使用してデータを共有する

複数のプロシージャでデータを共有する簡単な方法を紹介します。

コード例

'// グローバル変数の宣言
Public Num As Long

Sub 初期化()
    Num = 10
End Sub

Sub 表示()
    MsgBox "Numの値は " & Num & " です。"
End Sub

処理結果

使用例1の処理結果

コードの動作概要

STEP
グローバル変数を宣言する

Publicキーワードを使って、モジュール全体で使用可能なグローバル変数 Num を宣言します。
この変数は、他のプロシージャからも参照・変更が可能です。

STEP
グローバル変数に値を代入する

「初期化」サブルーチンで、グローバル変数 Num に「10」という値を代入します。

STEP
グローバル変数の値を表示する

「表示」サブルーチンで、MsgBox関数を使ってグローバル変数 Num の値をメッセージボックスに表示します。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Public Num As Long
    • この行では、グローバル変数「Num」を宣言しています。
      Public キーワード」を使うことで、この変数はモジュール全体、または他のモジュールでも使用可能になります。
      「Num」は 長整数型 (Long) で宣言され、整数を格納することができます。
      グローバル変数の特徴として、1度代入された値は、モジュールが閉じられるまでどこでも使えるという利点があります。
  2. Sub 初期化()
    Num = 10
    End Sub
    • このブロックは、「初期化」という名前のサブルーチン(操作のまとまり)を定義しています。
      このサブルーチンでは、グローバル変数「Num」に 10 という値を代入しています。
      この「初期化」サブルーチンを呼び出すことで、グローバル変数「Num」に 10 をセットでき、どのプロシージャからでもその値を参照できます
      サブルーチンは Sub で始まり、End Sub で終了します。
  3. Sub 表示()
    MsgBox “Numの値は ” & Num & ” です。”
    End Sub
    • このブロックでは、「表示」という名前のサブルーチンを定義しています。
      このサブルーチン内で MsgBox関数を使用し、メッセージボックスに「Num」の値を表示します。
      MsgBox は画面にポップアップを表示するための関数です。
      ここでは、文字列「Numの値は 」とグローバル変数「Num」の値を結合して、例えば「Numの値は 10 です。」というメッセージが表示されます。
      このサブルーチンを呼び出すことで、現在の「Num」の値を確認できます。

このようにグローバル変数を使用すると、複数のプロシージャ間で変数を共有できるようになります。

使用例2: グローバル変数を使用してセルの色を変更する

グローバル変数を使って特定の設定を変更し、他のプロシージャでもその設定を変更・使用する方法を紹介します。

たとえば、色やフォントの設定などを変更した後、それを他のプロシージャでも適用します。

コード例

'// グローバル変数の宣言
Public FontColor As Long


Sub 初期設定()
    '// 初期値を設定
    FontColor = RGB(255, 0, 0) '// 赤色
End Sub


Sub フォント色変更()
    '// フォント色を青に変更
    FontColor = RGB(0, 0, 255) '// 青色
End Sub


Sub テキスト色を設定する()
    '// グローバル変数 FontColor を使用してセルのフォント色を変更
    Range("A1:A5").Font.Color = FontColor
End Sub

処理結果

使用例2: グローバル変数を使用してセルの色を変更するの処理結果

コードの動作概要

STEP
グローバル変数を宣言する

Publicキーワードを使って、モジュール全体で使用可能なグローバル変数 FontColor を宣言します。
この変数は、他のプロシージャからも参照・変更が可能です。

STEP
初期設定で色を指定する

「初期設定」サブルーチンでは、FontColor に赤色を設定します。

STEP
色の変更

「フォント色変更」サブルーチンを使って、FontColor を青色に変更します。

STEP
セルに色を適用する

「テキスト色を設定する」サブルーチンを使って、指定したセル範囲に、変数FontColor に格納された色を適用します。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Public FontColor As Long
    • この行では、グローバル変数「FontColor」を 長整数型 (Long) で宣言しています。
      Public キーワードを使用することで、この変数はこのモジュール内のすべてのプロシージャからアクセスできます。
      「FontColor」には RGB値 という色を表す数値が格納されます。
      この変数は他のサブルーチン内でも自由に使われるため、色の値を一括して管理できます。
  2. Sub 初期設定()
    ‘// 初期値を設定

    FontColor = RGB(255, 0, 0) ‘ 赤色
    End Sub
    • このブロックでは、「初期設定」という名前のサブルーチンが定義されています。
      このサブルーチンを実行すると、グローバル変数「FontColor」に「赤色 (RGB: 255, 0, 0)」が格納されます。

      ⇒ RGB関数は、赤、緑、青の値を使って色を生成します。
      この場合、「255, 0, 0」で「赤色」を作成しています。

      このサブルーチンを呼び出すことで、後にFontColor」が使われるたびに「赤色」が適用されるようになります。
  3. Sub フォント色変更()
    ‘// フォント色を青に変更

    FontColor = RGB(0, 0, 255) ‘ 青色
    End Sub
    • このブロックでは、「フォント色変更」という名前のサブルーチンが定義されています。
      このサブルーチンを実行すると、グローバル変数「FontColor」に「青色 (RGB: 0, 0, 255)」が格納されます。

      ⇒ RGB関数を使用して、「青色」を作成しています。
      この値をグローバル変数「FontColor」にセットすることで、後に使用される場所に「青色」が適用されるようになります。

      このサブルーチンを呼び出すことで、他のプロシージャでもグローバル変数「FontColor」を呼び出すたびに「青色」が適用されます。
  4. Sub テキスト色を設定する()
    ‘// グローバル変数 FontColor を使用してセルのフォント色を変更

    Range(“A1:A5”).Font.Color = FontColor
    End Sub
    • このブロックでは、テキスト色を設定する という名前のサブルーチンが定義されています。
      このサブルーチンを実行するとグローバル変数「FontColor」に設定されている色が、セル範囲「A1:A5」のフォント色として適用されます。
      Range(“A1:A5”).Font.Color はセル範囲「A1:A5」のフォント色を変更するためのプロパティで、その値に「FontColor」を指定することで、先に設定された色が適用されます。

      このサブルーチンを呼び出すと、事前に設定された「赤色」や「青色」が指定されたセル範囲に反映されます。

この例では、グローバル変数「FontColor」を使って、一度設定されたフォント色を複数のプロシージャで共有しています。
設定を変更すると、他のプロシージャでもその変更が反映されるため、同じ設定を何度も指定する必要がなくなります。

このように、設定値や状態を保持して複数のプロシージャで使用する用途としてグローバル変数がよく使われます。

スポンサーリンク

この記事のまとめ

この記事では、VBAにおけるグローバル変数の基本的な概念、使用方法、および注意点について詳しく説明しました。

以下に記事の重要なポイントをおさらいします。

ポイントのおさらい

さらに学ぶために

グローバル変数の基本を理解したら、次のステップとして他の変数の種類(静的変数やオブジェクト変数)についても学んでみてください。

これらの変数には特定の用途と利点があり、VBAでの効率的なプログラミングに役立ちます。

今回の記事を参考に、VBAでのグローバル変数の使用方法をマスターし、業務の効率化を図ってください。
グローバル変数を適切に使うことで、VBAプログラミングの力を最大限に発揮できます。

スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次