Excel VBA サブルーチン: VBA で Sub を呼び出す方法と例

⚡ スマートサマリー

Excel VBA サブルーチンは、値を返さずにタスクを実行するコードブロックをまとめたものです。このページでは、命名規則、サブルーチンの構文、コマンドボタンからのサブルーチンの呼び出し方、およびサブルーチンと関数の違いについて説明します。

  • 📦 定義: サブルーチンは特定のタスクを実行し、呼び出し元のコードには値を返しません。
  • ♻️ 再利用性: 1つのサブルーチンは、プロジェクト内のどこからでも複数回呼び出すことができます。
  • 🔤 命名規則: 名前にはスペースが含まれず、文字またはアンダースコアで始まり、VBAキーワードであってはなりません。
  • 🧾 構文: Private Sub name(ByVal arg As String) でブロックを開始し、End Sub でブロックを閉じます。
  • 🖱️ 呼び出し: コマンドボタンのクリックイベントはサブルーチンを呼び出し、その引数を渡します。
  • ▶ 直接実行: F5キー、マクロダイアログ、またはCallキーワードのいずれかを使用すると、ボタンを使わずにサブルーチンを実行できます。
  • 🔁 サブ機能または関数: 値を返す必要がある場合は関数を選択し、そうでない場合はサブルーチンを選択してください。

Excel VBA サブルーチン

VBAのサブルーチンとは何ですか?

A VBAのサブルーチン コードに記述されている特定のタスクを実行しますが、結果や値を返さないコードの一部です。 サブルーチンは、大きなコードを管理しやすい小さな部分に分割するために使用されます。 サブルーチンは、プログラム内のどこからでも何度でも呼び出すことができます。

ユーザー入力データを受け入れるためのテキスト ボックスを備えたユーザー インターフェイスを作成したとします。テキスト ボックスの内容をクリアするサブルーチンを作成できます。このようなシナリオでは結果を返さないため、VBA 呼び出しサブルーチンが適しています。

サブルーチンを使用する理由

  • コードを管理しやすい小さなコードに分割する: 平均的なコンピュータ プログラムには、何千行ものソース コード行があります。これにより、複雑さが生じます。サブルーチンは、プログラムを管理しやすい小さなコード チャンクに分割することで、この問題を解決します。
  • Code 再利用性データベースにアクセスするプログラムがあるとします。プログラム内のほぼすべてのウィンドウはデータベースとやり取りする必要があります。これらのウィンドウに個別のコードを書く代わりに、すべてのデータベースとのやり取りを処理する関数を作成できます。その後、任意のウィンドウからその関数を呼び出すことができます。
  • サブルーチンと関数は自己文書化されています。 CalculateLoanInterest という関数と、connectToDatabase という関数があるとします。 プログラマは、サブルーチン/関数の名前を見るだけで、そのプログラムが何を行うのかを知ることができます。

コンパイラは、名前を書き込む前に、その名前が一連の短い規則に従っていることを期待します。

サブルーチンと関数の命名規則

サブルーチンや関数を使用するには、従わなければならない一連のルールがあります。

  • サブルーチンまたは VBA 呼び出し関数名にはスペースを含めることはできません
  • Excel VBA Call Sub または関数名は、文字またはアンダースコアで始まる必要があります。 数字や特殊文字で始めることはできません
  • サブルーチン名または関数名をキーワードにすることはできません。 キーワードとは、特別な意味を持つ単語です。 VBA。 Private、Sub、Function、End などの単語はすべてキーワードの例です。 コンパイラはこれらを特定のタスクに使用します。

有効な名前が選択されると、宣言自体は決まったパターンに従います。

VBA サブルーチン構文

この例に従うには、Excel の [開発] タブを有効にする必要があります。 「開発」タブを有効にする方法がわからない場合は、次のチュートリアルをお読みください。 Excel の VBA コントロール

ここの構文では、

Private Sub mySubRoutine(ByVal arg1 As String, ByVal arg2 As String)
    'do something
End Sub

構文説明

Code 行動
  • 「プライベートサブ mySubRoutine(…)」
  • ここでは、キーワード「Sub」を使用して「mySubRoutine」という名前のサブルーチンを宣言し、サブルーチンの本体を開始します。
  • キーワード Private は、サブルーチンの範囲を指定するために使用されます。
  • 「文字列としての ByVal arg1、文字列としての ByVal arg2」:
  • 文字列データ型名の1つのパラメータarg2とargXNUMXを宣言します。
  • 「エンドサブ」
  • 「End Sub」はサブルーチン本体の終了に使用します。

次のサブルーチンは、姓と名を受け入れ、それをメッセージ ボックスに表示します。

次に、このサブプロシージャをプログラムして実行します。 これを見てみましょう。

VBAでSubを呼び出す方法

以下は、VBA で Sub を呼び出す方法を段階的に示したプロセスです。

  1. ユーザー インターフェイスを設計し、ユーザー コントロールのプロパティを設定します。
  2. サブルーチンを追加する
  3. サブルーチンを呼び出すコマンド ボタンのクリック イベント コードを記述します。
  4. アプリケーションをテストする

ステップ1) ユーザーインターフェース

以下の図に示すようにユーザー インターフェイスを設計します。

VBAでSubを呼び出す方法

次のプロパティを設定します。設定するプロパティは次のとおりです。

S / N 管理 プロパティ 値
1 コマンドボタン1 名前 btn表示フルネーム
2 キャプション フルネームサブルーチン

インターフェースは次のようになります。

VBAでSubを呼び出す方法

ステップ2) サブルーチンの追加

  1. Alt + F11 を押してコード ウィンドウを開きます
  2. 次のサブルーチンを追加します
Private Sub displayFullName(ByVal firstName As String, ByVal lastName As String)
    MsgBox firstName & " " & lastName
