如何在VBA Excel中使用工作表功能类似于VLOOKUP?
VLOOKUP,COUNTIF,SUMIF等功能称为工作表功能。通常,在Excel中预定义并可以在工作表上使用的函数是工作表函数。您无法在VBA中更改或查看这些功能背后的代码。
另一方面,用户定义的功能和特定于VBA的功能(例如MsgBox或InputBox)是VBA功能。我们都知道如何在VBA中使用VBA功能。但是,如果我们想在VBA中使用VLOOKUP,该怎么办?我们该怎么做?在本文中,我们将对此进行确切的探讨。
在VBA中使用工作表函数
要访问工作表函数,我们使用Application类。几乎所有工作表函数都列在Application.WorksheetFunction类中。并使用点运算符,您可以全部访问它们。
在任何子目录中,编写Application.WorksheetFunction。并开始编写函数的名称。 VBA的智能感知将显示可用功能的名称。选择函数名称后,它将要求变量,就像excel上的任何函数一样。但是您将必须以VBA可理解的格式传递变量。例如,如果要传递范围A1:A10,则必须将其作为Range对象(如Range(“ A1:A10”))传递。
因此,让我们使用一些工作表功能来更好地理解它。
如何在VBA中使用VLOOKUP函数
为了演示如何在VBA中使用VLOOKUP函数,这里有示例数据。我需要使用VBA在消息框中显示给定登录ID的名称和城市。数据分布在范围A1:K26中。
按ALT + F11打开VBE并插入模块。请参见下面的代码。
Sub WsFuncitons() Dim loginID As String Dim name, city As String loginID = "AHKJ_1-3357042451" 'Using VLOOKUP function to get name of given id in table name = Application.WorksheetFunction.VLookup(loginID, Range("A1:K26"), 2, 0) 'Using VLOOKUP function to get city of given id in table city = Application.WorksheetFunction.VLookup(loginID, Range("A1:K26"), 4, 0) MsgBox ("Name: " & name & vbLf & "City: " & city) End Sub
运行此代码时,将得到此结果。
您可以看到VBA将结果打印到消息框中的速度。现在让我们检查一下代码。
如何运作?
1.
昏暗的loginID作为字符串
昏暗的名字,城市作为字符串
首先,我们声明了两个字符串类型的变量来存储VLOOKUP函数返回的结果。我使用了字符串类型的变量,因为我确定VLOOKUP返回的结果将是一个字符串值。如果您的工作表函数期望返回数字,日期,范围等值的类型,请使用该类型的变量来存储结果。如果您不确定工作表函数将返回哪种类型的值,请使用变量类型变量。
2。
loginID =“ AHKJ_1-3357042451”
接下来,我们使用了loginID变量来存储查找值。在这里,我们使用了硬编码的值。您也可以使用引用。例如。
您可以使用Range(“ A2”)。Value从范围A2动态更新查找值。
3.
名称= Application.WorksheetFunction.VLookup(loginID,Range(“ A1:K26”),2,0)在这里,我们使用VLOOKUP函数获取。现在,当您右键单击该函数并打开括号时,它将为您显示所需的参数,但描述性不如Excel中所示。你自己看。
您需要记住如何以及如何使用什么变量。您始终可以返回工作表以查看描述性变量的详细信息。
在这里,查找值为Arg1。对于Arg1,我们使用loginID。查找表是Arg2。对于Arg2,我们使用了Range(“ A1:K26”)。请注意,我们没有像在Excel上那样直接使用A2:K26。列索引为Arg3。
对于Arg3,我们使用2,因为名称在第二列中。查找类型为Arg4。我们使用0作为Arg4。
城市= Application.WorksheetFunction.VLookup(loginID,Range(“ A1:K26”),4,0)
同样,我们得到城市名称。
4.
MsgBox(“名称:”和名称&vbLf和“城市:”和城市)
最后,我们使用Messagebox打印名称和城市。
为什么在VBA中使用工作表功能?工作表函数具有巨大的计算能力,并且忽略工作表函数的能力并不明智。例如,如果我们想要数据集的标准偏差,并且您想要为此编写完整的代码,则可能要花费几个小时。但是,如果您知道如何在VBA中使用工作表函数STDEV.P来一次性获得计算结果。
Sub GetStdDev() std = Application.WorksheetFunction.StDev_P(Range("A1:K26")) End Sub
使用多个工作表功能VBA
假设我们需要使用索引匹配来检索一些值。现在您将如何在VBA中修改公式。我猜这是你会写的:
Sub IndMtch() Val = Application.WorksheetFunction.Index(result_range, _ Application.WorksheetFunction.Match(lookup_value, _ lookup_range, match_type)) End Sub
这没错,但是很长。使用多种功能的正确方法是使用With块。请参见以下示例:
Sub IndMtch() With Application.WorksheetFunction Val = .Index(result_range, .Match(lookup_value, lookup_range, match_type)) val2 = .VLookup(arg1, arg2, arg3) val4 = .StDev_P(numbers) End With End Sub
如您所见,我已经使用With块来告诉VBA,我将使用Application.WorksheetFunction的属性和函数。因此,我不需要到处都定义它。我只是使用点运算符来访问INDEX,MATCH,VLOOKUP和STDEV.P函数。使用End With语句后,如果不使用完全限定的函数名称,就无法访问函数。
因此,如果必须在VBA中使用多个工作表功能,请与block一起使用。
并非所有的工作表功能都可以通过Application.WorksheetFunction获得,某些工作表功能可以直接在VBA中使用。您不需要使用Application.WorksheetFunction对象。
例如,诸如Len()之类的函数可用于获取字符串中的字符数,左,右,中间,修剪,偏移量等。这些函数可直接在VBA中使用。这是一个例子。
Sub GetLen() Strng = "Hello" Debug.Print (Len(strng)) End Sub
看,这里我们使用了LEN函数,而不使用Application.WorksheetFunction对象。
同样,您可以使用其他功能,如左,右,中,字符等。
Sub GetLen() Strng = "Hello" Debug.Print (Len(strng)) Debug.Print (left(strng,2)) Debug.Print (right(strng,1)) Debug.Print (Mid(strng, 3, 2)) End Sub
当您运行上述子程序时,它将返回:
5 He o ll
好的,这就是您可以在VBA中使用Excel的工作表功能的方式。我希望我能提供足够的解释,并且本文对您有所帮助。如果您对本文或任何其他有关VBA的问题有任何疑问,请在下面的评论部分中提问。到那时为止,您可以阅读下面的其他相关主题。
相关文章:
Excel VBA中的CSng函数是什么 SCng函数是VBA函数,可将任何数据类型转换为单精度浮点数(“假定它是数字”)。我主要使用CSng函数将文本格式的数字转换为实际数字。
如何通过Microsoft Excel中的VBA反向获取文本和编号| *反向编号和文本,我们在VBA中使用循环和中间函数。 1234将转换为4321,“ you”将转换为“ uoy”。这是代码段。
在Microsoft Excel中使用VBA用自定义数字格式设置数据格式要在excel中更改特定列的数字格式,请使用此VBA代码段。一键将指定格式转换为指定格式。
在进行任何更改时使用工作表更改事件运行宏因此,为了在工作表更新时运行宏,我们使用VBA的工作表事件。
如果在指定范围内对表进行了任何更改,则运行宏 |若要在指定范围内的值更改时运行宏代码,请使用此VBA代码。它检测到在指定范围内所做的任何更改,并将触发该事件。
使用突出显示当前行和列的最简单VBA代码使用此VBA小片段突出显示工作表的当前行和列。
热门文章:
50 Excel快捷方式以提高生产率更快地完成任务。这50个快捷键将使您在Excel上的工作速度更快。
Excel中的VLOOKUP函数这是excel中最常用和最受欢迎的功能之一,用于从不同范围和工作表中查找值。
在Excel 2016中为COUNTIF使用此惊人的功能对条件进行计数。您无需过滤数据即可计算特定值。
Countif功能对于准备仪表板至关重要。
如何在Excel中使用SUMIF函数这是仪表板的另一个重要功能。这可以帮助您汇总特定条件下的值。