VBA を使用すると、通常の関数と同じようにワークシートで使用できるカスタム関数 (User Defined Function と呼ばれる) を作成できます。これは、既存の Excel 関数では不十分な場合に役立ちます。
User Defined Function (UDF) は、標準の Excel 機能には存在しないユーザー作成関数です。
この例では、他の Excel 関数と同様に、ワークシートの計算に使用できるカスタム IF 関数を作成します。
セル (C2) に値 ("YES") がある場合に (B2) の値を表示するには、数式 =IF(C2="YES",B2,0) で IF 関数を使用します。
この場合の目標は、=IF(C2 の背景は緑色です,B2,0) を実行できる関数を作成し、次のように記述することです。 =IF_GREEN(C2,B2):
独自の UDF 関数の作成を始めましょう。
Function IF_GREEN(paid As Range, amount) End Function
引数:
この場合、チェックで FALSE が返された場合、値は常に 0 になるため、引数を指定する理由はありません。
色が正しいかどうかを確認するには、必要な色を含むセルを使用します。
Function IF_GREEN(paid As Range, amount) green_color = Sheets("Sheet1").Range("K1").Interior.color End Function
ただし、セルに依存しないように、単純に目的の色の番号を使用します。
Function IF_GREEN(paid As Range, amount) green_color = 5296274 '緑 End Function
セルの背景色番号を決定するには、セルを選択して次のマクロを実行します。
Sub test_color() MsgBox ActiveCell.Interior.color End Sub
ここで、私たちがしなければならないのは、IF を使用してセルの色をチェックすることだけです。
Function IF_GREEN(paid As Range, amount) Application.Volatile green_color = 5296274 '緑 If paid.Interior.color = green_color Then '真であれば IF_GREEN = amount Else '嘘がある場合 IF_GREEN = 0 End If End Function
これで関数を使用する準備が整いました。
ただし、セルの塗りつぶしの変更は、再計算をトリガーするイベントではありません。 Excel に値の再計算を強制するには、空のセルを選択して [削除] をクリックするか、クリックするとすべてが更新される更新ボタン (「Refresh」) を追加します。
Sub refresh_macro() Application.Calculate End Sub
以下は、同じ関数の短縮された書き方です。
Function IF_GREEN(paid As Range, amount) Application.Volatile IF_GREEN = 0 '嘘がある場合 If paid.Interior.color = 5296274 Then IF_GREEN = amount '真であれば End Function
ここをクリックすると、この例を含む tblExceltbl ファイルをダウンロードできます。