VBAの「関数」と「サブ」プロシージャ

組み込みの VBA 関数

独自の VBA 関数の作成を開始する前に、Excel VBA には、コードの記述中に使用できる組み込み関数の豊富なコレクションがあることを知っておくとよいでしょう。

これらの関数のリストは、VBA エディターで表示できます。

  • Excel ワークブックを開き、VBA エディターを起動します (クリックして実行します)。 Altキー+ F11)、を押します F2.
  • 画面左上のドロップダウンリストからライブラリを選択 VBA.
  • 組み込みの VBA クラスと関数のリストが表示されます。 関数名をクリックすると、ウィンドウの下部に簡単な説明が表示されます。 押す F1 その機能のオンライン ヘルプ ページが開きます。

さらに、例を含む組み込み VBA 関数の完全なリストは、Visual Basic デベロッパー センターにあります。

VBA のカスタム プロシージャ「Function」と「Sub」

Excel Visual Basic では、特定のタスクを実行する一連のコマンドがプロシージャに配置されます。 演算 (機能)または サブ (サブルーチン)。 手順の主な違い 演算 и サブ その手順ですか 演算 結果を返す、プロシージャ サブ - いいえ。

したがって、アクションを実行して何らかの結果を得る必要がある場合 (たとえば、いくつかの数値を合計するなど)、通常はこの手順が使用されます。 演算、いくつかのアクション (たとえば、セルのグループの書式設定を変更するなど) を単純に実行するには、手順を選択する必要があります サブ.

Arguments

引数を使用して、さまざまなデータを VBA プロシージャに渡すことができます。 プロシージャの宣言時に引数リストを指定します。 たとえば、手順 サブ VBA では、指定された整数 (Integer) を選択した範囲の各セルに追加します。 次のように、引数を使用してこの番号をプロシージャに渡すことができます。

Sub AddToCells(i As Integer) ... End Sub

プロシージャには引数があることに注意してください 演算 и サブ VBA ではオプションです。 一部のプロシージャは、引数を必要としません。

オプションの引数

VBA プロシージャには、オプションの引数を指定できます。 これらは、必要に応じてユーザーが指定できる引数であり、省略された場合、プロシージャはそれらのデフォルト値を使用します。

前の例に戻ると、関数への整数引数をオプションにするには、次のように宣言します。

Sub AddToCells (オプション i As Integer = 0)

この場合、整数引数 i デフォルトは 0 です。

プロシージャにはいくつかのオプションの引数を含めることができ、それらはすべて引数リストの最後にリストされています。

引数の値渡しと参照渡し

VBA の引数は、次の XNUMX つの方法でプロシージャに渡すことができます。

  • ByValを – 引数を値で渡す。 つまり、値 (つまり、引数のコピー) のみがプロシージャに渡されるため、プロシージャ内で引数に加えられた変更は、プロシージャが終了すると失われます。
  • ByRefの – 参照による引数の受け渡し。 つまり、メモリ内の引数位置の実際のアドレスがプロシージャに渡されます。 プロシージャ内の引数に加えられた変更は、プロシージャの終了時に保存されます。

キーワードの使用 ByValを or ByRefの プロシージャ宣言では、引数をプロシージャに渡す方法を指定できます。 これを以下の例に示します。

Sub AddToCells(ByVal i As Integer) ... End Sub
この場合、整数引数 i 値渡し。 手続き終了後 サブ すべてで作られました i 変更は失われます。
Sub AddToCells(ByRef i As Integer) ... End Sub
この場合、整数引数 i 参照渡し。 手続き終了後 サブ すべてで作られました i 変更は、プロシージャに渡された変数に格納されます サブ.

VBA の引数は、デフォルトで参照によって渡されることに注意してください。 つまり、キーワードを使わないと ByValを or ByRefのの場合、引数は参照によって渡されます。

手続きを進める前に 演算 и サブ より詳細には、これら XNUMX 種類の手順の特徴と違いをもう一度見てみると役立ちます。 以下は、VBA の手順の簡単な説明です。 演算 и サブ と簡単な例が示されています。

VBA プロシージャ «関数»

