TOP

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

YouLibreCalc for Excel logo

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 ファイルをダウンロードできます。