Kの備忘録(仮)

Python、VBA、Excelを中心に記事を投稿

VBAのFunctionプロシージャを「y=2x+1」を使って解説する

はじめに

Excel VBAではじめて「Functionプロシージャ」に出会ったとき、どう思いましたか?わたしは、まったく意味がわかりませんでした。
「自分で関数を作れる」ということがどういうことなのか、「引数」と「戻り値」のことも、解説を読んでも理解しにくかったです。

最近は少し慣れて自分で関数を作れるようになりました。 ふと、「Functionプロシージャを一次関数で表したらわかりやすくなるのではないか」と思い、試してみることにしました。

◆目次◆

一次関数とは

コトバンク」の一次関数の解説から抜粋します。 https://kotobank.jp/word/%E4%B8%80%E6%AC%A1%E9%96%A2%E6%95%B0-433347

a、bを定数とするときy=ax+b(a≠0)で表される関数をいう。

この記事のタイトルの一部の「y=2x+1」は一次関数です。

Functionプロシージャとは

引数と戻り値を使って、自分で関数を作ることができるプロシージャです。 (戻り値がないプロシージャも作成可能です) Subプロシージャとの違いは、戻り値の有無です。

引数と戻り値とは何なのか、一言でいうと以下のとおりです。

  • 引数
    関数に代入する値

  • 戻り値
    関数の処理結果

なお、Functionプロシージャは以下のように記述します。

Function 自分で決めた関数名(引数名 As データ型) As 戻り値のデータ型

    自分で決めた関数名 = 戻り値 

End Function

ここまでは、(Functionプロシージャをはじめて目にした人は)「引数」や「戻り値」など、聞き慣れない言葉が出てくるので、自分で関数を作るイメージがしにくいです。

では、例として一次関数の「y=2x+1」という数式を使ってFunctionプロシージャで関数を作る過程を説明します。

「y=2x+1」を例にしてFunctionプロシージャで関数を作る

yの値を求める関数(Functionプロシージャ、関数名:y)を作ります。

Function y(x As Long) As Long

    y = 2 * x + 1

End Function

なんとなくわかりやすくなりませんか。 yを求める関数は「y=2*x+1」と書けばいいのです。

この場合、引数と戻り値は以下のとおりです。

  • 引数:x
  • 戻り値 :2 * x + 1の答え(処理結果)→つまりyの値

では、引数:xに代入する値を決めます。
今回はx=3とします。

呼び出し用のsubプロシージャを用意して引数xに3を代入します。

Sub 一次関数呼び出し用プロシージャ()
    
    Debug.Print y (3) 

End Sub

上記の呼び出し用のSubプロシージャでは、yの値(y=2x+1のときにxの値が3だった場合の処理結果)がイミディエイトウィンドウに出力されます。

これで、Functionプロシージャの関数:yと、関数呼び出し用のプロシージャが完成しました。

この2つを合わせます。

Sub 一次関数呼び出し用プロシージャ()
    
    Debug.Print y (3) ' 出力結果:7

End Sub

Function y(x As Long) As Long

    y = 2 * x + 1

End Function

Functionプロシージャを使った関数作り方や、「引数」と「戻り値」の意味がわかりやすくなったのではないでしょうか。
ちなみに上記の場合、引数と戻り値は以下のとおりです。

  • 引数:x=3
  • 戻り値:y=2×3+1=7

さいごに

Functionプロシージャで関数を作るときに「どうやって組み立てたらいいのか」がわからなくなったら、一次関数を思い出してください。

「引数はx、戻り値はyの値(処理結果)」と考えていただくと、少しわかりやすくなるかもしれません。