「アフィリエイト広告を利用しています」

Excel-VBA プログラミング

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

Excel VBAでプログラミングを記述する際、各サブルーチン単位で文頭に表示されている「Private Sub」「Private Function」「Function」。

 

悩む女性1

SubとFunctionって結局どんな風に使い分けるんですか?

SubとFunctionは値が持てるか、持てないか?なんですが、分かりますか?

管理者
悩む女性1

え、え、えっと~。。。

 

それでは、これらをどのように使い分けていくのかわからない方のために、各々の使い方とこの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を活用しながら、メモリーを消費しないプログラミンギ技術が要求されます。

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

 

 

 


➡【月3万稼げる!ブログの始め方】


ブログやアフィリエイトでお悩みの方は、無料相談いつでも受け付けていますので、お問い合わせからいつでもお気軽ご連絡ください^^


→当ブログをフォローして頂けると励みになります。 


楽天おすすめ商品はこちら

  • この記事を書いた人
  • 最新記事

みやさん

【サイト運営者・著者】みやさん 【実績】ライター歴7年 ブログ歴3年⇒2万PV推移中 【実務】現役プログラマー|【発信内容】▶副業やブログの始め方 ▶ライターとしてのノウハウ ▶生活の有益情報を発信しています。皆様の生活改善にご利用ください。

Copyright© 副業ケアネット , 2024 All Rights Reserved Powered by AFFINGER5.