Excel VBAでプログラミングを記述する際、各サブルーチン単位で文頭に表示されている「Private Sub」「Private Function」「Function」。
SubとFunctionって結局どんな風に使い分けるんですか?
SubとFunctionは値が持てるか、持てないか?なんですが、分かりますか?
え、え、えっと~。。。
それでは、これらをどのように使い分けていくのかわからない方のために、各々の使い方とこの3つの違いについて詳しく解説していきましょう。
「Private Sub」の使い方
Private Subとは・・・・
Private自体の意味としても、「個人的な」なんて意味があります。IT用語としても「狭い範囲」という意味で使われています。
Privateは、同一Module内でしか呼び出すことができないサブルーチンのことを言います。またSubは、値を持てないことを意味します。
Module1内にあるサブルーチンから、別のModule2にあるサブルーチンをCall文で呼び出した場合、位置がModule2に移動してしまいます。
このタイミングでModule1上で入っていた変数の中身は全てなくなり、解放されてしまいます。
これが「Private」の意味を示します。
※Privateの場合は、ModuleがCall文などで別のModuleに移動してしまうと、その変数の中に入れたデータがクリアされてしまうのが、Privateで宣言した場合です。
「Private Function」の使い方
これに対して、もう一つ「Private Function」というのがあります。
Private Functionとは・・・・
これは何を示すのかというと、このFunctionと表記すると「サブルーチン自体に値をもつことができる」ということです。
下記をご確認下さい。
サブルーチンとは、この赤枠で言えば、「TestF」のことです。線で区切られている一つ一つがサブルーチンです。
このTestFが横のInteger型の変数として値を持てます。
【Functionのサブルーチンについて】
TestFそのものを変数にすることができ、Integer型で値を出力することができます。最後のブレークポイントでintCodeからTestFに値を引き渡しています。
逆に、その上のサブルーチンの中でSubと表示されているものには、横に変数の型の表示がないのが特徴です!
「Function」の使い方
Functionとは・・・
「Public Function」の省略形で、使い方は、上記で説明した「Private Function」と同じです。
但し、Private Functionとは、下記の点が異なります。
<Functionの特徴>
- どこのModuleからでも呼び出すことができる
- そのサブルーチン自体に値を返すことができる
という利点があります。
3つに共通することとは
この上記3つに共通することが一つだけあります。それは、こちらをご覧ください。「Private Sub」「Private Function」「Function」の3つはマクロ名には表示されません。
サブルーチン自体に値を持てることができる「Function」「Private Function」のように、「Function」という文字が記述されているものは、マクロ名としてもつことはできません。
又「Private Sub」というものに関しても同様マクロ名には表示されません。表示されるのは、「Sub」「Public Sub」のみとなります。覚えておきましょう。
「Private sub」と「Private function」「Function」の3つの違いとは
それでは、この3つの違いについて詳しく解説していきましょう。
まず「PrivateとPublic」「SubとFunction」2つの分解して考えましょう。
「PrivateとPublic」の違い
「PrivateとPublic」には下記のような違いがあります。
宣言名 | 特徴 |
Private | そのModule内でしか使えない |
Public | 色々な所から呼び出せる マクロ名に表示される |
「SubとFunction」の違い
また「SubとFunction」には下記のような違いがあります。
宣言名 | 特徴 |
Sub | そのサブルーチン自体に値が持てない |
Function | そのサブルーチン自体に値が持てる |
またこれに対して、「Functioin」という文字が記述されているものに関しては、このサブルーチン自体に値をもつことができることを意味します。
<SubとFunctionの違いは?>
・値を持てるか持てないか!
「SubとFunction」の違いは「値を持てるか持てないか」
上記の内容をかみ砕いてもう少し解説しておきましょう。
上から2つ目のサブルーチン「Sub Main」をご覧下さい。
このサブルーチンを最初に実行すると、途中に「Call TestF」があります。ここに来ると、下赤枠のサブルーチンにジャンプして処理が走ります。
つまり、「ここのサブルーチンに行ってね。」となるわけですが、この中に処理が流れると、intCodeで「3*2」の掛け算行われ、またTestFのその答え6が戻るように記載されています。
この計算が終わると、また「Sub Main」のサブルーチンに移動して、処理が終わります。
つまり、この結果6は変数TestFに引き渡されているので、Sub Mainの中でもTestFという値に6が入ったまま、その変数を利用できるということです。
これが、上記で説明した「値を持てるか持てないか」です。
※Functionがつくものには、この名称自体を変数にすることができます。
これらが理解できれば3つの違いがおのずと分かってくるかと思います。
結局どれを使えば良いの?「Public」と同等のもの
結局どれを使えばよいのか?というところに行きつくかと思いますが、
ここまで聞いてあまりよくわからなかった場合には、「Public Function」「Function」「Sub」を使用していれば、基本的に問題ありません。
「Private」を使用するのは、メモリー容量を低減するために利用されます。
なので、まずは記述を学びたいという方であれば、上記3つを使用することをおすすめします。またもう少し理解を深めたい方は、下記もみておきましょう。
【Excel-VBA】「Public sub」と「Private sub」と「Sub」の3つの違いとは
続きを見る
おすすめExcelVBA参考書のご案内
このように、ExcelVBAについても色々な学ぶには、参考書などなしで習熟するとかなり時間を要します。上記のようなExcelVBAに関してもっと調べる環境があったらと感じる方も少なくありません。
初心者向けVBA教材
そこで、おすすめなのが私自身もVBAやエクセル関数を利用する際に今でもよく利用している下記参考書がかなり有益な情報が入っています。しかもサンプル動画や電話環サポート付きという優れもの。
7500万部売れていて、かなり実用性のある内容が盛り込まれているので、よくExcelVBAなどを利用される際には、こちらの教本が一冊あるだけで色々な構文や基本的なVBAの記述方法に対しても汎用性が効くようになるので、ぜひ上手に活用してみて下さい。
中上級者向けVBA教材
そして、こちらがVBAの基礎をある程度理解された方であれば、実践ベースでかなり作り込める内容が盛り込まれているので、逆引きに使ったり、かなり発展的なVBAコーディングを記述できるようになります。
ちなみに私はどちらとも持っており、今でもちょくちょく活用しています。
まとめ
このように、3つの違いは、メモリー容量の消費量が多きく関わってきます。
特にシステムが大きなものであればあるほど、そのメモリー使用量が肥大化するため、できるだけPrivateを活用しながら、メモリーを消費しないプログラミンギ技術が要求されます。
しっかり活用方法を覚えて、上手にプログラミングしていきましょう。
【人気関連記事】
✅【Excel-VBA】Private変数とPublic変数との違いとは
✅【Excel-VBA】「Public sub」と「Private sub」と「Sub」の3つの違いとは
✅【Excel-VBA】For文とDo Untillの違い~処理が速いのはどっち?
✅【VBA】PowerPointの表・テキストを操作しよう(データセット・背景色・フォント)
✅【Excel-VBA】デバッグってなに?覚えておきたい5つのデバッグ機能