ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2016-9-11 10:32 | 显示全部楼层
本帖已被收录到知识树中,索引项:数组集合和字典
本帖最后由 weiyingde 于 2016-9-11 10:36 编辑
山菊花 发表于 2006-10-26 16:15
对同一数组反复改变大小的时候,也有规则必须遵守。如果数组中存在数据,再次定义的时候默认把原数据清除, ...


把它改成3列,变成:
Private Sub CommandButton1_Click()
    Dim Xm() As String, Arr() As String '声明两个动态数组,定义为字符型
    Dim s As Integer, n As Integer
    Xm = Split(Range("a1"), ",") '把文本转换为数组
    s = UBound(Xm)
    n = 0
    For i = 0 To s
        n = n + 1
        ReDim Preserve Arr(1 To 3, 1 To n)  '改变动态数组的大小,共2行,n列
        Arr(1, n) = n
        If Right(Xm(i), 3) = "(女)" Then '如果后面三个字符是“(女)”
            Arr(2, n) = Left(Xm(i), Len(Xm(i)) - 3)  '取前面的字符
            Arr(3, n) = "女"
        Else
            Arr(2, n) = Xm(i)            
            Arr(3, n) = "男"
        End If
    Next
    Range("b6").Resize(n, 3) = WorksheetFunction.Transpose(Arr)  '把结果保存到工作表指定的单元格中
End Sub

TA的精华主题

TA的得分主题

发表于 2016-9-11 16:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
山菊花 发表于 2006-10-26 16:15
园子里是不是有红苹果?你手中的牌是不是有红桃K?我们用眼睛一瞄就知道。数组元素中是不是有“张三”,是 ...

Dim xm() As String, arr() As String, Temp() As String '声明变量
    Dim s%, r% '声明单值变量
    On Error Resume Next '启动一个错误处理程序
    xm = Split(Range("a1"), ",") '用A1单元格的数据创建数组
    r = 0 '初值
    s = UBound(xm) '最大下标
    For i = 0 To s '循环
        Temp = Filter(arr, xm(i)) '搜索数组
        If UBound(Temp) = -1 Then '如果未找到
            r = r + 1 '序号,自增1
            ReDim Preserve arr(1 To r) '定义动态数组大小
            arr(r) = xm(i) '把姓名复制到数组Arr()中。
        End If
    Next
    Range("a3").Resize(1, r) = arr '填充到工作表
    Range("a2") = Join(arr, ",")

请问版主:其中UBound(Temp) = -1 很费解,没找到,也就是说,temp为空数组,应该是Ubound(temp)=0,为什么是-1呢,愿得到点破。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-11 17:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
weiyingde 发表于 2016-9-11 16:37
temp为空数组,应该是Ubound(temp)=0
   ...

这个想法,用一个成语来点评再合适不过了:自以为是。
其实它不是,当数组为空时,Ubound()结果等于-1。最大下标与数组包含元素的个数是两个概念, 不要混淆了。
今天给过你两个建议,现在再给一个建议。
调试程序时可以在适当位置插入临时语句,如把值赋给变量、插入Debug.Print 语句把值输出到立即窗口,用这些方法观察程序运行的结果,从而判断程序运行是否正常,方法是否正确等。

debug.jpg

TA的精华主题

TA的得分主题

发表于 2016-9-11 17:37 | 显示全部楼层
谢谢提醒和指导,对数组,尽管学EXCeL已有些时日,尽管在求助别人解决具体问题的时候,也有涉及到数组,但都是囫囵吞枣的拿过来用,从没有真正涉及到数组本身。这个学期,比较清闲,才有功夫和心情静下心来仔细研究,奈何时不我待,眼花脑笨,精力不济,忘性颇大,领悟不快,恐今后在学习过程中,还会说出和作出大侠们不齿的蠢话、蠢事,望不嫌弃,继续指导。
谢谢了!!

TA的精华主题

TA的得分主题

发表于 2016-9-11 17:45 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-11 17:59 | 显示全部楼层
weiyingde 发表于 2016-9-11 17:37
还会说出和作出大侠们不齿的蠢话、蠢事 ...

这句话说重了,谁的VBA都不是从娘胎里带来的,都是从零学起的,学习过程中犯一些错误是正常现象,不足为奇,你会,我也会,在学习过程中不断改进、提高就是。在论坛交流,除了正正经经的代码,其它言语不必较真,如果我说的一些话你不喜欢听,请原谅,我没有恶意,楼上我用“自以为是”纯粹是借用成语,没有讥笑你的意思。

TA的精华主题

TA的得分主题

发表于 2016-9-11 19:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
山菊花 发表于 2016-9-11 17:59
这句话说重了,谁的VBA都不是从娘胎里带来的,都是从零学起的,学习过程中犯一些错误是正常现象,不足为 ...

没什么,能得到指导,实属难得。这些指导,是你在工作之余的无私奉献,感谢都来不及了。面对那么多的参差不齐的“菜鸟”,特别是对我这样的愚顽的l老菜鸟,久不开化,提出的问题,对你们这些大侠来说,幼稚可笑,就像我们面对那些幼稚的学生一样,有时使出浑身解数,仍不能使之开窍,也会无奈的说这样的话……
希望你继续指导,做您的学生,真的很荣幸。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-11 19:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
论坛是个大课堂,我们身在其中,慢慢体味,很奇妙,在某一时刻或在讨论某一话题中,自己像个小学生,认真学习,孜孜不倦。而一转身,在另一个话题或另一群人中,自己可以是个称职的老师,对他人娓娓道来、热情奉献。
共同学习,共同提高。

TA的精华主题

TA的得分主题

发表于 2016-9-11 20:08 | 显示全部楼层
山菊花 发表于 2016-9-11 19:58
论坛是个大课堂,我们身在其中,慢慢体味,很奇妙,在某一时刻或在讨论某一话题中,自己像个小学生,认真学 ...

版主如果方便,帮我看一看这段代码:

http://club.excelhome.net/thread-1300215-4-1.html
36——37楼
代码运行平台:ppt
代码意图    :将指定路径的所有视频文件名录入数组 arr。
              以便课间休息时随机播放。

TA的精华主题

TA的得分主题

发表于 2016-12-9 02:38 | 显示全部楼层
真的很佩服这位老师,这可是十年之前的帖子,现在依然看到山老师的解答,真是实实在在的传道授业解惑的师者,赞一个,狂赞一个。。。。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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