使用 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 函数:
Function IF_GREEN(paid As Range, amount) End Function
论据:
在这种情况下,如果检查返回 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
现在我们的函数就可以使用了。
但是,更改单元格填充并不是触发重新计算的事件。要强制 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 文件。