TOP

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

使用 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 文件。