ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 16892|回复: 9

[求助]VBA查找符合条件的数组元素及VBA中match语法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-10-1 14:36 | 显示全部楼层 |阅读模式

有一维字符串数组JG(500000),要搜索到其中包含有“苏联”二字的数组元素的位置(注意:是位置,不是值)。请不要用for ...next这类慢腾腾的语句,因为需要处理的一维数组数据量非常大,远景估计搜索要超过一千万个数组元素。

好像有个match函数符合我的需要,但偶水平有限,实在弄不懂该函数的语法,比如我书写:a=match("*苏联*",JG,0),但运行提示类型不匹配错误。

恳请高人指点指点!!

[此贴子已经被作者于2008-10-1 15:03:59编辑过]

TA的精华主题

TA的得分主题

发表于 2008-10-1 16:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

若数组超出65536就不能用match函数。

而且你的写法也不对。

= Application.WorksheetFunction.Match("*苏联*",JG,-1)

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-10-1 16:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用oobird在2008-10-1 16:17:00的发言:

若数组超出65536就不能用match函数。

而且你的写法也不对。

= Application.WorksheetFunction.Match("*苏联*",JG,-1)

嘿嘿,oo鸟版主您好啊

上次我的一个难题就是您指教滴。

这么说,match函数只能用于搜索表格,而不能用于搜索数组变量了?

那用于搜索数组的VBA该如何编写呢(不用for...next这类循坏),注意:我说的数组是传统意义编程中的数组,不是excel表格数组。

TA的精华主题

TA的得分主题

发表于 2008-10-1 16:38 | 显示全部楼层
QUOTE:
以下是引用voodoo2在2008-10-1 14:36:00的发言:

有一维字符串数组JG(500000),要搜索到其中包含有“苏联”二字的数组元素的位置(注意:是位置,不是值)。请不要用for ...next这类慢腾腾的语句,因为需要处理的一维数组数据量非常大,远景估计搜索要超过一千万个数组元素。

好像有个match函数符合我的需要,但偶水平有限,实在弄不懂该函数的语法,比如我书写:a=match("*苏联*",JG,0),但运行提示类型不匹配错误。

恳请高人指点指点!!


楼主你怎末知道for...next是慢腾腾的??而match 函数就是快嗖嗖的?

要想搜索快,sort 是王道。

TA的精华主题

TA的得分主题

发表于 2008-10-1 16:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

比循环是快是慢不知道

Sub 找苏联()
arr = Sheet1.Range("a1:a65536")
arr = Filter(Application.Transpose(arr), "苏联")
[c1].Resize(UBound(arr) + 1) = Application.Transpose(arr)
End Sub

TA的精华主题

TA的得分主题

发表于 2008-10-1 16:47 | 显示全部楼层
哦,是找位置,弄错了[em04]

TA的精华主题

TA的得分主题

发表于 2008-10-1 16:59 | 显示全部楼层

用循环吧,一点不慢

Sub yy()
Dim x&
Dim JG(500000)
For x = 0 To 500000
JG(x) = x
Next

For x = 0 To 500000
If JG(x) = 11111 Then MsgBox x: Exit Sub
Next
End Sub

调用工作表函数并不快的

TA的精华主题

TA的得分主题

发表于 2008-10-1 19:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用voodoo2在2008-10-1 16:30:00的发言:

嘿嘿,oo鸟版主您好啊

上次我的一个难题就是您指教滴。

这么说,match函数只能用于搜索表格,而不能用于搜索数组变量了?

那用于搜索数组的VBA该如何编写呢(不用for...next这类循坏),注意:我说的数组是传统意义编程中的数组,不是excel表格数组。

我没说match函数只能用于搜索表格,上面例子就是指在数组搜索的。

用match函数也是要循环,只是不用自己写,你看不到它循环而已,而且已定死了65536个数以内,运行速度应该与自己写的循环差不多的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-10-1 19:41 | 显示全部楼层
QUOTE:
以下是引用oobird在2008-10-1 19:37:00的发言:

我没说match函数只能用于搜索表格,上面例子就是指在数组搜索的。

用match函数也是要循环,只是不用自己写,你看不到它循环而已,而且已定死了65536个数以内,运行速度应该与自己写的循环差不多的。

谢谢楼上各位的指教

TA的精华主题

TA的得分主题

发表于 2023-4-17 14:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 gjj136138139 于 2023-4-17 14:06 编辑

数组里有没有类似的find方法之类的。如果数组元素是有序的话,能不能用类似二分查找法来找到对应元素出现的位置呢?我的意思是尽量避免遍历数组。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 13:22 , Processed in 0.036992 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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