第6講 ファンクションプロシージャを理解しよう

第1話 ファンクションプロシージャとは?
プロシージャには2つあります。
1つは、前講で学んだサブプロシージャであり、
もう一つが本講で学ぶファンクションプロシージャです。
2つとも社員です。
つまり、社長や他の社員に命じられて仕事をする点は共通しています。
違いは、サブプロシージャは命じられた仕事を遂行するだけなのに対して、
仕事の結果を報告するのがファンクションプロシージャです。
親分に誰々を消せ命じられて、
サブプロシージャは殺人を実行するだけですが、
ファンクションプロシージャの方は、その結果の報告もします。

比喩での説明は以上にしまして、
端的に違いを説明しますと、
サブプロシージャは戻り値をもたないのに対して、
ファンクションプロシージャは、戻り値をもちます。

前講で引数の話をしました。
ファンクションプロシージャも引数のないプロシージャと
引数のあるプロシージャの2種類あります。

そして、引数のあるプロシージャが数学の関数と同じなのです。
では皆さん、次のようなマクロを組んで下さい。
Private Sub CommandButton1_Click()

  Dim x As Integer, y As Integer 'xは整数を入れる変数 yも整数を入れる変数
  x = 10      'aは整数を入れる整数
  Cells(4, 1) = x
  y = f(x)
  Cells(5, 1) = y
    
End Sub
Function f(x As Integer)
  f = 2 * x
End Function
Private Sub CommandButton2_Click()
  
  Rows("4:2000").Select
  Selection.ClearContents
  Cells(1, 1).Select
  
End Sub
すると、実行結果は
8
となります。

これはxに10を入れたら2倍になって帰って来てそれがyに入ったということです。
1
前話でパーツの中身を知らなくても、使い方さえ知っていればよいと、
話したのは、fは値を2倍にしてくれる箱であることを理解していれば、
fを使えるということなのです。
値を2倍にしてくれるツールだということを知っていれば、
中の構造がどうなっているのかを知っている必要がないのです。
中を見なくてもいいよということを抽象化と呼んでいるのですが、
どう考えてもブラックボックス化の方がいいと思いませんか。
f(x)=2x
と同じであることお分かりですか。
ブラックボックスfとは、入ってきた値を加工する機械です。

さて、戻り値という言葉を使いました。
ファンクションプロシージャfはCommandButton1_Clickから10という値を渡されて、
それを2倍にして、CommandButton1_Clickに戻したのです。
戻す値だから、戻り値です。
報告すると比喩でいったのは、戻り値を仕事の依頼主に戻すことです。
10を2倍したらどうなるか調べて報告しなさい・・・これが仕事の依頼内容です。
もっとも、こんな簡単な仕事なら一瞬ですが、
数独の問題数はいくつあるか調べて報告しなさいといわれば、
スパコンを使える環境に合ったとしても、
報告できるファンクションプロシージャは現在はありません。
もし、あなたがそんなファンクションプロシージャを開発できれば、
間違いなく歴史に名前を残すことが出来ます。

それでは、皆さんファンクションプロシージャfは1から10までの和を求めて報告任務
ファンクションプロシージャgは11から20までの和を求めて報告する任務として、
マクロを組んでみて下さい。
最初は、引数のないファンクションプロシージャで組んでみて下さい。
2
実行ボタンを押すと
127
ファンクションプロシージャの作り方は、サブプロシージャの場合と同じで、
エンターなどでどこかに空白行を作り
function f
と打ってエンターをすればよいのです。

第5講第10話へ 第2話へ

004


eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
vc++講義へ
excel 2013 2010 2007 vba入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門へ第2部へ
小学生からエンジニアまでのRuby入門へ
小学生からエンジニアまでのC言語入門 基礎から応用まで
本サイトトップへ