VBAの勉強を進めるとFunctionプロシージャとSubプロシージャの使い分けに悩まれると思います。
そこで今回は、VBAのfunctionとsubの違いを詳しく解説しますので、正しい使い分けを知りましょう。
Excel(エクセル)を使いこなすのって結構難しいです。
Excel(エクセル)は、出来ることが多くて覚えるのがかなり大変です。
そんな方のためにExcel(エクセル)の使い方や、関数のコツ、ピボットテーブルやグラフなどをまとめたページをライン登録で無料プレゼントしております。
Excel(エクセル)以外にも、Word(ワード)、パソコン基本、PowerPoint(パワーポイント)、Mac、ブラインドタッチなどの特典もございます。
ご興味ある方は下記よりご登録ください。
FunctionとSubの違いとは?
Excel(エクセル)のVBAマクロにおいて、Function(ファンクション)とSub(サブ)は何かと登場回数が多く、しかも違いが良く分からないケースもあります。
FunctionとSubは使い方がほぼ同じですから、区別しないで使用してしまっている人も珍しくないでしょう。
端的にいえば、前者は戻り値を返すことが可能で、後者は戻り値がないという違いがあります。
つまり実行結果を判定したい場合は前者を、その必要がない時は後者を使用する形です。
他に大きな違いはありませんから、仮に間違って使用しても致命的な問題は発生しないと思われます。
プログラミングをすると似たような処理を何回も書かなければならないことがあります。
その場合、同じような処理を一つの関数として定義して、呼び出せるようにします。
またあまりにもプログラムが長い場合、ある程度のまとまった部分を関数にすることもあります。
VBAマクロでは関数に相当するものをプロシージャと呼びます。それにはFunctionやsubといったものがあり、使い方も変わります。
functionプロシージャは処理後に何らかの値を呼び出し側に戻すことが出来ます。
Subプロシージャは通常それは出来ないようになっています。
ですので値が戻ってくるようにしたい場合はFunctionプロシージャで定義します。
FunctionをSubプロシージャと比較しない
Functionは、Subプロシージャと比較しないほうが分かりやすい、という場合もあります。
例えば、プログラムに関する知識が乏しく、戻り値についてハッキリと理解できていないケースがその1つです。
難しく考え過ぎて理解が遠のく、そういった可能性もありますから、最初は無理に比較をしなくても良いでしょう。
VBAマクロに慣れてきたら比較をする、という段階的な学習を心掛け、必要に応じて比較を始めるのが賢明です。
2つのプロシージャを使用することが出来るため便利な面もありますが、どちらを使っていいのか迷うこともあると思います。
というのは作っている間に仕様の変更があって、値を戻さなくても良くなったり、その逆の値を戻す必要が出てきたりもします。
またFunctionプロシージャでは値を戻さなくてもエラーにならないので、後からSubやFunctionの定義を書き換える手間を考えれば、最初からFunctionプロシージャとしておいた方が分りやすくて良い時もあるのです。
Subプロシージャと混乱しがちな部分
VBAマクロのプロシージャは、複数の処理を1つにまとめたものを指します。
Subプロシージャはこの処理の単位のことで、プロシージャ名に始まりEndを付けたSubで終わります。
この間に複数の処理を記述することによって、一連の処理が1つにまとめられるわけです。
Functionの場合は、プロシージャ名に値を代入することで、それを戻り値として呼び出し元に返せます。
Subで同じことをやっても戻り値は返せませんから、ここで躓いたり混乱を生じることがあるので要注意です。
FunctionとSubのプロシージャはどちらも一部の処理を切り出したりして、汎用的に使えるようにするためにあるのですが、その点に関しては全く同じなので値を戻すことが無ければどちらを使っても構いません。
Subプロシージャだけでも作ることが出来ないことはないので、Functionプロシージャの必要性を感じない人もいると思いますし、混乱することもあるでしょう。
そのように混乱する場合、値を戻す必要がある時は必ずFunctionプロシージャを使うと決めておくと良いかもしれません。
Functionプロシージャ以外でも値が返せる
値を返す為にはFunctionプロシージャが必要ですが、実は使わなくても返せる方法があります。
それは何処からでも参照できる変数を用意しておき、プロシージャ内で値を変更するやり方です。
何処からでもアクセス可能な柔軟性によって、値の正確性については保証が難しいですが、Functionプロシージャを使いたくない場合の代替手段にはなります。
他にも、処理中に他のプロシージャを呼び出すことによって、複数間で値のやり取りが可能です。
一般的には、Subプロシージャはその処理で出てきた結果を戻す必要の無い時に使いますが、実はSubプロシージャでも戻すことが可能なのです。
それはSubプロシージャで定義する引数のタイプをByValからByRefに変えると出来ます。
ByValは値渡しと呼ばれ、ByRefは参照渡しと呼ばれたりします。
ByRefを使うと、Subプロシージャ内でその引数の値を変えると、呼び出し側の変数の値も変わります。
つまり、呼び出し側で変わった値をそのまま引き継ぐことが出来るのです。
また外部変数として定義した変数をSubプロシージャ内で変更することでも値を返すことが出来ます。
Excel(エクセル)のVBAマクロでは、FunctionやSubプロシージャの引数を複数指定できますので、関数の引数は呼び出し時に必要なものを検討してから作成しましょう。
FunctionをSUM、IF等の関数として見る
FunctionはSUMやIFといった関数的な性質を持つので、同等の存在として見ることができます。
つまり、Functionを使えばSUMなどの関数を生み出せる、といった考え方が可能なわけです。
万能ですが使い方は奥深いので、その分良く理解して上手に活用したいところです。
いわば万能ナイフのような存在ですから、使い手によって価値が引き出せたり、逆に上手く使いこなせないこともあるでしょう。
Subとの組み合わせによって可能性が広がるので、その点もFunctionならではの魅力です。
プロシージャは最初に書いた通りプログラムの一部を関数にしたものなのですが、SUMやIFといった関数としても見ることが出来ます。
特にFunctionプロシージャだとその中で処理した後に、値を返してくれるので、それらの関数とまったく同じことが出来ます。
例えばFunctionプロシージャ内でデータの合計をしてその値を戻すようにすればSUM関数になります。
また条件文を使った処理をすればIF関数にもなるのです。
Excel(エクセル)が苦手であればパソコン教室で学んでみませんか?
Excel(エクセル)はかなり奥が深く、知識を得ただけは操作が身に付きにくいものです。
そんな時には、弊社のようなパソコン教室を利用するのも一つの手です。
「オンライン」にも対応している「苦手な方専門パソコン教室パレハ」にお任せください。
オンラインというと「動画を見るだけ」とか「オンラインなんてやったことがない」というご不安があるかと思います。
ですが「苦手な方専門のパソコン教室パレハ」の「オンラインレッスン」は、動画ではなく、直接講師に質問できる生レッスンです。
生レッスンでありながらリーズナブルに学べるのが人気の秘密です。
また、苦手な方に特化しているのでパソコンが特に苦手だと言う方には最適です。
パソコンが苦手でも、オンラインできる仕組みがあります。
詳細は下記をご覧ください。
パソコンが苦手な方向けエクセル マクロ入門講座の詳細はコチラ
パソコンが苦手な方向けエクセル マクロ・VBA講座の詳細はコチラ
Excel(エクセル)の操作が苦手な方のために、操作する上でのコツをまとめたページを用意しました。
「パソコン教室パレハのLINE友達登録」(無料)で「パソコンに役立つ豪華15大特典」をお送りしております。
Excel(エクセル)の操作はもちろん、パソコンが苦手な方に役立つ特典を15個ご用意しております。
良かったら下記からご登録ください。
ココがおすすめ
パソコン教室パレハ直営校
ココがおすすめ
パソコン教室パレハグループ加盟校
下記はパレハグループ加盟校となります。
料金体制などは異なりますが、パソコン教室パレハが自信をもってご紹介できるパソコン教室です。
■ 岩出市にあるパソコン教室 「キュリオステーション 岩出店」の公式サイトはこちら
■ 愛知県名古屋市緑区にあるパソコン教室 「有松パソコン教室」の公式サイトはこちら
■ 宮崎市にあるパソコン教室Cosmarp(コスマープ)の公式サイトはこちら
全国のパソコン教室一覧(実店舗&オンライン)|パレハ直営校&グループ加盟校
ココがおすすめ
オンライン形式をご希望の方はこちら
東京・名古屋・大阪・福岡・札幌・横浜・仙台・埼玉・千葉・沖縄などで受講したい方はオンラインレッスン(Zoomを使ったオンライン個別レッスンです)をお選びください。
ココがおすすめ
パソコン教室講座一覧はこちら
他にもパソコンの講座は多数ございます。
詳しくは下記をご覧ください。
ココがおすすめ
パソコン教室に関連する情報はこちら
ココがおすすめ
パソコンの操作情報はこちら