すべてのカテゴリ » インターネット・パソコン » 技術・プログラミング

質問

終了

エクセルVBAで、

FunctionプロシージャとSubプロシージャがありますが、メリット、デメリットがいまいち分かりません。

Functionプロシージャは、戻り値を返す点がメリットのように思いますが、Subプロシージャでも、グローバル変数に値を入力してしまえば、同じことだと思っています。

具体的に、FunctionプロシージャとSubプロシージャの使い分けや、メリットデメリットを詳しく知りたいです。

詳しい方、教えてください。

  • 質問者:匿名
  • 質問日時:2011-07-06 23:18:10
  • 0

並び替え:

>FunctionプロシージャとSubプロシージャの使い分け

Functionプロシージャは、ユーザー定義関数に使えます。

また、if文の中に組み込むなどの方法でコードが簡単になります。
if chkStatus(x) then ~ とか
for i=startData(x1) to endData(x2)
..,
next i
こういう風にfunctionプロシジャの戻り値をうまく使うとコードが簡略化できます。


戻り値を使いたい場合以外は、subプロシジャーでいいでしょう。



>Subプロシージャでも、グローバル変数に値を入力してしまえば、同じことだと思っています。
小規模なプログラムではそれでよくても、プログラムの規模が大きくなるにつれ、そういうプログラムの作成方法ではバグが入り込みやすくなります。
プロシジャが何十個もあった場合、どのプロシジャでどの変数を変更したのか、管理するのは困難です。
subプロシジャでグローバル変数を変更するのは、特殊な場合に限られます。通常は引数を使って戻します。そうしないと、上記の理由で大規模なプログラム開発は困難だし、小規模でも思わぬバグで余分な時間がかかってしまう場合があるでしょう。

===補足===
subプロシージャでグローバル変数を変更するやりかたは、メリットがありません。上記のようにバグが入りこみやすい(=デバッグに時間がかかる)うえ、処理速度も遅い。

効率よく短時間にプログラムを作るには、構造化という考え方を使う必要があります。
また、プログラムの再利用という点でもグローバル変数を変更するようなプログラムは避ける必要があります。

処理速度を最優先するのであれば、プロシジャ呼び出しやグローバル変数呼び出しによるオーバーヘッドを減らすために、gosubを使います。

  • 回答者:Port (質問から3時間後)
  • 0
この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。

関連する質問・相談

Sooda!からのお知らせ

一覧を見る