Excel VBA 関数チュートリアル: リターン、呼び出し、例
⚡ スマートサマリー
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 | 行動 |
|---|---|
|
|
|
|
|
|
|
|
値を返して関数のデータ型を設定する方法
関数にはサブルーチンにはない役割が一つあります。それは値を返すことです。その値を制御する要素は二つあり、どちらも見落としやすいものです。
まず、代入です。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) ユーザーインターフェース
以下に示すように、ワークシートにコマンド ボタンを追加します。
CommandButton1 の以下のプロパティを以下のように設定してください。
| S / N | 管理 | プロパティ | 値 |
|---|---|---|---|
| 1 | コマンドボタン1 | 名前 | ボタン追加Numbers |
| 2 | キャプション | 追加 Numbers 演算 |
インターフェースは次のように表示されるはずです。
ステップ2) 機能コード。
- Alt + F11 を押してコード ウィンドウを開きます
- 次のコードを追加します
Private Function addNumbers(ByVal firstNumber As Integer, ByVal secondNumber As Integer) addNumbers = firstNumber + secondNumber End Function
ここのコードでは、
| Code | 行動 |
|---|---|
|
|
|
|
|
|
ステップ3)書く Code 関数を呼び出す
- btnAddを右クリックしますNumbers コマンドボタン
- 「表示」を選択 Code
- 次のコードを追加します
Private Sub btnAddNumbers_Click() MsgBox addNumbers(2, 3) End Sub
ここのコードでは、
| Code | 行動 |
|---|---|
| 「メッセージBox 加えますNumbers(2,3)」 |
|
ステップ4) プログラムを実行すると、次の結果が得られます。
上記のコードを含む 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 を記述してください。