VBA エディタは手順を認識します 演算次の開始ステートメントと終了ステートメントで囲まれたコマンドのグループに遭遇した場合:

関数 ... 終了関数

手順は先述の通り、 演算 VBA で (とは対照的に サブ) 値を返します。 戻り値には次の規則が適用されます。

  • 戻り値のデータ型は、プロシージャのヘッダーで宣言する必要があります 演算.
  • 戻り値を含む変数には、プロシージャと同じ名前を付ける必要があります 演算. この変数は、プロシージャの不可欠な部分として常に存在するため、個別に宣言する必要はありません。 演算.

これは、次の例でよく説明されています。

VBA 関数の例: 3 つの数値に対して数学演算を実行する

以下は、VBA プロシージャ コードの例です。 演算型の XNUMX つの引数を取ります ダブル (倍精度浮動小数点数)。 その結果、プロシージャは別の数の型を返します。 ダブル最初の XNUMX つの引数の合計から XNUMX 番目の引数を引いた値に等しい:

関数 SumMinus(dNum1 As Double、dNum2 As Double、dNum3 As Double) As Double SumMinus = dNum1 + dNum2 - dNum3 終了関数

この非常に単純な VBA 手順 演算 は、引数を介してデータがプロシージャに渡される方法を示しています。 プロシージャによって返されるデータ型が次のように定義されていることがわかります。 ダブル (言葉は言う ダブルとして 引数のリストの後)。 この例は、手順の結果がどのようになるかも示しています。 演算 プロシージャ名と同じ名前の変数に格納されます。

VBAプロシージャ「関数」の呼び出し

上記の簡単な手順なら 演算 Visual Basic エディターでモジュールに挿入された場合、他の VBA プロシージャから呼び出したり、Excel ワークブックのワークシートで使用したりできます。

別のプロシージャから VBA プロシージャ「Function」を呼び出す

手順 演算 そのプロシージャを変数に割り当てるだけで、別の VBA プロシージャから呼び出すことができます。 次の例は、プロシージャの呼び出しを示しています スミナス、上で定義されています。

Sub main() Dim total as Double total = SumMinus(5, 4, 3) End Sub

ワークシートから VBA プロシージャ「関数」を呼び出す

VBA 手順 演算 他の組み込み Excel 関数と同じ方法で Excel ワークシートから呼び出すことができます。 したがって、前の例で作成したプロシージャは 演算スミナス ワークシートのセルに次の式を入力して呼び出すことができます。

=SumMinus(10, 5, 2)

VBA プロシージャ «Sub»

VBAエディタはその前に手続きがあることを理解している サブ次の開始ステートメントと終了ステートメントで囲まれたコマンドのグループに遭遇した場合:

サブ ... サブの終了

VBA手順「Sub」:例1.選択範囲のセルの中央揃えと文字サイズ変更

簡単な VBA 手順の例を考えてみましょう サブ、そのタスクは、選択したセル範囲の書式を変更することです。 セルは (垂直方向と水平方向の両方で) 中央に配置され、フォント サイズはユーザー指定に変更されます。

Sub Format_Centered_And_Sized(オプションの iFontSize As Integer = 10) Selection.Horizo​​ntalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

この手順 サブ アクションを実行しますが、結果を返しません。

この例では、オプションの引数も使用しています フォントサイズ。 引数の場合 フォントサイズ プロシージャに渡されない サブの場合、デフォルト値は 10 です。ただし、引数が フォントサイズ 手続きに渡される サブの場合、選択されたセル範囲は、ユーザーが指定したフォント サイズに設定されます。

VBA サブ プロシージャ: 例 2: 選択したセル範囲の中央揃えと太字フォント

次の手順は、先ほど説明した手順と似ていますが、今回は、サイズを変更する代わりに、選択したセル範囲に太字のフォント スタイルを適用します。 これは手順の例です サブ、引数を取らない:

Sub Format_Centered_And_Bold() Selection.Horizo​​ntalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

Excel VBAで「Sub」プロシージャを呼び出す

別のプロシージャから VBA プロシージャ「Sub」を呼び出す

