Excel VBAを勉強していると、あるタイミングで必ず出てくるキーワードがあります。
それが 「Public」と「Private」 という宣言です。
最初のうちは、何となく見かけてもスルーしていて問題ないのですが、複数のマクロやモジュールを使うようになってくると、「これって何?」「どっちを使えばいいの?」と悩みがちになります。
今回は、この「Public」と「Private」の違いを、具体例とともに解説します。
それぞれの意味をざっくり把握しよう
まずは、「Public」と「Private」がどんな意味を持っているのかを、ざっくりと押さえておきましょう。
意味の違いは “使える範囲”
| 宣言方法 | 意味 | 使える範囲(スコープ) |
|---|---|---|
Private | 自分専用 | 宣言されたモジュール内だけ |
Public | みんなで使う | 他のモジュールからも使える |
誰かと共有する必要がなければ Private、他のところから呼び出したいときは Public を使う、という使い分けになります。
例1:Privateで定義されたプロシージャ
Private Sub HelloPrivate()
MsgBox "これはPrivateです"
End Sub
この HelloPrivate は、このモジュールの中からしか呼び出すことができません。
たとえば、別のモジュールからこのプロシージャを Call HelloPrivate として実行しようとしても、エラーになります。
例2:Publicで定義されたプロシージャ
Public Sub HelloPublic()
MsgBox "これはPublicです"
End Sub
この HelloPublic は、他のモジュールやフォームからでも呼び出せます。
「共通の処理」や「全体で使いまわしたい処理」は、Publicにしておくと便利です。
変数にも「Public」と「Private」がある
「Public」と「Private」は、プロシージャだけでなく、変数にも使えます。
ここでは、よくある「モジュールの上に変数を宣言する」例で比較してみます。
例3:Privateで宣言された変数
Private cnt As Long
Sub CountUp()
cnt = cnt + 1
MsgBox cnt
End Sub
このように書いた場合、変数 cnt は このモジュールの中だけで使える状態です。
別のモジュールで cnt = 0 などと書こうとしても、エラーになります。
例4:Publicで宣言された変数
Public userName As String
このように書けば、他のすべてのモジュールから userName を自由に参照・変更できます。
たとえば、
Sub GreetUser()
MsgBox "こんにちは、" & userName & "さん!"
End Sub
のように、別のモジュールに書いてあっても動作します。
どっちを使う?判断のポイントと実務での考え方
ここまでの話で、「Publicにしておけば全部使えて便利そう」と思うかもしれません。
でも、実務では何でもかんでもPublicにするのはおすすめできません。
Publicを使いすぎると…
- どこから呼ばれているか把握しにくくなる
- 名前の重複や競合でバグの元になる
- 保守やデバッグがややこしくなる
基本の考え方(迷ったらPrivate)
初めのうちは、次のように考えるのが安心です。
- そのモジュールの中だけで完結するなら、Private
- 複数のモジュールやフォームから使いまわしたいなら、Public
つまり、「特別な理由がないかぎり、Privateにしておく」ことをおすすめします。
実装するメリットと注意点
ここでは、「Public」や「Private」を適切に使うことで得られる実務的なメリットをまとめておきます。
メリット
- 処理の整理整頓がしやすくなる
- モジュール間の依存を減らせる
- 保守・修正時の影響範囲が限定できる
- 再利用性の高いコードを作れる
注意点
- Publicにした変数は、どこでも変更できるので注意
- Privateにしすぎると必要な場面で呼び出せなくなることもある
- 他の人とチームで使う場合は、共有ルールを決めておくと安心
まとめ:「公開するか、自分専用にするか」の違い
最後に要点を整理しておきましょう。
- 「Public」と「Private」は“どこから使えるか”を決めるキーワード
- プロシージャにも変数にも使える
- 迷ったら、基本はPrivateにしておけばOK
- Publicは「みんなで使う処理・値」にだけ使う
- 適切に使い分ければ、マクロの保守性が格段に上がる
特にチームや複数人でマクロを扱うような場面では、この違いを理解しておくことがとても重要です。
あなたのマクロがよりわかりやすく、使いやすくなる第一歩として、ぜひ「Public」と「Private」の違いをおさえておきましょう。
