Excel VBA 関数チュートリアル: リターン、呼び出し、例

⚡ スマートサマリー

Excel VBA関数は、タスクを実行し、呼び出し元に結果を返すコードブロックです。このページでは、宣言構文、値の返される方法、計算例、ワークシートのセル内で関数を使用する方法について説明します。

  • 🎯 定義: 関数は特定のタスクを実行し、呼び出し元のコードに単一の結果を返します。
  • 🧾 構文: 関数名(引数) を型としてブロックを開始し、End Function でブロックを閉じます。
  • ↩️ 値を返す: 結果を関数名に代入します(例:add)。Numbers = 最初の数値 + 2 番目の数値。
  • 🔢 戻り値の型: As Long または As を宣言する Double デフォルトの低速なバリアントを回避します。
  • 🖱️ 呼び出し: コマンドボタンは2つの数値を渡し、返された合計値をメッセージボックスに表示します。
  • 📊 ワークシートの使い方: 標準モジュール内のパブリック関数は、任意のセル内でユーザー定義の数式になります。

Excel VBA関数

関数とは

関数は、特定のタスクを実行して結果を返すコードの一部です。 関数は主に、出力用のデータの書式設定や計算の実行など、反復的なタスクを実行するために使用されます。

あなたが開発していると仮定しますping ローンの利息を計算するプログラムを作成します。ローン金額と返済期間を受け取る関数を作成し、その関数を使って利息を計算し、結果を返します。

関数を使用する理由

関数を使用する利点は、サブルーチンの場合と同様です。長いプログラムを扱いやすい部分に分割でき、プロジェクト内のどこからでも再利用でき、説明的な名前によってコードの動作を文書化できます。 Excel VBAサブルーチンチュートリアル これらの給付を完全にカバーします。

関数の命名規則

命名規則もサブルーチンの場合と同じです。関数名にはスペースを含めることはできず、文字またはアンダースコアで始まる必要があり、予約語を使用することはできません。 VBA Function、Private、Endなどのキーワード。

関数を宣言するための VBA 構文

Private Function myFunction (ByVal arg1 As Integer, ByVal arg2 As Integer)
    myFunction = arg1 + arg2
End Function

ここの構文では、

Code 行動
  • 「プライベート関数 myFunction(…)」
  • ここでは、キーワード「Function」を使用して「myFunction」という名前の関数を宣言し、関数の本体を開始します。
  • キーワード「Private」は、関数のスコープを指定するために使用されます。
  • 「ByVal arg1 を整数として、ByVal arg2 を整数として」
  • 「arg1」と「arg2」という名前の整数データ型の XNUMX つのパラメータを宣言します。
  • myFunction = arg1 + arg2
  • 式 arg1 + arg2 を評価し、結果を関数の名前に割り当てます。
  • 「終了機能」
  • 「End Function」は、関数の本体を終了するために使用されます。

値を返して関数のデータ型を設定する方法

関数にはサブルーチンにはない役割が一つあります。それは値を返すことです。その値を制御する要素は二つあり、どちらも見落としやすいものです。

まず、代入です。VBAにはReturn文がありません。代わりに、結果を関数の名前に代入します。そのため、次の行は次のようになります。 myFunction = arg1 + arg2その代入が一度も実行されない場合、関数はエラーを発生させる代わりに黙って空の値を返すため、コードのすべての分岐でそれを設定する必要があります。

2つ目は戻り値の型です。上記の宣言は閉じ括弧で終わっているため、関数はVariant型を返します。括弧の後にAs句を追加することで型が固定され、処理速度が向上し、メモリ使用量も削減され、コンパイラが型の不一致を検出できるようになります。

宣言 返品 いつ使用するか
関数 f(x As Long) バリアント 結果のタイプが本当に異なる場合にのみ
関数 f(x As Long) As Long 長い 個数や行番号などの整数
関数 f(x As Long) As Double Double 小数を生成するあらゆる計算
関数 f(x As Long) As String String 表示用にフォーマットされたテキストが返されました。
関数 f(x As Long) As Boolean ブーリアン 真偽を答える検証チェック

💡ヒント: Exit Function を使用すると、戻り値が設定されたらすぐに処理を終了できます。これは、Exit Sub がサブルーチンを終了するのと同様です。

関数の例を示します:

関数はサブルーチンと非常によく似ています。サブルーチンと関数の主な違いは、関数は呼び出されたときに値を返すことです。一方、サブルーチンは呼び出されたときに値を返しません。たとえば、2 つの数値を加算するとします。2 つの数値を受け入れてその数値の合計を返す関数を作成できます。

  1. ユーザーインターフェースを作成する
  2. 機能を追加する
  3. コマンドボタンのコードを書く
  4. コードをテストする

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

以下に示すように、ワークシートにコマンド ボタンを追加します。

VBA 関数とサブルーチン

CommandButton1 の以下のプロパティを以下のように設定してください。

S / N 管理 プロパティ
1 コマンドボタン1 名前 ボタン追加Numbers
2 キャプション 追加 Numbers 演算

インターフェースは次のように表示されるはずです。

VBA 関数とサブルーチン

