質問: subプロシージャとfunctionプロシージャの違いがわかりませんっ!
回答: ‘function’は、直訳の「関数」そのもの。 「functionプロシージャ」は、用語としては変。 ‘sub’は‘subroutine’の略で、片仮名だと「サブルーチン」になる。戻り値を持たない(返せない)。 戻り値が無いだけで、渡された物を変更する事は、サブルーチンでも可能。 本来は、関数は必ず戻り値を使う必要が有り、式の中でしか使えない物だった。 逆にサブルーチンは戻り値を持たない代わりに式以外でも使えた。また、大昔は、ユーザ定義の関数機能すら無かったので、唯一の処理共通化手段だった。 が、自動的に関数の戻り値を捨てる機能が入って、今は、戻り値の有無以外に違いは無い。 まあ、歴史的由来の違いが反映されているだけで、深く考える必要は無いかと。 ついでに混乱させて置くと、機械語レベルだと、サブルーチンしかない。 が、CPUには「レジスタ」と云う変数が常時存在するので、特に一番使うレジスタを「戻り値」とするのが機械語レベルでの関数。 レジスタが常時在るので、サブルーチンも関数も動作は変らない。 使う側が、戻って来た時のレジスタを使うか否かで関数かサブルーチンかに変化する。 古い言語だと、関数とサブルーチンの機能を使い分ける様な仕様だったが、C言語では、面倒なので全部関数に単純化された。 昔のC言語仕様では、return文で明示的に、戻り値のレジスタを設定しない場合、途中で偶然戻り値のレジスタに入った値が返ると云う超手抜き仕様で、使わない/使えない時は戻り地を捨てる方式になった。 この「戻り値を捨てる」仕様が、C言語のAPIも流用出来る様にする為に、VBのfunctionに引き継がれている。 一方、subプロシージャは、歴史的に伝統のある使い方なので、互換性の為に未だに残ってる。 結果、初心者が混乱する事になった。