アプリ版:「スタンプのみでお礼する」機能のリリースについて

初めてプログラミングを行おうと思っています。
そこで、VBを使って行おうと思っているのですが、
全てが初めてなので、まずは本を読んでいるところです。

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

宜しくお願い致します。

A 回答 (6件)

「サブルーチン」とは、処理のまとまりのことです。


これはあくまでもVBだけの概念ではなく、プログラミング言語の一般的な概念です。
つまり、何らかの論理的な処理のまとまりを決めた単位です。
例えば、「データベースを更新するサブルーチン」「ソートをを行うサブルーチン」という具合に使います。

一方、「プロシージャ」はVBのみの概念です(他の言語にも「プロシージャ」はありますが、ここでいいたいのは言語特有の概念であり、一般概念ではないという意味)。
そしてその「プロシージャ」にはFunctionとSubの2種類があります。
「プロシージャ」の意味は、一般概念である「サブルーチン」をVBでは「プロシージャ」という単位(概念)で表現します、ということです。

ですから、「サブルーチン」は一般概念、「プロシージャ」はVB内での「サブルーチン」を表現した概念です。
つまり、「サブルーチン」≒「プロシージャ」と考えて差し支えありません。
違うと言えば違う部分もありますが、少なくとも『全然別ものだよ』というわけではなく、殆ど同じと考えてかまいません。
「ヘッドホンステレオ」と「ウォークマン」の違いのような一般概念と商品名の違い、あるいは、「ステレオ」と「コンポ」のような一般概念ではあるけれど表現の仕方の違い、みたいに考えてください。
いずれにせよ、あまり気にしない方がいいと思います。

ちなみに、「Functionプロシージャ」と「Subプロシージャ」の違いは、戻り値を返すか返さないかだけで他は一緒です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/09/02 11:26

#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
    • good
    • 0

 


> ちなみに、「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) '× 構文エラー

とは書けない、という意味です。
 
    • good
    • 0

>、「Functionプロシージャ」と「Subプロシージャ」の違いは、戻り値を返すか返さないかだけで他は一緒です


エクセルVBAでは、Functionプロシージャ内では文字のフォントの色を変えるなどは出来てしまいました。
Function aaa()
Cells(3, 1).Font.ColorIndex = 3
End Function
Function bbb()
Cells(3, 1).Insert (xlDown)
End Function
値を返しているのでしょうか。何か私の思い違い?
    • good
    • 0

サブルーチン, プロシージャ、関数は一般的なプログラミング用語としては


同じようなものですが、VB用語としては別のものです。

(1)プロシージャ  プログラムのコードの集まり(Sub, Function, Propertyの3種。
(2)関数 VBまたはAPIで用意されている関数
(3)サブルーチン Gosub..Return文で呼ばれる側のルーチン

# 初心者であれば、VB用語を正しく用いる本で勉強するべし
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/09/02 11:34

まず、ルーチンとは、何らかの処理を行なう一連のプログラムコードのことです。


そのルーチンを機能単位でまとめ、関数などとして独立させたものをサブルーチンと呼びます。

そのサブルーチンをさらに細かく分類すると、Subプロシージャと関数プロシージャというものがあるということです。

ルーチン(プログラムコード)
     |
サブルーチン(機能別にまとめたもの)
     |         |
 Subプロシージャ     関数プロシージャ
               (戻り値があるもの)

大雑把にこんな感じですけど、わかりましたでしょうか?
簡単なソースを作って同じ処理しているところや外だしにできそうなものなどを関数化したりやっているうちに飲み込めてくるとは思うのですが。

http://f1.aaacafe.ne.jp/~zahyou/vbc/subfun.htm

参考URLはデジタル用語辞典です。
色々役立つと思いますので、参考にされてください。

参考URL:http://yougo.ascii24.com/
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/09/02 11:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!