End Sub

ここのコードでは、

Code
  • 「プライベートサブディスプレイフルネーム(…)」
  • 2 つの文字列パラメータを受け入れるプライベート サブルーチン displayFullName を宣言します。
  • 「文字列として ByVal firstName、文字列として ByVal lastName」
  • 2つのパラメータ変数firstNameとlastNameを宣言します。
  • メッセージBox 名前苗字"
  • それはメッセージを呼び出しますBox メッセージ ボックスを表示する組み込み関数。次に、'firstName' および 'lastName' 変数をパラメーターとして渡します。
  • アンパサンド「&」は XNUMX つの変数を連結し、それらの間に空のスペースを追加するために使用されます。

ステップ3) サブルーチンの呼び出し

コマンドボタンのクリックイベントからサブルーチンを呼び出します。

  • 下の画像に示すように、コマンドボタンを右クリックします。[表示]を選択します。 Code.
  • コードエディタが開きます

VBAでSubを呼び出す方法

コード エディターで、btnDisplayFullName コマンド ボタンのクリック イベントに次のコードを追加します。

Private Sub btnDisplayFullName_Click()
    displayFullName "John", "Doe"
End Sub

コード ウィンドウは次のようになります。

VBAでSubを呼び出す方法

変更を保存し、コード ウィンドウを閉じます。

ステップ4) コードのテスト

開発者ツールバーでデザインモードを「オフ」にします。 以下に示すように。

VBAでSubを呼び出す方法

ステップ5) コマンドボタン「FullNameサブルーチン」をクリックします。

次のような結果が得られます

VBAでSubを呼び出す方法

上記のExcelファイルをダウンロードしてください。 Code

ボタンは便利ですが、サブルーチンを開始する唯一の方法ではありませんし、開発中は必ずしも最速の方法とは限りません。

ボタンを使わずにサブルーチンを実行する方法

コードを記述している最中に、サブルーチンをテストするためだけにシートにコントロールを追加するのは時間の無駄です。VBAにはサブルーチンを実行するための他の4つの方法があり、それぞれ開発サイクルの異なる段階に適しています。

  • エディターでF5キーを押してください。 カーソルをサブルーチン内の任意の場所に置いてF5キーを押すと、すぐに実行されます。ただし、これはサブルーチンが引数を取らない場合にのみ有効です。VBAには引数として渡す値がないためです。
  • F8キーでステップ実行: 同じ処理を1行ずつ実行することで、ローカル変数ウィンドウで各変数の変化を確認できます。結果が間違っていて、どこが間違っているのかを確認する必要がある場合に使用してください。
  • マクロダイアログを使用します。 開発者タブで「マクロ」をクリックし、名前を選択して「実行」をクリックします。このリストには引数のないパブリックサブルーチンのみが表示されるため、ヘルパーサブルーチンは通常プライベートとして宣言されます。
  • 別のサブから呼び出します: これは引数を取るすべてのサブルーチンで使用される方法であり、上記のコマンドボタンが依存している方法でもあります。

最後のオプションには、2つの有効な形式があります。名前の後に引数をそのまま記述する方法と、明示的にCallキーワードを使用する方法の2つです。ただし、括弧のルールはそれぞれ異なります。

Sub RunTheGreeting()
    ' Form 1: no Call keyword, no brackets
    displayFullName "John", "Doe"

    ' Form 2: Call keyword, brackets required
    Call displayFullName("Jane", "Roe")
End Sub

どちらの行も全く同じ処理を行います。Call キーワードを使用せずに括弧を記述するなど、この2つの形式を混在させることが、Sub が複数の引数を取る場合に「Expected: =」というコンパイルエラーが発生する最も一般的な原因です。

VBAにおけるサブルーチンと関数の違い

VBAにはSubとFunctionという2種類のプロシージャがありますが、初心者はしばしば間違った方を選んでしまいます。判断基準はシンプルです。呼び出し元のコードは値を返す必要があるでしょうか?

機能 サブ 演算
値を返す いいえ はい、関数名に割り当てられています
宣言済み サブ … エンドサブ 関数…関数終了
と呼ばれる それ自体で声明 式の一部、例えば x = myFunc(2)
ワークシートのセルで使用可能 いいえ はい、ユーザー定義関数として
典型的な使用 シートの書式設定、入力内容のクリア、メッセージの表示 合計を計算する、値を変換する、データを検索する

コードがワークブックに対して動作する場合は Sub を使用し、 VBA関数 コードが、他の何かが利用するような答えを生成するとき。

よくあるご質問

プライベートサブルーチンは、それを宣言したモジュール内からのみ呼び出すことができます。パブリックサブルーチンは、プロジェクト内のすべてのモジュールからアクセス可能であり、マクロダイアログに表示される唯一の種類のサブルーチンです。

ByVal はコピーを渡すため、サブルーチンは呼び出し元の変数を変更できません。ByRef は変数自体を渡すため、変更内容は呼び出し元に反映されます。どちらのキーワードも指定しない場合は、ByRef がデフォルトになります。

Exit Sub ステートメントを使用してください。このステートメントは、その時点でプロシージャを停止し、呼び出し元に制御を戻します。これは、検証テストが失敗した場合に早期に終了する場合に便利です。

はい。マクロを貼り付けると、AIアシスタントが関連する行をグループ化し、新しいサブルーチンごとに分かりやすい名前を提案し、元のコードを短い呼び出しシーケンスに書き換えます。ワークブックのコピーで結果をテストしてください。

はい。エラーメッセージと呼び出し元の行を入力すると、AIアシスタントがCallキーワードなしで括弧が使用されている、引数の数が間違っている、データ型が一致していないなどの原因を特定し、修正後の行を提供します。