Excel VBA Functionプロシージャの戻り値とは?初心者向けに使い方を徹底解説
生徒
「VBAで計算を自動化したいんですけど、計算した結果を別の場所で使い回すことってできますか?」
先生
「それは『Function(ファンクション)プロシージャ』と『戻り値(もどりち)』を使えば簡単に実現できますよ。」
生徒
「モドリチ……?なんだか難しそうですね。私、パソコン自体あまり詳しくないんですけど大丈夫でしょうか?」
先生
「大丈夫です!自動販売機でお金を入れて飲み物が出てくる仕組みに例えると、とても分かりやすいんです。一緒に仕組みを紐解いていきましょう!」
1. 戻り値(もどりち)とは?自動販売機で例えてみよう
プログラミングの世界には「戻り値」という言葉がよく出てきます。これを理解するのが、Excel VBAを使いこなすための第一歩です。
もっとも分かりやすい例えは「自動販売機」です。あなたが自動販売機に「150円」というデータ(お金)を入れたとします。すると、自動販売機の中で処理が行われ、最終的に「お茶」という結果(品物)が手元に返ってきますよね。この、最後に手元に返ってきた「お茶」こそが、プログラミングでいうところの「戻り値」なのです。
VBAにおける「関数(Function)」もこれと同じです。何か値を与えると、それを加工したり計算したりして、一つの答えを返してくれます。この「返してくれる値」のことを、専門用語で戻り値、あるいは返り値と呼びます。
2. FunctionプロシージャとSubプロシージャの違い
VBAには大きく分けて「Sub(サブ)プロシージャ」と「Function(ファンクション)プロシージャ」の2種類があります。初心者のうちはこの違いで迷うことが多いので、整理しておきましょう。
- Subプロシージャ:「命令を実行して終わり」の処理。例えば、「セルに色を塗る」「メッセージを表示する」といった動作を担当します。
- Functionプロシージャ:「計算して結果を返す」のが目的の処理。例えば、「消費税を計算する」「名前を結合する」など、何か答えが欲しいときに使います。
つまり、戻り値があるのがFunction、戻り値がないのがSubだと覚えておけば間違いありません。どちらもプログラムのまとまりである「プロシージャ」の一種ですが、役割がはっきりと分かれているのです。
3. Functionプロシージャの基本的な書き方
それでは、実際にどのようにコードを書くのかを見ていきましょう。Functionプロシージャを作る際は、以下のような決まった型(構文)があります。
Function 関数名(引数 As データ型) As 戻り値のデータ型
' ここで計算などの処理を行う
関数名 = 計算結果 ' これが戻り値を返す記述
End Function
ここで重要なポイントが2つあります。
一つ目は、関数名そのものに値を代入することで、それが戻り値になるという点です。コードの最後の方で 関数名 = 〇〇 と書くことで、「この値を返しますよ!」という合図になります。
二つ目は、データ型を指定することです。データ型とは、その値が「数字(整数)」なのか「文字」なのかといった情報の種類のことです。初心者の方は、まずは「数字なら Integer(整数)や Long(大きい整数)」、「文字なら String」と指定すると覚えておきましょう。
4. 実践!消費税を計算する関数を作ってみよう
具体的な例として、商品の金額を入力すると、10%の消費税を加えた税込価格を計算して返してくれる関数を作ってみましょう。
' 税込価格を計算する関数
Function GetTaxPrice(price As Long) As Long
Dim result As Long
result = price * 1.1 ' 1.1を掛けて税込にする
GetTaxPrice = result ' 関数名に値を代入して戻り値を設定
End Function
' 関数を呼び出すためのSubプロシージャ
Sub ShowPrice()
Dim finalPrice As Long
' 作成した関数を呼び出す
finalPrice = GetTaxPrice(1000)
MsgBox "税込価格は " & finalPrice & " 円です。"
End Sub
上記のコードを実行(ShowPriceを実行)すると、画面に「税込価格は 1100 円です。」と表示されます。GetTaxPriceという自作の関数が、1000という数字を受け取って、計算結果の1100を戻り値として返してくれたのです。
5. 戻り値を使うメリットとは?
「わざわざFunctionを使わなくても、全部Subの中で書けばいいのでは?」と思うかもしれません。しかし、戻り値を使うことで、プログラムは劇的に管理しやすくなります。
メリット1:再利用ができる
一度「消費税計算」の関数を作っておけば、他のプログラムでもその関数を呼び出すだけで使い回せます。同じ計算式を何度も書く必要がなくなります。
メリット2:修正が楽になる
もし将来、消費税が15%に変わったとしても、修正するのは関数の中の1箇所だけで済みます。あちこちに計算式を散らばらせていると、探し出すだけで一苦労ですが、関数化していれば一瞬で修正が終わります。
メリット3:プログラムが読みやすくなる
メインの処理(Sub)の中に細かい計算がぎっしり書いてあると、後で見返したときに何をしようとしているのか分かりにくくなります。計算をFunctionに任せることで、メインの処理がスッキリと整理されます。
6. 文字を組み合わせて返す関数
戻り値は数字だけではありません。文字(文字列)を加工して返すこともよくあります。例えば、名字と名前を別々に受け取って、一つのフルネームとして返す関数を考えてみましょう。
' 名字と名前をくっつけてフルネームを作る関数
Function MakeFullName(lastName As String, firstName As String) As String
Dim fullName As String
fullName = lastName & " " & firstName ' 間にスペースを入れて結合
MakeFullName = fullName
End Function
' テスト実行用のプロシージャ
Sub TestName()
Dim myName As String
myName = MakeFullName("田中", "太郎")
MsgBox "お名前は " & myName & " 様ですね。"
End Sub
実行結果は以下のようになります。
お名前は 田中 太郎 様ですね。
このように、複数の情報(引数といいます)を渡して、一つのまとまった結果を受け取ることができるのがFunctionプロシージャの強みです。
7. 条件によって戻り値を変える方法
さらにもう少し応用して、関数の中で条件分岐(If文)を使ってみましょう。例えば、点数を受け取って「合格」か「不合格」かの文字を返す関数です。
' 点数を受け取って判定を返す関数
Function JudgeScore(score As Integer) As String
If score >= 70 Then
JudgeScore = "合格"
Else
JudgeScore = "不合格"
End If
End Function
Sub CheckResult()
Dim point As Integer
point = 85
' 判定結果を変数に代入
Dim status As String
status = JudgeScore(point)
MsgBox "あなたの結果は " & status & " です。"
End Sub
このプログラムでは、もし point が85点なら「合格」という文字が戻り値として返ってきます。もし60点なら「不合格」が返ります。状況に応じて「戻す値」を柔軟に変えることができるのです。これは実務でも非常に多く使われるパターンです。
8. Excelのワークシート上で自作関数を使う
VBAで作ったFunctionプロシージャには、驚きの使い道があります。なんと、Excelのシート上で =SUM(A1:A10) のように、自分専用の関数として使えるのです!
例えば、先ほど作った GetTaxPrice 関数をVBAの「標準モジュール」という場所に書いておけば、Excelのセルに =GetTaxPrice(1000) と入力するだけで、セルに「1100」と表示されます。これを「ユーザー定義関数」と呼びます。
Excelに元から備わっている関数(VLOOKUPやIFなど)だけでは足りない計算を、自分で発明して追加できる。これができると、Excel作業の効率化は異次元のスピードになります。戻り値をマスターすることは、Excelを最強のツールに進化させる魔法を覚えるようなものなのです。
9. 初心者が間違いやすいポイントと注意点
戻り値を扱う際に、初心者がつまずきやすいポイントをいくつか紹介します。これを知っておくだけで、エラーに悩まされる時間を大幅に減らせます。
- 関数名への代入を忘れる: Functionの中で計算だけして、最後に
関数名 = 結果と書くのを忘れてしまうと、戻り値が空っぽ(0や空文字)になってしまいます。 - データ型の不一致: 戻り値を「整数(Integer)」と宣言したのに、中身で「文字」を返そうとするとエラーになります。箱(型)と中身(値)の種類は必ず合わせましょう。
- End Functionの書き忘れ: Functionの終わりには必ず
End Functionが必要です。SubプロシージャのEnd Subと混同しないように気をつけましょう。
最初は難しく感じるかもしれませんが、「何かを入れて、何かを返す箱を作る」という感覚を大切にしてください。何度もコードを書いていくうちに、自然と手が動くようになります。
10. 戻り値を理解してVBAをマスターしよう
戻り値の考え方は、VBAに限らず、JavaやPythonといった他のプログラミング言語でも共通の非常に重要な概念です。VBAでこの「値を返す仕組み」をしっかり理解しておけば、将来他の言語を学ぶ際にも大きなアドバンテージになります。
まずは、簡単な足し算を返す関数から作ってみてください。自分で作った関数が思い通りに動いて、正しい「戻り値」を返してくれた時の喜びは格別です。一歩ずつ、楽しみながらプログラミングの階段を上っていきましょう!