TOP

VBA-第 14.2 课。创建自定义函数

YouLibreCalc for Excel logo

使用 VBA,您可以创建一个自定义函数(称为 User Defined Function),该函数可以像普通函数一样在工作表中使用。当现有的 Excel 函数不够时,这非常有用。

User Defined Function (UDF) 是标准 Excel 功能中不存在的用户创建的函数。

在此示例中,我们将创建一个自定义 IF 函数,该函数可用于工作表上的计算,类似于其他 Excel 函数。


要在单元格 (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 我们将插入的值。
  • 在这种情况下,如果检查返回 FALSETbl_,则该值将始终为 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 文件。