• ベストアンサー

初歩的な質問なのですが、サブルーチン、プロシージャについて

初めてプログラミングを行おうと思っています。 そこで、VBを使って行おうと思っているのですが、 全てが初めてなので、まずは本を読んでいるところです。 本の中で、サブルーチンやプロシージャという言葉がよく出てくるのですが、サブルーチンは処理のかたまり、プロシージャは処理の命令と軽く考えていたのですが、本の中に、『サブルーチンにはFunctionプロシージャとSubプロシージャの2種類がある』と書いてあり、それ以来、私にはサブルーチンもプロシージャも同じものに思えてしまいます。人に聞いたところ、『全然別ものだよ』という答えしかありませんでした。これは、どう違うのでしょうか?? また、SubプロシージャのSubはサブルーチンを示すとあり、益々、理解できなくなりました。 恐れ入りますが、サブルーチン、プロシージャ、Functionプロシージャ、Subプロシージャとは何かについて、おわかりの方がいらっしゃいましたらご教授ください。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • mfuku
  • ベストアンサー率50% (173/345)
回答No.1

「サブルーチン」とは、処理のまとまりのことです。 これはあくまでもVBだけの概念ではなく、プログラミング言語の一般的な概念です。 つまり、何らかの論理的な処理のまとまりを決めた単位です。 例えば、「データベースを更新するサブルーチン」「ソートをを行うサブルーチン」という具合に使います。 一方、「プロシージャ」はVBのみの概念です(他の言語にも「プロシージャ」はありますが、ここでいいたいのは言語特有の概念であり、一般概念ではないという意味)。 そしてその「プロシージャ」にはFunctionとSubの2種類があります。 「プロシージャ」の意味は、一般概念である「サブルーチン」をVBでは「プロシージャ」という単位(概念)で表現します、ということです。 ですから、「サブルーチン」は一般概念、「プロシージャ」はVB内での「サブルーチン」を表現した概念です。 つまり、「サブルーチン」≒「プロシージャ」と考えて差し支えありません。 違うと言えば違う部分もありますが、少なくとも『全然別ものだよ』というわけではなく、殆ど同じと考えてかまいません。 「ヘッドホンステレオ」と「ウォークマン」の違いのような一般概念と商品名の違い、あるいは、「ステレオ」と「コンポ」のような一般概念ではあるけれど表現の仕方の違い、みたいに考えてください。 いずれにせよ、あまり気にしない方がいいと思います。 ちなみに、「Functionプロシージャ」と「Subプロシージャ」の違いは、戻り値を返すか返さないかだけで他は一緒です。

makitty
質問者

お礼

なるほど!! 「ヘッドホンステレオ」と「ウォークマン」、「ステレオ」と「コンボ」ですか。 とても理解しやすかったです。 プログラミングでの概念とその言語のみの概念があるんですね。 どうもありがとうございました。

その他の回答 (5)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.6

#4です。意味がわかってないものですが。 エクセルVBAで標準モジュールに Function aaa() Range("a1").Interior.ColorIndex = 6 aaa = 123 End Function と入れて、実行すると、A1はセルが黄色になります。 シートのB1に=aaa()と入れるとB1は123が入りますが、A1は黄色になりません。 エクセルVBAではユーザー関数は値を返すほかの、色を付けるとかは、関数では出来ないと説明を読んでいましたので、結果はその通りなんですが、良く判らない。 右辺に記入して、下記test01を実行しても、色がつく。 Function aaa() Range("a1").Interior.ColorIndex = 6 ' aaa = 123 End Function Sub test01() Range("b1") = aaa() End Sub

noname#4564
noname#4564
回答No.5

  > ちなみに、「Functionプロシージャ」と「Subプロシージャ」の違いは、戻り値を返すか返さないかだけで他は一緒です。 補足です。 (意味がわかっておられない方もいらっしゃるようなので・・・) 「Functionは戻り値を返せるが、Subは返せない」 の意味は、 [ Public | Private ] Function As Type '○ と記述することはできるが、 [ Public | Private ] Sub As Type '× と記述することはできない、ということです。 また、値を返さないSubは代入式の右辺式に記述することはできません。 Dim retVal As Long retVal = MsgBox(Args ....) '○ MsgBox関数の返値を代入 は問題ないが、 retVal = Worksheet_SelectionChange(Arg) '× 構文エラー とは書けない、という意味です。  

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

>、「Functionプロシージャ」と「Subプロシージャ」の違いは、戻り値を返すか返さないかだけで他は一緒です エクセルVBAでは、Functionプロシージャ内では文字のフォントの色を変えるなどは出来てしまいました。 Function aaa() Cells(3, 1).Font.ColorIndex = 3 End Function Function bbb() Cells(3, 1).Insert (xlDown) End Function 値を返しているのでしょうか。何か私の思い違い?

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.3

サブルーチン, プロシージャ、関数は一般的なプログラミング用語としては 同じようなものですが、VB用語としては別のものです。 (1)プロシージャ  プログラムのコードの集まり(Sub, Function, Propertyの3種。 (2)関数 VBまたはAPIで用意されている関数 (3)サブルーチン Gosub..Return文で呼ばれる側のルーチン # 初心者であれば、VB用語を正しく用いる本で勉強するべし

makitty
質問者

お礼

ありがとうございます。 色々と本を読んで、勉強してみます。

  • ducati
  • ベストアンサー率29% (308/1062)
回答No.2

まず、ルーチンとは、何らかの処理を行なう一連のプログラムコードのことです。 そのルーチンを機能単位でまとめ、関数などとして独立させたものをサブルーチンと呼びます。 そのサブルーチンをさらに細かく分類すると、Subプロシージャと関数プロシージャというものがあるということです。 ルーチン(プログラムコード)      | サブルーチン(機能別にまとめたもの)      |         |  Subプロシージャ     関数プロシージャ                (戻り値があるもの) 大雑把にこんな感じですけど、わかりましたでしょうか? 簡単なソースを作って同じ処理しているところや外だしにできそうなものなどを関数化したりやっているうちに飲み込めてくるとは思うのですが。 http://f1.aaacafe.ne.jp/~zahyou/vbc/subfun.htm 参考URLはデジタル用語辞典です。 色々役立つと思いますので、参考にされてください。

参考URL:
http://yougo.ascii24.com/
makitty
質問者

お礼

図での説明、ありがとうございます。 イメージしやすかったです。

関連するQ&A

専門家に質問してみよう