ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] d(Arr(i, 3)) = d(Arr(i, 3)) & i & ","的含义?

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-5-19 16:31 | 显示全部楼层 |阅读模式
刚在学字典,蓝桥玄霜的一个例子,不能理解(红线部分),还请各位高手不惜赐教,最好能够介绍一下:Sub cfz()Dim i&, Myr&, Arr, j&, aaDim d, k, t, m&, Arr1Set d = CreateObject("Scripting.Dictionary")Myr = Sheet1.[a65536].End(xlUp).RowArr = Sheet1.Range("a1:g" & Myr)For i = 2 To UBound(Arr)    If Left(Arr(i, 2), 3) = "禾丰镇" Then        d(Arr(i, 3)) = d(Arr(i, 3)) & i & ","    ElseIf Left(Arr(i - 1, 2), 3) = "禾丰镇" Then        d(Arr(i, 3)) = d(Arr(i, 3)) & i & ","    End IfNextk = d.keyst = d.itemsReDim Arr1(1 To UBound(Arr), 1 To 2)For i = 0 To UBound(k)    t(i) = Left(t(i), Len(t(i)) - 1)    If InStr(t(i), ",") > 0 Then        aa = Split(t(i), ",")        For j = 0 To UBound(aa)            m = m + 1            Arr1(m, 1) = k(i)            Arr1(m, 2) = Arr(aa(j), 2)        Next    End IfNextSheet2.Activate[a:b].ClearContents[a2].Resize(UBound(Arr1), 2) = Arr1[a1].Resize(1, 2) = Array("姓名", "地址")End Sub


TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-19 16:32 | 显示全部楼层
希望哪位高手能够稍微详细介绍一下过程。万分感谢!

TA的精华主题

TA的得分主题

发表于 2014-5-19 16:41 | 显示全部楼层
d(Arr(i, 3)) = d(Arr(i, 3)) & i & ","
用字典记住每个Arr(i, 3)所在的行号。
假设i=5时,Arr(i, 3)假设是“ 办公室”,第一次出现,即字典不存在,这时d(Arr(i, 3))="",该表达式就是:
d("办公室") = "" & 5 & ","——d("办公室") = "5,"
i=9再次遇见"办公室",这时字典已经存在了,该表达式就是:
d("办公室") ="5," & 9 &  ","——d("办公室") ="5, 9,"
…………
最后d("办公室")会记住所有办公室出现的行号:"5, 9,……"

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-19 16:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
万分谢谢! zhaogang1960,你解释非常清晰:
另外,麻烦您在解说一下,  
For i = 0 To UBound(k)   
t(i) = Left(t(i), Len(t(i)) - 1)   
If InStr(t(i), ",") > 0 Then        aa = Split(t(i), ",")        
For j = 0 To UBound(aa)            
m = m + 1            
Arr1(m, 1) = k(i)            
Arr1(m, 2) = Arr(aa(j), 2)        
Next

TA的精华主题

TA的得分主题

发表于 2014-5-19 17:03 | 显示全部楼层
bjbxm97 发表于 2014-5-19 16:53
万分谢谢! zhaogang1960,你解释非常清晰:
另外,麻烦您在解说一下,  
For i = 0 To UBound(k)   

For i = 0 To UBound(k)
t(i) = Left(t(i), Len(t(i)) - 1) '去掉最右边多余的逗号
If InStr(t(i), ",") > 0 Then '含有逗号
    aa = Split(t(i), ",") '用逗号为分隔符把字典记住的行号分割为一个一维数组
    For j = 0 To UBound(aa) '逐个行号
    m = m + 1 '加一行
    Arr1(m, 1) = k(i) '字典键值
    Arr1(m, 2) = Arr(aa(j), 2) '该行号对应的值——具体是什么不知道
End If
Next

评分

4

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-19 17:08 | 显示全部楼层
zhaogang1960 发表于 2014-5-19 17:03
For i = 0 To UBound(k)
t(i) = Left(t(i), Len(t(i)) - 1) '去掉最右边多余的逗号
If InStr(t(i), "," ...

谢谢!之前看了好一会,没有理解,您帮了我大忙了,万分谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-19 17:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
之前在网上找了很久,没有帖子能像 zhaogang1960 解释这么清晰的,相信这对很多初学的朋友很有用。

TA的精华主题

TA的得分主题

发表于 2014-5-20 21:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-9-14 09:04 | 显示全部楼层
zhaogang1960 发表于 2014-5-19 16:41
d(Arr(i, 3)) = d(Arr(i, 3)) & i & ","
用字典记住每个Arr(i, 3)所在的行号。
假设i=5时,Arr(i, 3)假设 ...

太感谢了,正在疑惑呢,终于理解了。

TA的精华主题

TA的得分主题

发表于 2014-9-25 16:54 | 显示全部楼层
zhaogang1960 发表于 2014-5-19 17:03
For i = 0 To UBound(k)
t(i) = Left(t(i), Len(t(i)) - 1) '去掉最右边多余的逗号
If InStr(t(i), "," ...

感谢你的解释。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 04:32 , Processed in 0.046223 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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