我是靠谱客的博主 忧心芝麻,最近开发中收集的这篇文章主要介绍Excel 2010 VBA 入门 111 条件查询的函数例码使参数适用于数组和单元格区域TypeName函数和VarType函数查找指定位置的数据返回指定错误值的函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

使参数适用于数组和单元格区域

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函数查找指定位置的数据返回指定错误值的函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部