ステップ2) 機能コード。

  1. Alt + F11 を押してコード ウィンドウを開きます
  2. 次のコードを追加します
Private Function addNumbers(ByVal firstNumber As Integer, ByVal secondNumber As Integer)
    addNumbers = firstNumber + secondNumber
End Function

ここのコードでは、

Code 行動
  • 「プライベート機能追加」Numbers(...) "
  • プライベート関数「add」を宣言しますNumbers」は 2 つの整数パラメーターを受け取ります。
  • 「整数としての ByVal firstNumber、整数としての ByVal SecondNumber」
  • 2つのパラメータ変数firstNumberとsecondNumberを宣言します。
  • "追加Numbers = 最初の番号 + 2 番目の番号」
  • firstNumber と SecondNumber の値を加算し、加算する合計を割り当てます。Numbers.

ステップ3)書く Code 関数を呼び出す

  1. btnAddを右クリックしますNumbers コマンドボタン
  2. 「表示」を選択 Code
  3. 次のコードを追加します
Private Sub btnAddNumbers_Click()
    MsgBox addNumbers(2, 3)
End Sub

ここのコードでは、

Code 行動
「メッセージBox 加えますNumbers(2,3)」
  • 関数 add を呼び出しますNumbers 2と3をパラメータとして渡します。関数は5つの数値の合計XNUMXを返します。

ステップ4) プログラムを実行すると、次の結果が得られます。

VBA 関数とサブルーチン

上記のコードを含む Excel をダウンロード

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

上記のボタンは、VBAコードから関数を呼び出します。関数は、ボタンを使わずにワークシート自体から直接呼び出すこともできます。

ワークシートのセルでVBA関数を使用する方法

VBAで記述された関数は、SUMやVLOOKUPと同じようにセルに入力できます。Excelではこれをユーザー定義関数(UDF)と呼び、多くの人がサブルーチンよりも先に関数を学ぶ理由となっています。ただし、3つの条件を満たす必要があります。

  • 標準モジュールに配置してください。 エディターにモジュールを挿入します。ワークシートの背後または ThisWorkbook に格納されている関数は、数式バーには表示されません。
  • 公開する: 上記の例では「Private」を使用していますが、これはExcelから非表示にするものです。「Public」がデフォルトなので、キーワードを削除するだけで十分です。
  • 値を返し、何も変更しません。 UDF(ユーザー定義関数)では、セルの書式設定、行の削除、他のセルへの書き込みはできません。Excelはこれらの操作をブロックし、セルには#VALUE!が表示されます。

以下の関数は温度を変換するもので、シート上のどこでも使用できます。

Public Function CelsiusToF(ByVal Celsius As Double) As Double
    CelsiusToF = (Celsius * 9 / 5) + 32
End Function

ワークブックをマクロ有効.xlsmファイルとして保存し、次に =摂氏から華氏(A1) 任意のセルに入力してください。A1 の値が変更されるたびに結果が更新され、数式のオートコンプリートリストの「ユーザー定義」カテゴリに名前が表示されます。ブックにはマクロが含まれているため、数式が #NAME? ではなく値を返すようにするには、ブックを開く際にコンテンツを有効にする必要があります。

よくあるVBA関数のエラーとその修正方法

コンパイルはできるものの誤った結果を返す関数のほとんどは、以下の4つの問題に起因する。

  • この関数は空または0を返します。 結果が関数名に割り当てられていないか、if文の分岐の一つで代入がスキップされています。すべてのパスで戻り値を設定してください。
  • ワークシートのセルに #NAME? と入力してください。 その関数は非公開であるか、標準モジュールではなくシートモジュールに配置されているか、またはマクロが有効になっていない状態でブックが保存されています。
  • 整数引数でオーバーフローが発生した場合: この例では、32,767で停止するAs Integerを使用しています。実際のデータを使用する場合は、両方のパラメータと戻り値の型をLongに変更してください。
  • 議論の展開が変わったことで、発信者は驚く。 ByVal を省略すると、VBA は変数自体を渡すため、関数は呼び出し元の値を変更できてしまいます。そのような効果が必要でない限り、ByVal を記述してください。

よくあるご質問

直接はできません。複数の値を1つの結果に保持するには、配列またはカスタム型を返すか、追加パラメータをByRefで宣言して、関数が呼び出し元の変数に書き戻すようにします。

Optionalキーワードにデフォルト値を追加します。例: Optional ByVal Rate As Double = 0.05。オプションのパラメータの後のパラメータはすべてオプションでなければならず、リストの最後に記述する必要があります。

はい、例えば Application.WorksheetFunction.Sum(Range(“A1:A10”)) のように、Application.WorksheetFunction を介して呼び出すことができます。VBA に既に用意されている関数(Left や Trim など)は、このプレフィックスなしで直接呼び出すことができます。

はい。ワークシートの数式を貼り付けると、AIアシスタントが名前付き引数と宣言された戻り値の型を持つ同等のパブリック関数を返します。数式を置き換える前に、サンプル行で両方の結果を比較してください。

はい。関数と数式を入力すると、AIアシスタントが引数の型の不一致、戻り値の代入漏れ、ユーザー定義関数内からセルを変更しようとした試みなど、原因を特定します。