TOP

VBA-レッスン 14.2。カスタム関数の作成

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)の作成

独自の UDF 関数の作成を始めましょう。

Function IF_GREEN(paid As Range, amount)
     
End Function

引数:

  • paid As Range : チェックするセル。
  • amount : TRUE の場合に挿入する値。
  • この場合、チェックで 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
    

    これで関数を使用する準備が整いました。

    Application.Volatile は、関数が揮発性であることを示します (通常の IF 関数の場合と同様)。これは、値が変更されるたびに再計算されることを意味します。たとえば、[金額] 列 (または実際には他のセル) の値を変更すると、この関数が再計算され、更新された金額が表示されます。

    ただし、セルの塗りつぶしの変更は、再計算をトリガーするイベントではありません。 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 ファイルをダウンロードできます。