【Excel-VBA】「Private sub」と「Private function」「Function」の違いとは

Excel VBAでプログラミングを記述する際、各サブルーチン単位で文頭に表示されている「Private Sub」「Private Function」「Function」。しかし、これらをどのように使い分けていくのかわからない方のために,各々の使い方とこの3つの使い分け方について詳しく解説していきましょう。

「Private Sub」の使い方

Private Subとは・・・・

同一Module内でしか呼び出すことができないサブルーチンのことを言います。

Module1内にあるサブルーチンから、別のModule2にあるサブルーチンをCall文で呼び出した場合、位置がModule2に移動してしまいます。

このタイミングでModule1上で入っていた変数の中身は全てなくなり、解放されてしまいます。

これが「Private」の意味を示します。

 

「Private Function」の使い方

これに対して、もう一つ「Private Function」というのがあります。

Private Functionとは・・・・

これは何を示すのかというと、このサブルーチン自体に値をもつことができるということです。

下記をご確認下さい。

 

【Functionのサブルーチンについて】

TestFそのものを変数にすることができ、Integer型で値を出力することができます。最後のブレークポイントでintCodeからTestFに値を引き渡しています。

「Function」の使い方

Functionとは・・・

「Public Function」の省略形で、使い方は、上記で説明した「Private Function」と同じです。Private 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が付くもの :同一Module内でしか使用できない
  • Publicが付くもの、もしくは無いもの:どのModuleからでも呼び出せる

 

「SubとFunction」の違い

  • Fuctionが付くもの :そのサブルーチンの名称自体を変数にできる(値を持てる)
  • Subが付くもの   :値を持てない

 

またこれに対して、「Functioin」という文字が記述されているものに関しては、このサブルーチン自体に値をもつことができることを意味します。

※Functionがつくものには、この名称自体を変数にすることができます。

これらが理解できれば3つの違いがおのづと分かってくるかと思います。

 

結局どれを使えば良いの?

結局どれを使えばよいのか?というところに行きつくかと思いますが、

ここまで聞いてあまりよくわからなかった場合には、「Public Function」「Function」「Sub」を使用していれば、基本的に問題ありません。

「Private」を使用するのは、メモリー容量を低減するために利用されます。なので、まずは記述を学びたいという方であれば、上記3つを使用することをおすすめします。

 

まとめ

このように、3つの違いは、メモリー容量の消費量が多きく関わってきます。特にシステムが大きなものであればあるほど、そのメモリー使用量が肥大化するため、できるだけ、Privateを活用しながら、メモリーを消費しないプログラミンギ技術が要求されます。

しっかり活用方法を覚えて、上手にプログラミングしていきましょう。