如何在Microsoft Excel中创建自定义函数
Microsoft Excel中用户定义函数的介绍
众所周知,Microsoft Excel内置了很多函数,这些函数在数据分析时非常方便。然而,并不是所有情况下提供的公式都能完全适用于我们正在做的任务。
在这种情况下,我们可以利用VBA(Virtual Basic for Application)在Microsoft Excel中高效地创建自己的函数,这些函数被称为 用户定义函数 (UDF)。
此外,用户定义函数(UDF)可以像使用普通Excel函数一样在工作表中使用,包括以下函数:
- SUM。
- AVERAGE等。
通过利用虚拟Basic for Application(VBA)根据用户的需求创建这些函数将有助于简化用户在Microsoft Excel中的任务。
除此之外,任何用户定义函数(UDF)都有一个基本规则,即用户需要在 FUNCTION 过程而不是子程序过程中定义,并且通过 FUNCTION 过程,我们可以有效地创建UDF,并在Microsoft Excel中像使用普通的Excel函数一样使用它们,比如:
- VLOOKUP。
- SUM。
- AVERAGE等。
如何在Microsoft Excel中创建自定义或用户定义函数
首先,个人需要打开Visual Basic编辑器(VBE),并且应该记住VBE会在新窗口中打开,不会关闭我们的Excel电子表格。
最简单和最简单的打开(虚拟Basic编辑器)的方法就是使用键盘上的快捷按钮:
Alt + F11.
在打开VBE之后,我们需要在其中添加一个新的模块来编写我们的函数。
我们将右键单击VBA项目窗格,选择插入 -> 模块。当我们点击模块时,屏幕上出现一个空的模块窗口,在其中需要按照我们的自定义函数进行指定
在创建用户定义的函数时需要遵循的规则:
- 用户定义的函数必须始终以”Function”开始,并通常以”End Function”结束。
- 并且”Function”后面必须跟随函数的名称。这是个人创建并使用的标题,以便个人以后能够轻松识别和使用它。
- 并且应该记住,个人不应将UDF的名称命名为与标准Excel函数相似的名称,如果这样做,标准函数将始终执行。
- 对应的用户定义函数的名称不能与给定工作表中使用的特定单元格的地址匹配。
- 该特定函数的参数主要列在括号中,这是它将使用的数据,我们可以有多个参数。如果有更多参数,应该用逗号分隔。
- 如果在UDF内部的函数不使用参数,则个人需要创建一个没有参数的函数。
- 个人还需要确定用户定义函数要使用的变量。
- 之后,个人将放置几个VBA语句,可以通过传递给函数的参数进行计算。
- 最后,个人需要编写一条语句,将最终值分配给与函数同名的给定变量。
示例:
示例1 – 用于在Excel中找到三角形面积的用户定义函数
事实上,数学专业的学生总是遇到一个数学问题,他们需要找出一个三角形的面积。虽然众所周知它有一个非常简单的公式来处理它,但如果他们有一些能够计算三角形面积的函数,学生们会很高兴。
所以我们将按照下面的步骤来创建一个可以有效计算三角形面积的函数:
步骤1:
在第一步中,我们需要插入一个新的模块,它位于Visual Basic Editor(VBE)的下方。我们会打开VBE > 点击插入选项卡 > 然后从中选择模块。
步骤2: 在这一步中,我们将通过将其命名为TriangleArea来定义一个新的函数过程。
由于这是一个函数过程,我们需要定义参数来计算三角形的面积,同时也要定义函数。
步骤3: 然后我们将在TriangleArea函数中赋值两个参数,即上述括号中的height和base。这些被视为强制参数,这意味着个人需要提供高度和基准值才能计算三角形的面积。
步骤4: 在这一步中,我们将编写一个代码,负责在提供三角形的高度和底边值时返回其面积。
步骤5: 现在,在这一步中,在给定的单元格C2中,我们将开始输入给定的公式 =TriangleArea(A2, B2) 以计算三角形的面积,然后我们将高度和底边作为参数提供给同一个给定的公式。
步骤6: 之后,我们将关闭给定的括号,完成公式,并按下键盘上的Enter键来计算具有高度为12和底边为7.5的三角形的面积。
此后,我们将利用该公式来有效地计算第二个和第三个高度和底边的面积。
#示例2:用户定义的函数来找到任意数字的平方。
假设我们想要得到任意特定数字的平方值,无论是整数数据类型还是浮点类型。并且没有这样的函数会给我们任意给定数字的平方值。所以,让我们创建一个可以在Microsoft Excel中高效完成此任务的函数。
步骤1:
在第一步中,在相同的模块中,我们将开始定义一个新的函数过程来平方一个数字 SquareNum。
步骤2: 并且,我们需要为给定的函数添加一个参数,并在括号中使用num作为该特定函数的参数。一旦我们在给定的函数中提供了参数,我们就能看到End Function语句。
步骤3: 在这一步中,我们可以在给定的函数内添加代码或行来获取特定数字的平方。由于 num 是 SquareNum 函数的参数, 我们有两个选项来获得所需的输出:
其中一种方法是将num与其自身相乘,另一种方法是利用幂运算符”^”对num进行操作。在这个例子中,我们将选择第二种方法,因为它使代码更具通用性和简洁性。
步骤4: 之后,我们将通过点击“保存”按钮将代码保存下来,在 Visual Basic for Editor (VBE) 下方,这样我们就可以在 Microsoft Excel 工作表中使用名为 SquareNum 的函数了。
假设我们有一组不同的数字,我们需要找到它们的平方值。在这种情况下,我们可以使用刚刚定义的SquareNum函数来有效地获得输出。
步骤5: 在B2单元格中,我们将开始输入“Square”(平方),然后可以遇到我们刚刚定义的用于求平方的函数,之后双击以选择它。
步骤6: 之后,我们将把A2作为参数提供给这个函数,以便将A2单元格中的数字求平方。
步骤7: 执行上述步骤后,我们将关闭括号以完成公式,并按下键盘上的Enter键以获得遇到的11的平方。
步骤8: 在这一步中,我们将拖动和粘贴公式到其余单元格中,以得到剩余数字的平方根。
Microsoft Excel中可用的用户定义函数的类型是什么
Microsoft Excel中可用的用户定义函数的各种类型如下:
- 无参数。
- 带有一个参数。
- 使用数组作为参数。
- 使用多个参数。
无参数
众所周知,Microsoft Excel具有不需要参数(NOW、RAND、TODAY)的各种标准函数。
- 例如,TODAY函数返回当前日期,而RAND函数主要返回一个介于0和1之间的随机数,我们不需要有效地为它们指定任何值。
最重要的是,我们还可以在Visual Basic for Application(VBA)中创建此类函数。下面的代码将分别将工作表的名称写入一个单元格:
代码:
Function SheetName () as String
Application.Volatile
SheetName = Application.Caller.Worksheet.Name
End Function
同时我们要注意,在函数名后面的括号内没有参数,这是因为需要返回的结果不依赖于工作文件中的任何值,并且不需要任何参数。
除此之外,上述代码将定义函数的输出为字符串数据类型。如果不指定数据类型,则Excel会自动确定。
一个参数
现在我们将进一步创建一个简单的函数,该函数将在一个特定的单元格中有效地使用一个参数。
我们的主要任务是从给定的文本字符串中提取最后一个词,因此我们将使用下面的代码:
代码:
Function ReturnLastWord (The_Text As String)
Dim stLastWord As String
'Extracting the LAST word from the given text string.'
StLastWord = StrReverse (The_Text)
StLastWord = Left (stLastWord, InStr (1, stLastWord, " ", vbTextCompare))
ReturnLastWord = StrReverse (Trim (stLastWord))
End Function
文本 是来自所选单元格的值,我们可以表明这是一个文本值。
StrReverse 函数按字符顺序返回文本的反向顺序,而特定的 InStr 函数用于确定第一个空格的位置。通过 Left 函数的帮助,我们可以获取特定以第一个空格结束的所有字符,我们也可以通过使用 Trim. StrReverse 来移除所有的空格。StrReverse有助于改变字符的顺序;最后,我们将从给定的文本中得到最后一个单词。
由于该函数通常接受一个单元格值,我们不需要使用 Application. Volatile 情况下的。
以数组作为参数
我们都知道,大多数Microsoft Excel函数基本上都使用值数组作为参数。
下面的代码将帮助创建一个函数,它将对指定范围的单元格中的所有偶数进行求和。
代码:
Function SumEven (NumRange as Range)
Dim RngCell As Range
For Each RngCell In NumRange
If IsNumeric (RngCell. Value) Then
If RngCell. Value Mod 2 = 0 Then
Result = Result + RngCell. Value
End If
End If
Next RngCell SumEven = Result
End Function
在上述代码中, NumRange 参数主要被视为 rangeRange ,这意味着给定的函数将使用原始数据数组。其代码如下所示:
Function SumEven (NumRange as Variant)
此外, Variant 类型提供了一个“非维度”的容器来存储数据。因此,变量可以用来存储VBA允许的任何类型的数据,包括数字、文本、日期等。
代码中使用了 For Each 循环遍历每个单元格,并检查其是否包含数字。如果单元格不包含数字,则不发生任何操作,并继续遍历下一个单元格。如果找到一个数字,则通过 MOD 函数判断该数字是奇数还是偶数。
所有偶数的和被累加到 Result 变量中。当循环结束时,将 Result 值有效地赋给 SumEven 变量,并传递给函数。
Excel中的多个参数
许多Microsoft Excel函数有多个参数。因此,能够有效地创建具有多个参数的自定义函数非常重要。
代码:
Function GetMaxBetween (rngCells As Range, MinNum, MaxNum)
Dim NumRange As Range
Dim vMax
Dim arrNums ()
Dim i As Integer
ReDim arrNums (rngCells.Count)
For Each NumRange In rngCells
vMax = NumRange
Select Case vMax
Case MinNum + 0.01 To MaxNum - 0.01
arrNums (i) = vMax
i = i + 1
Case Else
GetMaxBetween = 0
End Select Next
NumRange GetMaxBetween = WorksheetFunction.Max (arrNums)
End Function
如上所述的代码主要有3个参数:一个值范围,一个数字字段的下限以及一个范围的上限。
第一个参数是 rngCells 作为Range。它是一个单元格范围,用于在其中搜索最大值。与此相反,第二个和第三个参数(MinNum,MaxNum)通常没有声明类型,意味着将自动应用 Variant数据 类型。
此外,Visual Basic for Application(VBA)使用6种不同的数值数据类型。只指定其中一种意味着限制了函数的使用。因此,最好让Microsoft Excel确定数值数据类型。
For Each 循环按顺序使用所选范围内的所有值。通过标准的 MAX函数 ,将范围中从最大值到最小值的数字写入一个特殊的数组 arrNums 中,以有效地找到此数组中的最大数。
在Microsoft Excel中,个人需要记住哪些要点
在使用Excel中的用户定义函数(UDF)时,个人需要记住以下重要事项:
- 个人应该记住,通过VBA创建的用户定义函数(UDF)可以创建自定义公式,从而减少执行任何任务所需的时间并简化任务。
- 用户定义函数(UDF)仅适用于创建它的工作表。但是,个人可以将代码复制并粘贴到其他工作表中,以便在其他工作表中使用它。