カテゴリ: Excel VBA 更新日: 2026/02/23

Excel VBA Functionプロシージャの戻り値とは?初心者向けに使い方を徹底解説

戻り値とは?Functionプロシージャで値を返す方法をやさしく解説
戻り値とは?Functionプロシージャで値を返す方法をやさしく解説

先生と生徒の会話形式で理解しよう

生徒

「VBAで計算を自動化したいんですけど、計算した結果を別の場所で使い回すことってできますか?」

先生

「それは『Function(ファンクション)プロシージャ』と『戻り値(もどりち)』を使えば簡単に実現できますよ。」

生徒

「モドリチ……?なんだか難しそうですね。私、パソコン自体あまり詳しくないんですけど大丈夫でしょうか?」

先生

「大丈夫です!自動販売機でお金を入れて飲み物が出てくる仕組みに例えると、とても分かりやすいんです。一緒に仕組みを紐解いていきましょう!」

1. 戻り値(もどりち)とは?自動販売機で例えてみよう

1. 戻り値(もどりち)とは?自動販売機で例えてみよう
1. 戻り値(もどりち)とは?自動販売機で例えてみよう

プログラミングの世界には「戻り値」という言葉がよく出てきます。これを理解するのが、Excel VBAを使いこなすための第一歩です。

もっとも分かりやすい例えは「自動販売機」です。あなたが自動販売機に「150円」というデータ(お金)を入れたとします。すると、自動販売機の中で処理が行われ、最終的に「お茶」という結果(品物)が手元に返ってきますよね。この、最後に手元に返ってきた「お茶」こそが、プログラミングでいうところの「戻り値」なのです。

VBAにおける「関数(Function)」もこれと同じです。何か値を与えると、それを加工したり計算したりして、一つの答えを返してくれます。この「返してくれる値」のことを、専門用語で戻り値、あるいは返り値と呼びます。

2. FunctionプロシージャとSubプロシージャの違い

2. FunctionプロシージャとSubプロシージャの違い
2. FunctionプロシージャとSubプロシージャの違い

VBAには大きく分けて「Sub(サブ)プロシージャ」と「Function(ファンクション)プロシージャ」の2種類があります。初心者のうちはこの違いで迷うことが多いので、整理しておきましょう。

  • Subプロシージャ:「命令を実行して終わり」の処理。例えば、「セルに色を塗る」「メッセージを表示する」といった動作を担当します。
  • Functionプロシージャ:「計算して結果を返す」のが目的の処理。例えば、「消費税を計算する」「名前を結合する」など、何か答えが欲しいときに使います。

つまり、戻り値があるのがFunction、戻り値がないのがSubだと覚えておけば間違いありません。どちらもプログラムのまとまりである「プロシージャ」の一種ですが、役割がはっきりと分かれているのです。

3. Functionプロシージャの基本的な書き方

3. Functionプロシージャの基本的な書き方
3. Functionプロシージャの基本的な書き方

それでは、実際にどのようにコードを書くのかを見ていきましょう。Functionプロシージャを作る際は、以下のような決まった型(構文)があります。


Function 関数名(引数 As データ型) As 戻り値のデータ型
    ' ここで計算などの処理を行う
    関数名 = 計算結果 ' これが戻り値を返す記述
End Function

ここで重要なポイントが2つあります。

一つ目は、関数名そのものに値を代入することで、それが戻り値になるという点です。コードの最後の方で 関数名 = 〇〇 と書くことで、「この値を返しますよ!」という合図になります。

二つ目は、データ型を指定することです。データ型とは、その値が「数字(整数)」なのか「文字」なのかといった情報の種類のことです。初心者の方は、まずは「数字なら Integer(整数)や Long(大きい整数)」、「文字なら String」と指定すると覚えておきましょう。

4. 実践!消費税を計算する関数を作ってみよう

4. 実践!消費税を計算する関数を作ってみよう
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. 戻り値を使うメリットとは?

5. 戻り値を使うメリットとは?
5. 戻り値を使うメリットとは?

「わざわざFunctionを使わなくても、全部Subの中で書けばいいのでは?」と思うかもしれません。しかし、戻り値を使うことで、プログラムは劇的に管理しやすくなります。

メリット1:再利用ができる
一度「消費税計算」の関数を作っておけば、他のプログラムでもその関数を呼び出すだけで使い回せます。同じ計算式を何度も書く必要がなくなります。

メリット2:修正が楽になる
もし将来、消費税が15%に変わったとしても、修正するのは関数の中の1箇所だけで済みます。あちこちに計算式を散らばらせていると、探し出すだけで一苦労ですが、関数化していれば一瞬で修正が終わります。

