VBAで使用するSubとFunctionは、値を返すかどうかで決定的に異なります。Subは処理そのものを実行し、Functionは計算結果を値として返します。この違いを正しく理解し使い分けることで、コードの品質と保守性が大きく向上します。

VBAプログラミング SubとFunctionの違いを学ぶ
VBAプログラミング SubとFunctionの違いを学ぶ

VBAのSubとFunction、なぜ今注目されているのか

ExcelやAccessを使った業務でマクロを組む際、コードの使い分けに悩む人は少なくありません。最近では業務自動化の需要が高まり、VBAを活用するシーンが増加しています。

多くの初心者が「どのプロシージャを選べばいいか」と迷う理由は、両者の役割の違いを十分に理解していないためです。VBAXや各種技術フォーラムでも、SubとFunctionの使い分けに関する質問は常に上位に挙がっています。

これは基本的な部分ですが、これを理解しているかどうかでコードの読みやすさや拡張性が大きく変わります。

VBA SubとFunctionの構文比較図
VBA SubとFunctionの構文比較図

SubとFunctionの違い:基本から理解する

SubとFunctionはどちらもVBAのプロシージャであり、処理をまとめたブロックです。しかし役割に明確な違いがあります。

Subプロシージャとは

Sub(サブ)プロシージャは、処理を実行するものであり値を返しません。主にボタンクリックなどのイベント処理や、一連のアクションを実行したい場合に使用します。

  • 値を返さないため、呼び出し後は即座に制御が戻る
  • イベントプロシージャは全てSub形式
  • コードの構造がシンプルで分かりやすい

Functionプロシージャとは

Function(ファンクション)プロシージャは、計算や変換の結果を値として返します。Excelワークシート関数の自作に近いイメージです。

  • 名前を変数のように使い、値を返すことができる
  • ワークシート上から直接使用可能
  • 他のプロシージャから呼び出し、結果を利用できる

構文と機能の比較

項目 Subプロシージャ Functionプロシージャ
定義方法 Sub 名前() ... End Sub Function 名前() ... End Function
値を返す × 〇
ワークシート使用可能 × 〇(カスタム関数として)
メイン処理向け 〇 △(Callまたは変数に代入)
ByRef引数対応 〇 〇

実際にコードを書く際は、まず「値が必要かどうか」を確認することが大切です。値が必要な場合はFunction、単なる処理の流れならSubを選ぶのが基本です。[INTERNAL_LINK_1]

SubとFunctionの使い分け:実践ステップ

適切なプロシージャを選択することで、コードの可読性と保守性が向上します。以下の手順で判断しましょう。

  1. 処理の目的を明確にする:値を返す必要があるか、セルへの書き込みなどアクションを実行したいだけかを確認する
  2. 呼び出し元の設計を考える:結果を別の処理に渡す場合はFunction、処理を完結させたい場合はSub
  3. ワークシート連携を想定する:セル内数式として使用したい場合はFunctionのみ可能
  4. 保守性を優先する:後から読む人にとって意味が分かりやすい方を選ぶ

私が過去に運用してきたマクロの中でも、Functionを使いすぎるとコードが複雑化する傾向が見られました。シンプルな業務処理にはSubが適しているという実体験を持っています。

例えば、データの置換や書式調整など一連のアクションを行う場合はSubが適切です。一方、特定の条件に基づいて計算した値を返す場合はFunctionが向いています。

よくある誤解と注意点

VBAを学び始めた際に生じやすい誤解を挙げます。

  • 誤解1:FunctionはSubより優れている → 用途に応じて使い分けるもので、優劣はありません
  • 誤解2:Subは値を一切返せない → ByRef引数を使えば実質的に値を「返す」ことができます
  • 誤解3:Functionは常にワークシートから呼べる → Public指定が必要で、引数が複雑な場合エラーになることがある

ByRefとByValの違いを理解しておくことも重要です。ByRefは呼び出し元の値を変更できるため、Subを通じて複数値を返す効果を生みます。

この知識は誰に役立つか

VBAのSubとFunctionの違いを理解することは、以下の方々に特に役立ちます。

  • VBAをこれから学ぶ方:基本中の基本を早めに押さえておきたい
  • 業務でマクロ開発を行う社会人:コード品質と保守性を向上させたい
  • Excel操作の自動化を目指す一般ユーザー:より高度なカスタマイズが可能になる

Microsoftの公式ドキュメントも参考にしながら、着実にスキルを身につけていきましょう。公式ガイド / Research

次のステップへ

SubとFunctionの違いを理解したら、実際にコードを書いて体験してみるのが最も効果的な学び方です。小さなタスクから始めて、徐々に複雑なプロシージャへと進めていきましょう。

プロシージャ内にさらに小さなプロシージャを組み込むことで、コードの再利用性と読みやすさが大幅に向上します。ぜひ練習を続けてください。

Frequently Asked Questions

SubとFunctionの一番の違いは何ですか?

一番の違いは値を返すかどうかです。Functionは計算結果などの値を呼び出し元に返しますが、Subは処理を実行するだけで値を返ししません。これが両者の最も根本的な違いです。

Subでも値を返すことはできますか?

直接は返せませんが、ByRef引数を使用することで実質的に値を返すことができます。ByRefで渡した変数は、Sub内で変更された値が呼び出し元にも反映されます。

SubとFunctionは一緒に使うことができますか?

はい、一緒に使うことができます。メインの処理をSubで構成し、計算などの結果が必要な部分はFunctionとして切り離すのが一般的な設計です。この組み合わせにより、コードの再利用性と読みやすさが向上します。