目次
Functionプロシージャ
こんにちは。伊川(@naonaoke)です。
今回は、Functionプロシージャについて説明をします。
プロシージャ(procedure)とは、複数の処理をまとめたプログラムの単位のことです。
その前に伊川の動画で紹介したプロシージャを説明します。
プロシージャの種類
・Subプロシージャ
今まで、伊川が紹介してきたコードは、ほとんどが、Subプロシージャになります。
コードを見ていただくと分かると思いますが、処理を単位ごとに行います。
重要なのは、上から下へ向かって順に処理を実行します。
Subプロシージャは戻り値を返すことができません。
・Functionプロシージャ
伊川はこの、Functionプロシージャはあまり使っていませんでした。
知らなくても、VBAを動かすことができるからです。
Subプロシージャとの最大の違いは戻り値を返すことができます。
また、自作の関数をつくることもできます。
・イベントプロシージャ
イベントプロシージャは、イベント(出来事)が起こったことをキッカケに、システム(コンピューター)が、自動的に呼び出すプロシージャです。これが最大の特徴です。
FunctionプロシージャやSubプロシージャは、呼び出すキッカケを作らないと実行できないのに対し、イベントプロシージャは自動的に呼び出されます。
この記事に、Worksheet_SelectionChangeの記載があります。
どこか、セルをクリックしたら、クイズ開始となるようにしています。
問題提起
回答
Functionプロシージャは、出前と理屈が同じ。
Subプロシージャは、出向いてラーメンを食べるのと理屈が同じ
VBAのコードから考える
セルA2の文字数が、7桁であれば、郵便番号ですとメッセージを表示させます
セルA2の文字数が、7桁以外であれば、郵便番号ではありませんとメッセージを表示させます。
Subプロシージャで実行する場合
Sub test1() If Len(Range("A2")) <> 7 Then MsgBox "郵便番号ではありません" Else MsgBox "郵便番号です" End If End Sub
Functionプロシージャで実行する場合
Sub test2() 郵便番号判定 End Sub
WorkSheet1のVBAエディタに、上記のコードを記載します。
Function 郵便番号判定() If Len(Range("A2")) <> 7 Then MsgBox "郵便番号ではありません" Else MsgBox "郵便番号です" End If End Function
標準モジュールに、上記のコードを記載します。
郵便番号判定というのが、Subプロシージャで呼び出されて、処理を実行します。
ラーメンを食べるという場合で考えてみる
ラーメンを出前する場合
ラーメンの出前ならこのような流れでしょうか。
ラーメン店に食事に行く場合
ラーメン屋へ外食に行くならこのような流れでしょうか。
結果
結果は、どちらも満腹になります。
でも、その過程が違っています。
このラーメンを出前してとお願いする呼出(Function)に対して、
ラーメンを持ってくる(出前する)という戻り値(ラーメン)がある訳です。
FunctionプロシージャをGoogleで検索すると、税金が絡む
なぜ、Functionプロシージャのときは、税金の話がからむのでしょうか?
それは、Functionプロシージャの税金の部分だけを変更するだけで、終了するからです。
つまり、すべてのコードを変更する必要がありません。
ここがメリットなのです。
システムを作成場合は、メンテナンスも考えないと、後々、とんでもないことが発生します。
税金のサンプル
C列に税込後の金額を表示したいと思います。
Sub 計算() Dim i As Integer For i = 2 To 11 Cells(i, 3) = zeikomi(Cells(i, 2)) Next i End Sub
・上記がWorkSheet2に記載しているコードです。
Function zeikomi(ByVal kakaku As Long) As Long Const zei As Currency = 1.1 zeikomi = kakaku * zei End Function
・上記が標準モジュールに記載しているコードです。
計算が完了しました。
まとめ
Functionプロシージャは、最初は、分からないというより、イメージがつきません。
しかし、後々のメンテナンスを考えるとこちらのほうが、断然便利です。
また、他の方法で呼び出す方法もありますが、それはまた次回にします。