VBA:获取指定数值在指定一维数组中的位置
![作者头像](https://ask.qcloudimg.com/avatar/female/SJcdjoZSOX.png)
文章背景: 在采用VBA抓取数据时,有时需要判断指定数值是否在一维数组中已存在;如果存在,则希望能够获取该数值在数组内的位置。
在实践过程中发现,VBA的filter函数无法完全匹配指定数值;而借助Excel的match函数,可以实现完全匹配。接下来分别对Filter函数和Match函数进行介绍。
- Filter 函数
根据指定的筛选准则,传回包含字串阵列子集的以零为基础的阵列。
Filter ( sourcearray , match , [ include , [ compare ]])
- sourcearray 必要项目。要搜寻的字串的一维阵列。
- match 必要。要搜寻的字串。
- include 选用。指出是否传回包含或排除 match 的子字串的 布尔 值。若 include 为 True , Filter 则会传回包含 match 作为子字串的阵列子集。若 include 为 False , Filter 则会传回不包含 match 作为子字串的阵列子集。
-
compare
选用。指出要使用的字串比较种类的数值。
- compare 引数可具有以下的值:
![](https://ask.qcloudimg.com/http-save/yehe-9949496/177557f5830a1363d061cf9ae8fab3b0.png)
vbBinaryCompare选项,区分大小写;vbTextCompare选项, 不区分大小写 。默认采用的是vbBinaryCompare选项。
应用示例:
判断某字符串是否在一维数组内存在。
![](https://ask.qcloudimg.com/http-save/yehe-9949496/3b332514d47e832c76c4edb42537cb81.png)
由上图可以看出,采用Filter函数匹配到的是包含
A-1
的所有元素。而在实际案例中,可能希望只获得完全匹配的元素。
- WorksheetFunction.Match 方法
傳回項目在陣列中的相對位置,其符合指定順序中的指定值。
WorksheetFunction.Match( Arg1 , Arg2 , Arg3 )
![](https://ask.qcloudimg.com/http-save/yehe-9949496/efe4a8ee582d93f28acd844d42684d84.png)
如果 match_type 是 0, 相符項目 會尋找第一個完全等於 lookup_value 的值。
如果 match_type 是 1, 相符項目 會找到小於或等於 lookup_value 的最大值。
如果省略 match_type,則會假設其值為 1。
应用示例:
Option Explicit
Option Base 1
Sub test()
Dim data(4) As String, temp As String, flag As Integer
data(1) = "A-1"
data(2) = "A-2"
data(3) = "A-3"
data(4) = "A-11"
temp = "A-1"
On Error Resume Next
flag = WorksheetFunction.Match(temp, data, 0)
If Err.number = 0 Then