ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 常见字典用法集锦及代码详解

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-3-12 14:55 | 显示全部楼层
本帖已被收录到知识树中,索引项:数组集合和字典
学习,不是为灌水,只为有个地儿

TA的精华主题

TA的得分主题

发表于 2012-3-13 14:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
好帖,感谢楼主的付出啊

TA的精华主题

TA的得分主题

发表于 2012-3-13 17:26 | 显示全部楼层
好东西,今天才看到,准备花一个月好好学习,谢谢 蓝桥玄霜版主的分享

TA的精华主题

TA的得分主题

发表于 2012-3-19 08:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 mjzxlmg 于 2012-6-17 10:28 编辑
蓝桥玄霜 发表于 2010-10-18 12:56
实例11  关键字赋给两列后用Replace方法
一、问题的提出:
有如图实例11-1所示的工资表,要求编写一段代码 ...

近几天无事,研究了一下字典用法,重写了一下“实例11  关键字赋给两列后用Replace方法”这个例子的代码,代码简洁明了。献丑了。


[code=vb]Sub 我的代码()
Dim arr, d As Object, i&, j&, m&, s&, brr()
Set d = CreateObject("Scripting.Dictionary")
With Sheet1
   arr = .[a1].CurrentRegion.Value
ReDim brr(1 To 1000, 1 To UBound(arr, 2) / 3 + 2)
m = 1
For j = 1 To UBound(arr, 2) Step 3
      For i = 2 To UBound(arr)
            If Len(arr(i, j)) Then     '排除空白行
               s = d(arr(i, j) & arr(i, j + 1))       '性别+姓名作为关键字
               If s = Empty Then
                  m = m + 1
                  d(arr(i, j) & arr(i, j + 1)) = m
                  s = m                                     '取得关键字位置
                  brr(s, 1) = arr(i, j)                    '性别
                  brr(s, 2) = arr(i, j + 1)                  '姓名
              End If
              brr(s, (j - 1) / 3 + 3) = arr(i, j + 2)   '各月工资
           End If
      Next
      brr(1, (j - 1) / 3 + 3) = arr(1, j + 2)   '表头:各月工资
Next
   brr(1, 1) = Right$(arr(1, 1), 2)   '表头:性别
   brr(1, 2) = Right$(arr(1, 2), 2)   '表头:姓名
   .[a12].CurrentRegion.ClearContents
   .[a12].Resize(m, UBound(brr, 2)) = brr
End With
Set d = Nothing
End Sub[/code]

实例附件:
实例11_两列Replace.rar (15.73 KB, 下载次数: 71)

TA的精华主题

TA的得分主题

发表于 2012-3-21 09:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢蓝版主,先下了,以后学,现在还只懂一点,一步一步来,

TA的精华主题

TA的得分主题

发表于 2012-3-21 13:44 | 显示全部楼层
看到有这么多回帖在前面,才知道有这么多人已经比我更厉害了

TA的精华主题

TA的得分主题

发表于 2012-3-22 10:09 | 显示全部楼层
请问版主,我模仿你的实例9的代码
想得到结果如下

试件编号                                                                                       部位
H-001 H-002 H-003 H-004 H-005 H-006 HST-007                              1区底板
H-008 H-009 H-010 H-011 H-012 H-013 H-014 H-015 HST-016              2区底板

结果却是:
试件编号                                                                                            部位
H-001 H-002 H-003 H-004 H-005 H-006 HST-007                               1区底板
H-008                                                                                        2区底板

代码如下:
Sub yy()
Dim d As New Dictionary, R
Dim k, i&, j&
R = Sheet1.UsedRange
k = 1
For i = 2 To UBound(R)
    R(i, 2) = Replace(Replace(R(i, 2), "(", "("), ")", ")")
    If d.Exists(R(i, 2)) Then
        R(d(R(i, 2)), 1) = R(d(R(i, 2)), 1) & " " & R(i, 1)
    Else
        k = k + 1
        d(R(i, 2)) = i
        For j = 1 To UBound(R, 2)
            R(k, j) = R(i, j)
        Next
  End If
Next
With Sheet2
    .Cells.ClearContents
    .Cells.Borders.LineStyle = xlNone
    .[A1:B2].Resize(d.Count + 1) = R
    .[A1:B2].Resize(d.Count + 1).Borders.LineStyle = 1
End With
Set d = Nothing
End Sub
附件如下
03-22---实例9_字典取行数组重新赋值.rar (15.46 KB, 下载次数: 26)

TA的精华主题

TA的得分主题

发表于 2012-3-22 10:14 | 显示全部楼层
对不起,说错了,其它朋友也可以回答。特此更正。

TA的精华主题

TA的得分主题

发表于 2012-3-22 17:03 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-3-22 17:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lhx120824 发表于 2012-3-22 17:03
谢谢分享,下载学习。

函数大师也来了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 02:03 , Processed in 0.036318 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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