概述
目录
例
码
使参数适用于数组和单元格区域
TypeName函数和VarType函数
查找指定位置的数据
返回指定错误值的函数
例
在Excel中经常使用Vlookup函数进行精确查找,但当多个数据符合查找条件时,则只能返回其从上而下的第1个满足条件的数据。自定义一个函数MyVlookup,使其参照Vlookup函数的使用方法进行精确查找,其第4个参数则变更为需要返回第几个满足条件的数据。
码
参照Vlookup创建自定义函数,使用循环对参数中所输入的数据的第1列进行查找,并设置变量表示找到的次数。当找到时,则该找到的次数增加1,当找到的次数等于第4个参数所设置的数值时,则返回该条数据。
Option Explicit
Function myVlookup(lookup_value As Variant, array_table As Variant, ref_col As Integer, record_index As Integer) As Variant
Dim rowData As Long
Dim colData As Long
Dim LBRow As Long
Dim UBRow As Long
Dim LBCol As Long
Dim UBCol As Long
Dim arrData()
If TypeName(array_table) = "Range" Then
arrData = array_table.Value
Else
arrData = array_table
End If
LBRow = LBound(arrData, 1)
UBRow = UBound(arrData, 1)
LBCol = LBound(arrData, 2)
UBCol = UBound(arrData, 2)
colData = LBCol + ref_col - 1
If UBCol < colData Then
myVlookup = CVErr(xlErrRef)
Exit Function
End If
For rowData = LBRow To UBRow
If arrData(rowData, LBCol) = lookup_value Then
record_index = record_index - 1
If record_index = 0 Then
myVlookup = arrData(rowData, colData)
Exit Function
End If
End If
Next rowData
myVlookup = CVErr(xlErrNA)
End Function
使参数适用于数组和单元格区域
当使用数组作为自定义函数的参数时,只能使用数组作为该自定义函数的参数输入,当以单元格区域作为数组时,则会出现错误。而使用Range类型的参数时,则无法接受数组类型的数据。为解决该问题,一般将该参数设置为一个变体型的参数。在程序中需要对所传递来的参数进行类型的判断,当其为单元格对象时,则需要将其转换为数组(直接读取单元格区域对象的Value属性)。然后对转换后的值进行判断,判断其是否为数组,若为数组,则继续。
TypeName函数和VarType函数
当需要判断某个变量的数据类型时,可以使用TypeName函数或者VarType函数。
TypeName函数可以返回一个文本字符串以表示与变量值的类型相关的信息,其语法为
TypeName(varname)
参数varname为变量名称。
该函数的返回值见表。通常情况下,该函数返回变量的类型,或在某些特殊值的情况下的信息(如Null、Nothing等)。当变量为Variant类型时,则该函数将根据该变量的实际赋值而返回相关的信息。如本例中,当Variant类型变量赋值为单元格时,其返回“Range";当其赋值为某个数组时,返回"Variant()”。
返回值 | 说 明 |
objecttype | 对象变量的具体类型 |
Byte | Byte类型 |
integer | Integer类型 |
Long | Long类型 |
Single: | Single类型 |
Double | Double类型 |
Currency | Curreucy类型 |
Decimal | Decimal类型 |
Date | Date类型 |
String | String类型 |
Boolean | Boolean类型 |
Error | 错误Error变量 |
Empty | 未初始化的变量 |
Null | 无效数据 |
Object | 对象 |
Unknown | 未知类型 |
Nothing | 不再引用对象的对象变量 |
VarType函数可以返回某个变量的子类型的常量数字,其语法为:
VarType(varname)
参数varname为变量名称。该函数的返回值为表中的常量。
返回的常量 | 值 | 说 明 |
vbEmpty | 0 | Empty。未初始化的变量 |
vbNull | L | Null |
vbInteger | 2 | Integer类型 |
vbLong | 3 | Long integer类型, |
vbSingle | 4 | Single类型 |
vbDouble | 5 | Double类型 |
vbcurrency | 6 | Currency类型 |
vbDate | 7 | Date类型 |
vbString | 8 | String类型 |
vbObject | 9 | Object类型 |
vbError | 10 | 错误Error变量 |
vbBoo1ean | 11 | Boolean类型 |
vbVariant | 12 | Variant类型(仅用作Variant数组) |
vbDafaObject | 13 | DAO类型 |
VbDecimal | 14 | Decimal类型 |
vbByte | 17 | Byte类型 |
vbLongLong | 20 | LongLong类型 |
vbUserDefinedType | 36 | 用户自定义类型 |
vbArray | 8192 | 数组 |
当某个变量为数组时,一般不会返回8192。VBA会根据数组中的具体类型而返回值,若数组中存储了Variant变量,则返回8204。这个8204是数组8192加上Variant类型的12而得到的。
本例中,需要判断参数array_table是否为单元格区域,则可以直接使用TypeName。而不使用VarType,因为此处无论传递过来的参数是单元格区域还是数组,对子类型而言,VarType都认为其为数组。
查找指定位置的数据
如本例中,需要查找第N个满足条件的数据,一般使用一个计数器变量。在程序开始时记录查找到满足条件的记录的次数,每次在查找到满足条件的数据之后,则将该变量减少1,直到该计数器变量等于0。
返回指定错误值的函数
编写自定义函数可以方便地供用户在工作表中使用。当用户错误地使用函数时,将会造成该函数无法正确计算。一般地,当自定义函数被错误地使用时,则在工作表中将返回#VALUE!错误。为了模拟自定义函数的各种错误情况,一般使用CVErr函数返回错误值。
CVErr函数可以根据指定的错误号返回错误对象(Error),当该函数使用在自定义函数中时,可以返回指定的工作表错误。该函数的语法为:
CVErr(errornumber)
参数errornumber为指定的错误号。对于工作表的单元格错误值,可以参见。
常 量 | 值 | 单元格错误值 |
xlErrDiv0 | 2007 | #DIV! |
xlErrNA | 2042 | #N/A |
xlErrName | 2029 | #NAME? |
xlErrNull | 2000 | #NULL! |
xlErrNum | 2036 | #NUM! |
xlEnRef | 2023 | #REF! |
xlErrValue | 2015 | #VALUE! |
利用CVErr函数返回的错误可以在单元格中显示相应的错误值,与返回相同的文本不同的是:CVErr函数返回的错误值是可以被工作表IsError函数所识别的,而返回文本则不可。
最后
以上就是忧心芝麻为你收集整理的Excel 2010 VBA 入门 111 条件查询的函数例码使参数适用于数组和单元格区域TypeName函数和VarType函数查找指定位置的数据返回指定错误值的函数的全部内容,希望文章能够帮你解决Excel 2010 VBA 入门 111 条件查询的函数例码使参数适用于数组和单元格区域TypeName函数和VarType函数查找指定位置的数据返回指定错误值的函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复