第9講 プロシージャの学習

第5話 Functionプロシージャについての解説
入門
コード
Private Sub CommandButton1_Click()
  Cells(5, 2) = "1から10までの和"
  Cells(6, 2) = f
  Cells(7, 2) = "1から10までの積"
  Cells(8, 2) = g
End Sub
Function f()
  Dim w As Integer, i As Integer
  w = 0
  For i = 1 To 10
    w = w + i
  Next
  f = w
End Function
Function g()
  Dim w As Long, i As Long
  w = 1
  For i = 1 To 10
    w = w * i
  Next
  g = w
End Function
から解説しましょう。
文章で説明するより、
次の図を見て頂いた方が、
わかりやすいと思います。
入門

Functionプロシージャfは、
  f = w
の行を以て終了します。
fはFunctionプロシージャの名前であると同時に、
値を収納する変数の名前でもある訳です。
というより、Functionプロシージャ自体が
変数であるといった方が良いでしょう。
つまり、Functionプロシージャが値を持っているのです。
『プロシージャが値を持つというと、
Subプロシージャもそうなの?』
と当然疑問に思いますよね。

C言語ではこの辺がすっきりしています。
C言語ではプロシージャのことを関数といいますが、
関数自体が型を持つます。
関数自体が整数型(整数を収納する変数型)だったり、
浮動小数点型(少数を収納する変数型)だったりするのです。
Subプロシージャに相当する関数は、
C言語ではvoid型といいます。
voidとは、空の意味です。
つまり、void型の関数とは空の値を持つ関数と考えるのです。
ですから、先の疑問の答えは
『Subプロシージャも空の値=void型の値を持つ』
です。

でも、変数の型は
  Dim w As Integer, i As Integer
などと宣言されて、明示されているのに、
プロシージャの場合どこにも明示されていないですよね。
実は、C言語の場合は関数であっても、
明確に型を表示します。
例えば、整数型の関数であればint f()などと表記するのです。
intはVBAでは、Integerに相当するものです。
ですが、VBやVBAの場合は、
Function f()のように型が明示されていません。
プロシージャ自体が値を持つとすれば、
型はどうなっているのでしょうか。
型は、
  f = w
の1行によって決まります。
今回の場合
Function f()
  Dim w As Integer, i As Integer
  w = 0
  For i = 1 To 10
    w = w + i
  Next
  f = w
End Function
Integer型の変数を代入していますので、
fはInteger型であると自動的に指定されるのです。
ですから、VBやVBAの場合
C言語のように型を明示しませんが、
代入という操作によって、
型が自動的に決まるのです。
つまり、型がなんであるかは、
プロシージャの内容を見ないと分からない訳です。

さて、ここでもうひとつのコードを見てみましょう。
Function f()
  Dim i As Integer
  f = 0
  For i = 1 To 10
    f = f + i
  Next
End Function
今回の場合、Functionプロシージャfの型はどこで決まるでしょうか。
    f = f + i
です。iはInteger型であると明示されています。
同じ型同士でしか計算できませんので、
fはInteger型であると、VBAが判断するのです。

ところで、皆さんFuncitoinの意味ご存じですか。
関数という意味です。
プロシージャはC言語では関数であると何度も説明してきました。
ただの部品=パーツにすぎないものをなぜ関数と呼ぶのでしょうか。


第4話へ 第6話



トップ

初心者のためのc++ vc++ c言語 入門 基礎から応用までへ
初心者のための excel 2007 2010 2013 vba マクロ 入門 基礎から応用まで
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
vb講義トップへ
VB講義基礎へ
専門用語なしのC++入門へ
専門用語なしのJava入門へ
専門用語なしのVBA入門

数独のページ
魔方陣のページ
数学研究室に戻る
本サイトトップへ