VBA プロシージャを呼び出すには サブ 別の VBA プロシージャから、キーワードを記述する必要があります コー​​ル、手続き名 サブ さらに括弧内は手続きの引数です。 これを以下の例に示します。

Sub main() Call Format_Centered_And_Sized(20) End Sub

手続きすれば フォーマット_中心_アンド_サイズ 複数の引数がある場合は、コンマで区切る必要があります。 このような:

Sub main() Call Format_Centered_And_Sized(arg1, arg2, ...) End Sub

ワークシートから VBA プロシージャ「Sub」を呼び出す

手順 サブ 手順で実行できるように、Excel シートのセルに直接入力することはできません 演算手続きだから サブ 値を返しません。 ただし、手続き サブ、引数を持たず、次のように宣言されます 公共 (以下に示すように)ワークシートのユーザーが利用できます。 したがって、上で説明した簡単な手順であれば、 サブ Visual Basic Editor でモジュールに挿入された、手順 Format_Centered_And_Bold Excel ワークシートで使用できるようになり、手順 フォーマット_中心_アンド_サイズ – 引数があるため使用できません。

プロシージャを実行 (または実行) する簡単な方法を次に示します。 サブ、ワークシートからアクセス可能:

  • イベント Altキー+ F8 (キーを押します 他の 押しながら キーを押す F8).
  • 表示されるマクロのリストで、実行するマクロを選択します。
  • イベント ラン (走る)

手続きを行うには サブ すばやく簡単にキーボード ショートカットを割り当てることができます。 このため:

  • イベント Altキー+ F8.
  • 表示されるマクロのリストで、キーボード ショートカットを割り当てるマクロを選択します。
  • イベント 計測パラメータ (オプション) をクリックし、表示されるダイアログ ボックスで、キーボード ショートカットを入力します。
  • イベント OK ダイアログを閉じます マクロ (大きい)。

注意: マクロにキーボード ショートカットを割り当てるときは、Excel で標準として使用されていないことを確認してください (たとえば、 Ctrlキー+ C)。 既存のキーボード ショートカットを選択すると、それがマクロに再割り当てされるため、ユーザーが誤ってマクロを開始する可能性があります。

VBA プロシージャ スコープ

このチュートリアルのパート 2 では、変数と定数の範囲とキーワードの役割について説明しました。 公共 и プライベート. これらのキーワードは、VBA プロシージャでも使用できます。

Public Sub AddToCells(i As Integer) ... End Sub
プロシージャ宣言の前にキーワードがある場合 公共の場合、プロシージャはその VBA プロジェクト内のすべてのモジュールで使用できます。
Private Sub AddToCells(i As Integer) ... End Sub
プロシージャ宣言の前にキーワードがある場合 プライベートの場合、この手順は現在のモジュールでのみ使用できます。 他のモジュール内または Excel ワークブックから呼び出すことはできません。

VBA プロシージャを宣言する前に、 演算 or サブ キーワードが挿入されていない場合、デフォルトのプロパティがプロシージャに設定されます 公共 (つまり、この VBA プロジェクトのどこでも使用できます)。 これは、デフォルトで変数宣言とは対照的です。 プライベート.

VBA プロシージャ「Function」と「Sub」の早期終了

VBA プロシージャの実行を終了する必要がある場合 演算 or サブ、その自然な終了を待たずに、このために演算子があります 終了機能 и サブを終了. これらの演算子の使用法を、例として簡単な手順を使用して以下に示します。 演算さらに操作を実行するための肯定的な引数を受け取ることを期待する です。 正でない値がプロシージャに渡された場合、それ以上の操作は実行できないため、ユーザーにエラー メッセージを表示し、プロシージャをすぐに終了する必要があります。

Function VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 If sVAT_Rate <= 0 then MsgBox "sVAT_Rate の正の値を予期しましたが、受信しました " & sVAT_Rate Exit Function End If ... End Function

お手続き前にご注意ください 演算 - VAT_金額、組み込みの VBA 関数がコードに挿入されます MsgBox、ユーザーに警告ポップアップを表示します。

コメントを残す