はじめに
VBAを学び始めると、最初にぶつかるのがこれ。
「FunctionとSubって何が違うの?」
名前も似ているし、どっちもコードを書くので混乱しますよね。
ですが、実は違いはとてもシンプルです。
- Function → 「計算した結果を返す」
-
Sub → 「処理を実行するだけ」
この記事では、プログラミング初心者でも理解できるように、
「お弁当屋さん」の例を使いながらやさしく解説します。
まずはコードを実行してみよう
この記事では Sub と Function の違いを説明しますが、実際に動かしてみると理解しやすくなります。
まずはVBAの実行方法を確認しておきましょう。
① Excelを開く
新規のExcelファイルを開きます。
② VBAエディタを開く
キーボードで
Alt + F11
を押します。
するとVBAエディタが開きます。
③ 標準モジュールを追加する
上部メニューから
挿入
↓
標準モジュール
をクリックします。
左側に
標準モジュール
└ Module1
が追加されればOKです。
④ コードを入力する
Module1をダブルクリックし、表示された白い画面にコードを入力します。
今回は次のコードを使います。
Sub あいさつ()
MsgBox "こんにちは!"
End Sub
⑤ コードを実行する
カーソルをコード内に置き、
F5
を押します。
または、
実行
↓
Sub/ユーザーフォームの実行
をクリックしても実行できます。
実行結果
こんにちは!
Functionの確認方法
Function 足し算(a, b)
足し算 = a + b
End Function
↓イミディエイトウィンドウが開く
Ctrl + G
↓開いたウィンドウに以下を入力する
? 足し算(3, 5)
↓そのままEnterを押す
8
が表示される
これでVBAの実行環境の準備は完了です。
以降は、この実行方法を使いながら Sub と Function の違いを確認していきます。
まずは結論から
Function(ファンクション)
「はい、これ使ってね!」と
結果を返してくれるもの
Function 足し算(a, b)
足し算 = a + b
End Function
Sub(サブ)
「やることを実行して終わり」のもの
Sub あいさつ()
MsgBox "こんにちは!"
End Sub
イメージで理解
Function は「お弁当を渡してくれる店員」
あなた:
唐揚げ弁当ください!
店員:
はい、唐揚げ弁当です!
ちゃんと「結果(お弁当)」が返ってきます。
Sub は「呼び込みスタッフ」
スタッフ:
いらっしゃいませー!!
これだけ。
何かを返してくれるわけではありません。
ただ「動作を実行しただけ」です。
実際のコードで見てみよう
Sub の例
Sub あいさつ()
MsgBox "こんにちは!"
End Sub
これは、
- メッセージを表示する
- それで終了
という処理です。
結果を返していません。
実行結果
こんにちは!
と表示されるだけです。
Function の例
Function 足し算(a, b)
足し算 = a + b
End Function
これは、
- 2つの数字を受け取る
- 計算する
- 結果を返す
という処理です。
呼び出してみる
Sub テスト()
Dim 結果
結果 = 足し算(3, 5)
MsgBox 結果
End Sub
実行結果
8
が表示されます。
重要なこと
Sub は「実行するだけ」
Sub 電気をつける()
MsgBox "電気ON"
End Sub
- 動作する
- でも値は返さない
Function は「結果を返す」
Function 消費税計算(金額)
消費税計算 = 金額 * 0.1
End Function
- 計算結果を返す
- 他の場所で使える
使い分けはこれだけ覚えればOK
| やりたいこと | 使うもの |
|---|---|
| 処理を実行したい | Sub |
| 計算結果を返したい | Function |
初心者が混乱しやすいポイント
「FunctionでもMsgBox使えるじゃん?」
その通りです。
Function テスト()
MsgBox "こんにちは"
End Function
これも動きます。
でも、本来のFunctionの役割は、
「値を返すこと」
です。
なので基本的には、
- 表示や操作 → Sub
- 計算や判定 → Function
と覚えるのがおすすめです。
実務ではどう使う?
Sub
- ボタンを押したら実行
- シート操作
- ファイル保存
- データ入力
など。
Function
- 合計計算
- 税率計算
- 判定処理
- 文字変換
など。
イメージすると覚えやすい
Sub
「仕事をする人」
Function
「答えを返してくれる人」
まとめ
Function
- 値を返す
- 計算向き
- 他の処理で使いやすい
Function 足し算(a, b)
足し算 = a + b
End Function
Sub
- 処理を実行する
- 値は返さない
- マクロ実行向き
Sub あいさつ()
MsgBox "こんにちは!"
End Sub
最後に
最初は、
「SubとFunctionどっち使えばいいの…?」
となりますが、実はかなり単純です。
- 「結果を返したい」 → Function
- 「処理だけしたい」 → Sub
まずはこれだけ覚えればOKです。
慣れてくると自然に使い分けできるようになります。
参考
- Microsoft Learn VBA Subプロシージャ
- Qiita VBA入門④ SubとFunctionって何が違うの?
-
VBAのSubとFunctionの違いとは?
SubとFunctionの「戻り値の違い」は、Microsoft Learnや複数のVBA解説記事でも共通して説明されています。 ([qiita.com][1])