メリット3:プログラムが読みやすくなる
メインの処理(Sub)の中に細かい計算がぎっしり書いてあると、後で見返したときに何をしようとしているのか分かりにくくなります。計算をFunctionに任せることで、メインの処理がスッキリと整理されます。

6. 文字を組み合わせて返す関数

6. 文字を組み合わせて返す関数
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. 条件によって戻り値を変える方法

7. 条件によって戻り値を変える方法
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のワークシート上で自作関数を使う

8. Excelのワークシート上で自作関数を使う
8. Excelのワークシート上で自作関数を使う

VBAで作ったFunctionプロシージャには、驚きの使い道があります。なんと、Excelのシート上で =SUM(A1:A10) のように、自分専用の関数として使えるのです!

例えば、先ほど作った GetTaxPrice 関数をVBAの「標準モジュール」という場所に書いておけば、Excelのセルに =GetTaxPrice(1000) と入力するだけで、セルに「1100」と表示されます。これを「ユーザー定義関数」と呼びます。

Excelに元から備わっている関数(VLOOKUPやIFなど)だけでは足りない計算を、自分で発明して追加できる。これができると、Excel作業の効率化は異次元のスピードになります。戻り値をマスターすることは、Excelを最強のツールに進化させる魔法を覚えるようなものなのです。

9. 初心者が間違いやすいポイントと注意点

9. 初心者が間違いやすいポイントと注意点
9. 初心者が間違いやすいポイントと注意点

戻り値を扱う際に、初心者がつまずきやすいポイントをいくつか紹介します。これを知っておくだけで、エラーに悩まされる時間を大幅に減らせます。

  • 関数名への代入を忘れる: Functionの中で計算だけして、最後に 関数名 = 結果 と書くのを忘れてしまうと、戻り値が空っぽ(0や空文字)になってしまいます。
  • データ型の不一致: 戻り値を「整数(Integer)」と宣言したのに、中身で「文字」を返そうとするとエラーになります。箱(型)と中身(値)の種類は必ず合わせましょう。
  • End Functionの書き忘れ: Functionの終わりには必ず End Function が必要です。Subプロシージャの End Sub と混同しないように気をつけましょう。

最初は難しく感じるかもしれませんが、「何かを入れて、何かを返す箱を作る」という感覚を大切にしてください。何度もコードを書いていくうちに、自然と手が動くようになります。

10. 戻り値を理解してVBAをマスターしよう

10. 戻り値を理解してVBAをマスターしよう
10. 戻り値を理解してVBAをマスターしよう

戻り値の考え方は、VBAに限らず、JavaやPythonといった他のプログラミング言語でも共通の非常に重要な概念です。VBAでこの「値を返す仕組み」をしっかり理解しておけば、将来他の言語を学ぶ際にも大きなアドバンテージになります。

まずは、簡単な足し算を返す関数から作ってみてください。自分で作った関数が思い通りに動いて、正しい「戻り値」を返してくれた時の喜びは格別です。一歩ずつ、楽しみながらプログラミングの階段を上っていきましょう!

カテゴリの一覧へ
新着記事
New1
Office Scripts
Office Scriptsで日付判定!Excel条件付き書式を自動化して期限管理をラクにする方法
New2
Office Scripts
Office Scripts普及の歴史とMicrosoftの方向性!Excel自動化が進化してきた流れをやさしく解説
New3
Excel VBA
Excel VBA関数を用途別に作成!計算・文字列処理の基本を初心者向けに解説
New4
Office Scripts
Office Scriptsで条件付き書式を自動化!数値変化に応じてExcelの書式を自動更新する方法
人気記事
No.1
Java&Spring記事人気No1
Excel VBA
Excelマクロのセキュリティ設定の基本!安全に実行するための信頼センター設定まとめ
No.2
Java&Spring記事人気No2
Office Scripts
Office Scriptsでできること・できないことを完全整理!Excel自動化の基本と限界をやさしく解説
No.3
Java&Spring記事人気No3
Excel VBA
目的別にモジュールを分割する方法!処理単位で整理して見やすくするテクニック
No.4
Java&Spring記事人気No4
Excel VBA
Excel VBAとOffice Scriptsの違いを比較!初心者でもわかる学ぶべきスキル
No.5
Java&Spring記事人気No5
Excel VBA
Excel VBA基本文法の総まとめ!初心者が必ず押さえるべき20の基礎ポイント完全ガイド
No.6
Java&Spring記事人気No6
Office Scripts
Office Scriptsで条件付き書式を自動化!Excel自動化初心者向けスクリプト操作の基本
No.7
Java&Spring記事人気No7
Excel VBA
Excel VBAの開発環境を最速で整える!VBEの開き方から基本操作まで完全ガイド
No.8
Java&Spring記事人気No8
Excel VBA
Excel VBA参照設定エラー「参照が見つかりません」を完全解説!初心者でも原因と対処法がわかる