pickup

目次

Functionプロシージャ

こんにちは。伊川(@naonaoke)です。

今回は、Functionプロシージャについて説明をします。

プロシージャ(procedure)とは、複数の処理をまとめたプログラムの単位のことです。

その前に伊川の動画で紹介したプロシージャを説明します。

プロシージャの種類

・Subプロシージャ

今まで、伊川が紹介してきたコードは、ほとんどが、Subプロシージャになります。

コードを見ていただくと分かると思いますが、処理を単位ごとに行います。

重要なのは、上から下へ向かって順に処理を実行します。

Subプロシージャは戻り値を返すことができません。

・Functionプロシージャ

伊川はこの、Functionプロシージャはあまり使っていませんでした。

知らなくても、VBAを動かすことができるからです。

Subプロシージャとの最大の違いは戻り値を返すことができます。

また、自作の関数をつくることもできます。

・イベントプロシージャ

イベントプロシージャは、イベント(出来事)が起こったことをキッカケに、システム(コンピューター)が、自動的に呼び出すプロシージャです。これが最大の特徴です。

FunctionプロシージャやSubプロシージャは、呼び出すキッカケを作らないと実行できないのに対し、イベントプロシージャは自動的に呼び出されます。

この記事に、Worksheet_SelectionChangeの記載があります。

どこか、セルをクリックしたら、クイズ開始となるようにしています。

http://keiyu.xyz/2019/10/25/excel%e3%80%80vba%e3%80%80%e3%83%9c%e3%82%bf%e3%83%b3%e3%81%8c%e6%b6%88%e3%81%88%e3%82%8b%e3%80%80%e3%83%9c%e3%82%bf%e3%83%b3%e3%82%92%e6%8a%bc%e3%81%9b%e3%81%aa%e3%81%84/

問題提起

(株)IKAWAの柄久 瀬瑠子(エク セルコ)は、VBAのコードを書くにときに、Subプロシージャと、Functionプロシージャの違いが分かりません。しかも、戻り値ということが分からないです。どうやって考えたらいいのでしょうか?

 

回答

回答
電話してラーメンを注文⇒ラーメン屋が出前⇒ラーメンを食べる
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プロシージャは、最初は、分からないというより、イメージがつきません。

しかし、後々のメンテナンスを考えるとこちらのほうが、断然便利です。

また、他の方法で呼び出す方法もありますが、それはまた次回にします。

サンプルファイルNo25はです
スポンサーリンク

Twitterでフォローしよう

おすすめの記事