経緯
Excel VBAで複数のモジュールを使ってコードを整理していたところ、
「Module1で取得した変数を、Module2の処理でも使いたい」という場面がありました。
具体的には、Callステートメントを使って別のサブルーチンを呼び出し、そこで代入された値を、呼び出し元の処理内でも使いたいと考えました。
この方法について調査・検証を行い、最終的にグローバル変数を使うことで解決しました。
まずうまくいかなかったコード
以下は、最初に試したがうまくいかなかった例です。
' Module1
Sub MySub()
Dim myVar As String
myVar = "Hello, World!"
End Sub
' Module2
Sub MyOtherSub()
Call MySub()
MsgBox myVar
End Sub
この場合、MySub内で定義されたmyVarはローカル変数であり、MySubの処理が終わった時点で破棄されます。
そのため、MyOtherSubからmyVarを参照しようとすると、認識されずエラーとなります。
解決策:グローバル変数を使う
うまくいったのは、変数をモジュールの外側かつPublicで宣言する方法でした。
このようにすれば、全てのモジュールから変数にアクセスすることができます。
' Module1
' グローバル変数を定義する
Public myVar As String
Sub MySub()
myVar = "Hello, World!"
End Sub
' Module2
Sub MyOtherSub()
Call MySub()
MsgBox myVar
End Sub
このようにすることで、MySubで代入した値がMyOtherSubでも保持され、問題なく使用できるようになりました。
グローバル変数とは?
グローバル変数とは、モジュールの中でSubやFunctionの外にPublicキーワードを使って宣言された変数のことです。
これにより、プロジェクト内のすべてのプロシージャ・関数・モジュールからその変数を参照・操作することができます。
また、グローバル変数は、標準モジュール内で宣言する必要があります。 クラスモジュールやシートモジュールでは意図したとおりに機能しない場合があります。
注意点
・グローバル変数は非常に便利ですが、意図しない上書きやバグを招きやすいため、管理には注意が必要です。
・スコープが広いため、変数名の重複や衝突が発生しないよう、命名規則をしっかり設けることをおすすめします。
まとめ
VBAでモジュール間にまたがって変数を共有したい場合、グローバル変数を使うのが最も簡単で確実な方法です。
変数をPublicでモジュールの先頭に定義しておけば、どのサブルーチンからもその値にアクセスできます。
「Callステートメントで呼び出したサブルーチンで取得した値を、他モジュールで使いたい」というニーズに対して、非常に有効な手段です。
ぜひご自身のVBAプロジェクトにお役立てください。
副業から独立まで「稼げる」Webスキルを習得する(PR)
ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。
「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。
このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。
講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。
副業に特化した強み
- 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
- AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
- 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。
受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。
受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。
