Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 12629|回复: 16

[已解决]VBA用match查找两个问题如何做

[复制链接]
发表于 2017-2-23 20:27 | 显示全部楼层 |阅读模式
本帖最后由 laoau138 于 2017-2-24 16:31 编辑

VBA用match查找两个问题如何做



   Sub 问题一()
       Dim ARR
       ARR = Range("A1:A10")
       MsgBox Application.Match("B", ARR, 0)
   End Sub


'问题一:

'match查找一个值在数组中的位置
'现在要查找字母"B"   为什么只能查找第一个B的位置,无法查找第二个B的位置



Sub 问题二()
Dim ARR
       ARR = Range("D1:E9")
       MsgBox Application.Match("B", ARR, 1) ' 这个时候为什么不能查找B

End Sub


最佳答案
2017-2-24 15:43
本帖最后由 today0427 于 2017-2-24 15:46 编辑

感觉自己真是闲的

(, 下载次数: 151)

VBA用match查找两个问题如何做.rar

6.64 KB, 下载次数: 19

发表于 2017-2-24 08:52 | 显示全部楼层
去学习一下MATCH函数的语法规则吧

评分

参与人数 1 +6 收起 理由
laoau138 + 6 来学习

查看全部评分

回复

使用道具 举报

发表于 2017-2-24 09:21 | 显示全部楼层
match函数只能查找顺序查找的第一个值,第三个参数选0是精确查找,选1是模糊查找,第二个选择区域有问题,用index配套match函数就能二维查找数值

评分

参与人数 1 +6 收起 理由
laoau138 + 6 来学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-2-24 09:45 | 显示全部楼层
liyizhe000 发表于 2017-2-24 09:21
match函数只能查找顺序查找的第一个值,第三个参数选0是精确查找,选1是模糊查找,第二个选择区域有问题, ...

完全不懂啊,请完整性解析一次
回复

使用道具 举报

 楼主| 发表于 2017-2-24 09:51 | 显示全部楼层
望帝春心 发表于 2017-2-24 08:52
去学习一下MATCH函数的语法规则吧

完全不懂请解析一次
回复

使用道具 举报

 楼主| 发表于 2017-2-24 09:51 | 显示全部楼层
谁来解析一次啊
回复

使用道具 举报

发表于 2017-2-24 10:07 | 显示全部楼层
我觉得三楼已经给出了相当准确的解释,Application.Match 相当于你在vba中引用了工作表函数match,那么使用的规则就要遵循match函数的使用规则。
“'问题一:  
Sub 问题一()
        Dim ARR
        ARR = Range("A1:A10")
        MsgBox Application.Match("B", ARR, 0)
    End Sub
'match查找一个值在数组中的位置
'现在要查找字母"B"   为什么只能查找第一个B的位置,无法查找第二个B的位置”
在这个sub过程中,你match函数的第三参数是0,表示精确匹配。
第三参数使用0,表示在第2个参数的数组中精确查找字母为"B"   第一次出现的位置,不考虑第2次出现位置,这是match函数第三参数为0时的特点。
Sub 问题二()
Dim ARR
        ARR = Range("D1:E9")
        MsgBox Application.Match("B", ARR, 1) ' 这个时候为什么不能查找B
End Sub
第三参数使用1,(也可省略),其中第2个参数的数组要求按升序排列,并查找出小于或等于“B”的最大值。
然而,使用MATCH函数时的指定区域必须是单行多列或者单列多行;也就是一维数组。你现在的arr是一个二维数组,当然在vba中可以通过循环行或者列来实现查找,但是这样直接写入二维数组中查找显然是不行的。

给你一个网址先好好学习一下这个函数,了解他的使用规则
http://www.excelhome.net/lesson/article/excel/1577.html

评分

参与人数 2 +18 金币 +12 收起 理由
望帝春心 + 12 + 12 堵堵送你念高中3年级,哈哈~
laoau138 + 6 来学习

查看全部评分

回复

使用道具 举报

发表于 2017-2-24 10:24 | 显示全部楼层

MATCH函数语法为:MATCH(lookup_value,lookuparray,match-type)
lookup_value:表示查询的指定内容;
lookuparray:表示查询的指定区域;(单行或单列)
match-type:表示查询的指定方式,用数字-1、0或者1表示,具体如图:





评分

参与人数 1 +6 收起 理由
laoau138 + 6 来学习

查看全部评分

回复

使用道具 举报

发表于 2017-2-24 10:42 | 显示全部楼层
本帖最后由 today0427 于 2017-2-24 10:45 编辑

附件我修改了一下,你对比一下看看。另外,match查找不到的话会提示类型不匹配,所以要和容错语句一起使用。

VBA用match查找两个问题如何做.rar

8.26 KB, 下载次数: 29

评分

参与人数 1 +6 收起 理由
laoau138 + 6 来学习

查看全部评分

回复

使用道具 举报

发表于 2017-2-24 11:33 | 显示全部楼层
两个模式
0/false(即精确查找):你可以理解成从第一个开始找,找到符合的就显示位置,停止了。(所以只找到了第一个)
1/true(即模糊查找):在排序情况下一种较为高效的查找机制,叫二分法(可以百度一下),但在乱序情况下不一定能找到符合你要求的值。

match常规应用应用查找一行或一列,所以你第二个问题你没找到。

评分

参与人数 1 +6 收起 理由
laoau138 + 6 来学习

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-19 15:30 , Processed in 0.829671 second(s), 19 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表