ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

墙上那一串串红辣椒——数组入门讲座

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-2 18:10 | 显示全部楼层
本帖已被收录到知识树中,索引项:数组集合和字典
bobbyes 发表于 2015-8-2 07:24
Arr() 不是空数组吗?怎么搜索?


开始的时候,Arr()是一个空数组,这时,搜索的结果自然是空。
首先要明白,对空数组也可以搜索。
我无数次做过,明明知道钱包里没有钱,但还是打开它,睁大眼睛看来又看去,希望它出现100¥、50¥,当然,搜索的结果自然是空。
接着的程序,对搜索结果进行判断,如果为空(Arr为空的时候,或者,Arr不为空但不包含当前搜索的姓名的时候),则把当前的姓名赋值给数组Arr()。
随着程序的运行,Arr()在不断变化中。
打开本地窗口,按F8逐步运行程序,观察Arr()的变化,可更好地理解Filter()的作用。
QQ截图20150802180755.jpg

TA的精华主题

TA的得分主题

发表于 2015-8-2 18:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
山菊花 发表于 2015-8-2 18:10
开始的时候,Arr()是一个空数组,这时,搜索的结果自然是空。
接着的程序,对搜索结果进行判断,如果 ...

好的,明白了,谢谢

TA的精华主题

TA的得分主题

发表于 2015-8-3 13:56 | 显示全部楼层
山菊花 发表于 2015-8-2 18:10
开始的时候,Arr()是一个空数组,这时,搜索的结果自然是空。
接着的程序,对搜索结果进行判断,如果 ...

打扰总版主了,麻烦您看看此帖子如何用数组代码来提高速度,帖子已有字典公式,谢谢!http://club.excelhome.net/thread-1221001-1-1.html,因数据量大,用字典的速度不比工作表函数的速度慢,是不可能的,谢谢!

TA的精华主题

TA的得分主题

发表于 2015-12-24 15:18 | 显示全部楼层
山菊花 发表于 2006-10-26 16:11
与Array()和Split()相比,由工作表区域创建数组更加直观而简易,一个等号便解决问题:如:用Sheet2工作表A1 ...

如果工作区是有筛选的话, 那么工作区域赋值给数组OK, 但反过来数组赋值给工作区域,就会出错,好像都按数组的第一行来填充了.

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-12-24 16:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Robinhuang 发表于 2015-12-24 15:18
如果工作区是有筛选的话, 那么工作区域赋值给数组OK, 但反过来数组赋值给工作区域,就会出错,好像都按数组 ...

是的。
筛选状态下的数组操作让人扫兴。

TA的精华主题

TA的得分主题

发表于 2015-12-25 09:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 Robinhuang 于 2015-12-25 09:23 编辑
山菊花 发表于 2015-12-24 16:09
是的。
筛选状态下的数组操作让人扫兴。

如果是单纯的隐藏行或者列,是没有影响的.  
筛选状态下从单元格赋值给数组也是没有影响的. 居然就是反过来不行.


有啥方式可以绕过这个限制呢?

用了数组,再用单元格赋值, 真是数量级的差距啊

TA的精华主题

TA的得分主题

发表于 2016-1-29 16:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
山菊花 发表于 2006-10-29 22:40
提供两个方法,供参考:

感觉还是复杂了点。

TA的精华主题

TA的得分主题

发表于 2016-5-13 11:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
先收藏,再学习

TA的精华主题

TA的得分主题

发表于 2016-8-8 15:09 | 显示全部楼层
山菊花 发表于 2006-10-26 16:15
园子里是不是有红苹果?你手中的牌是不是有红桃K?我们用眼睛一瞄就知道。数组元素中是不是有“张三”,是 ...

子里是不是有红苹果?你手中的牌是不是有红桃K?我们用眼睛一瞄就知道

TA的精华主题

TA的得分主题

发表于 2016-9-11 09:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
山菊花 发表于 2006-10-26 16:14
以上声明的数组都属于“静态数组”,每个数组有确定的维数,每维有确定的最大下标。与之相对应的是动态数组 ...

Sub 提取名字()
Sheet2.[a1].CurrentRegion = ""
Dim wz$, brr(), crr()
wz = "朱清燕(女),林鑫,林秋静(女),林永鑫,林云艳(女),林嘉惠(女),曾文婷(女),林悦,陈诚,林伟健,赖紫岚(女),曾雁(女),赖文强,钟娟(女),张琪(女),林文彬,黄晓婷(女),李朕,林依婷(女),林佳利(女),曾德福"
xm = Split(wz, ",")
ReDim brr(LBound(xm) To UBound(xm))
ReDim crr(LBound(xm) To UBound(xm))
For i = LBound(xm) To UBound(xm)

If InStr(xm(i), "(") <> 0 Then
   brr(i) = Left(xm(i), InStr(xm(i), "(") - 1)
   crr(i) = Mid(xm(i), InStr(xm(i), "(") + 1, 1)
Else
brr(i) = xm(i)
crr(i) = ""
End If
Next
Sheet2.[a1].Resize(UBound(xm), 1) = Application.WorksheetFunction.Transpose(brr)
Sheet2.[b1].Resize(UBound(xm), 1) = Application.WorksheetFunction.Transpose(crr)
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 22:41 , Processed in 0.046790 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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