- ベストアンサー
subは関数?
VBA初心者です。 Functionで始まるものが“関数”ですよね? http://vbatips.blog37.fc2.com/blog-entry-36.html この方のブログを見てコマンドバーの操作をしているのですが、 なぜsubで始まるマクロ(プロシージャー)なのに、説明書きの所に、「関数名」と記載されてるのでしょうか? 関数名:CreateOriginalToolbar なのに、subプロシージャーになってるのが凄く違和感を感じてしまうのですが、 どういう事でしょうか? subも関数なのですか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
質問者さんのおっしゃるとおり、VBAプログラミングでは、Subは関数ではありません。サブプロシージャーをあえて訳せば、副処理となります。 関数と副処理の違いは、関数は処理の結果を応答するのに対して、副処理は処理で何かやっても応答しないことです。 例えば、表計算ソフトの関数は、数値や文字列や真偽値を表示します。このような応答があるのが関数です。そして、その応答する値は戻り値といい、あらかじめ数値なのか文字列なのか真偽値なのか、指定しておきます。さらにこの戻り値は、1つだけしか指定できません。 それに対して、表計算ソフトに埋め込む仮のサブプロシージャー =LevelCheck(b2:B101) があるとして、このサブプロシージャがそのセルには何も表示せずに、別のファイルにそのレベルの確認結果の値を保存するとします。このような隠れた反応をする手順を記述した部分的なプログラムが、サブプロシージャーです。まあ、別のファイルに応答するではないかと言われれば、確かに応答する訳ですが、隠れて保存したり、エラー音を鳴らしたり、処理回数の変数を書き換えたり、色々な補足的な処理を行うのです。 ただし、副処理に戻り値がないとしても、副処理の中でパブリック指定の変数に代入していけば、複数の変数の値を書き直せるので、呼び出したプログラムの続きの処理では、こっそりと書き直した値を使って処理できます。 言葉で書くとくどくなってしまい、うまく伝わらないかも知れませんが、大まかなイメージでも湧いたらいいと願っております。
その他の回答 (2)
- WindFaller
- ベストアンサー率57% (465/803)
>なぜsubで始まるマクロ(プロシージャー)なのに、説明書きの所に、「関数名」と記載されてるのでしょうか? 単に、テキスト・フォーマットがそうなっているから、そのままにしているだけでは? >subも関数なのですか? 私は、VBAは知っているつもりですが、少なくとも、Subプロシージャを、関数なんて呼び方はしませんし、聞いたこともありません。 Function の日本語訳は、「関数」です。利用する場合は、ユーザー定義関数と呼んだり、Functionプロシージャと呼ぶこともあります。戻り値を返すメソッドとなりうるプロシージャです。ただし、戻り値は、ひとつとは限りません。戻り値を配列にしても、ひとつのセルに対して、ひとつしか返さないだけで、INDEX関数などを使えば、複数を取り出すことも可能です。 Sub プロシージャは、戻り値を返さないメソッドのことです。標準モジュールに書けば、ステートメントになるし、オブジェクト・モジュールに書けば、メソッドになります。 くだんのサイトの場合は、"プロシージャ名:"でしょうね。
お礼
ご回答ありがとうございました。
- nag0720
- ベストアンサー率58% (1093/1860)
確かにVBAでは値を返すプロシージャ(Function)を関数と言っています。 しかし、VBも含めて他のプログラミング言語では、値を返さないものもひっくるめて関数と言うのが一般的です。 VBAしか知らない人にとってはSubを関数と呼ぶのは違和感があるでしょうが、いろいろ言語を覚えていけばそのうち慣れていきます。 日本語訳は厳密に定義されたものではないので、あまり言葉にこだわらないで本質を見るようにしましょう。
お礼
ご回答ありがとうございました。
お礼
ご回答ありがとうございました。