ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-8-21 22:18 | 显示全部楼层
本帖已被收录到知识树中,索引项:数组集合和字典
谢谢蓝老师 ,是你的代码让我入的门,谢谢你写的这么详细

TA的精华主题

TA的得分主题

发表于 2012-8-30 20:51 | 显示全部楼层
学习好文章,谢谢版主!

TA的精华主题

TA的得分主题

发表于 2012-8-30 22:06 | 显示全部楼层
谢谢蓝老师 ,是你的代码让我入了门,我在工作中用你的字典法解决了很多问题,例如:我用Execel自定义工具中 的宏汇总当前文件夹下的所有电子表,给我带来了很大方便,谢谢你!不过偶然又发现了一个问题,当单元格字符数多的情况下,转置函数不可用,我的代码如下:
Sub 汇总数据()
    On Error Resume Next
    Dim sh As Worksheet, Wb As Workbook
    x = MsgBox("是汇总工作簿的当前表,否则汇总工作簿的各个表! ", vbYesNoCancel + vbInformation, "当前文件夹内工作表汇总设置")
    If x = 2 Then Exit Sub
    hh = Val(InputBox("请输入汇总数据的起始行号!", "当前文件夹内工作表汇总设置", "2"))
    If hh < 1 Then Exit Sub
    Application.DisplayAlerts = False
    Application.Calculation = xlCalculationManual
    Set B = CreateObject("Scripting.Dictionary")
    If x <> 2 Then
       lj = ThisWorkbook.Path
       wj = Dir(lj & "\*.xls")
       Do While wj <> ""
          If wj <> ThisWorkbook.Name Then
             Set Wb = Workbooks.Open(lj & "\" & wj)
             For Each sh In Wb.Worksheets
               If Application.CountA(sh.Cells) > 0 Then
                 hmax = sh.UsedRange.Rows.Count + sh.UsedRange.Row - 1
                 If (x = 7 Or (x = 6 And sh.Name = Wb.ActiveSheet.Name)) And hmax >= hh Then
                    If B.Count = 0 Then
                       hh1 = Application.Max(hh - 1, 1)
                       lh = sh.Cells(hh1, 256).End(xlToLeft).Column
                       B("工作簿" & " " & "工作表" & " " & "序号") = sh.Cells(hh1, 1).Resize(1, lh)
                    End If
                    For Each D In sh.Range("B" & hh & ":B" & hmax)
                      B(Replace(Wb.Name, ".xls", "") & " " & sh.Name & " " & B.Count) = sh.Cells(D.Row, 1).Resize(1, lh)
                    Next
                 End If
               End If
             Next
             Wb.Close False
          End If
          wj = Dir
       Loop
    End If
    If B.Count > 1 Then
       Set Wb = Workbooks.Add
       With [A1].Resize(B.Count, lh)
         .NumberFormatLocal = "@"
         .Value = Application.Transpose(Application.Transpose(B.items))
       End With
       Cells(1, lh + 1).Resize(B.Count, 1) = Application.Transpose(B.keys)
       Call 整理数据
       ActiveSheet.Name = "汇总数据(" & B.Count - 1 & ")"
       Wb.SaveAs ThisWorkbook.Path & "\" & "汇总数据(" & B.Count - 1 & ").xls"
    End If
    Application.Calculation = xlCalculationAutomatic
    Application.DisplayAlerts = True
End Sub
调试时发现错误在  .Value = Application.Transpose(Application.Transpose(B.items)) ,经过查找可能是字多转置函数受限造成的,麻烦蓝老师看一看应该怎样解决这个问题?谢谢各位老师!

新建文件夹.rar

27.85 KB, 下载次数: 32

TA的精华主题

TA的得分主题

发表于 2012-8-30 23:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
占位置学习,不是为灌水,只为有个地儿

TA的精华主题

TA的得分主题

发表于 2012-9-2 15:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
占位置学习,不是为灌水,只为有个地儿{:soso_e113:}

TA的精华主题

TA的得分主题

发表于 2012-9-4 23:03 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-9-5 01:29 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-9-8 11:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
蓝桥玄霜 发表于 2010-10-18 12:50
实例3  A列中显示1 ~ 1000中被6除余1和余5 的数字
一、问题的提出:
有1、2、3…1000一千个数字,要求编写 ...

列4的红色标注的话不是很明白:能举个例子吗?谢谢!

11、GoTo 100 :Goto语句用于无条件地转移到过程中指定的行。这里采用跳出For i循环,一是为了减少循环的次数,比如"MOTO"找到的话,后面3个就不需要找了;二是为了跳过两个小循环之后的其它品牌加入第3个字典的d2(Arr(x, 1)) = ""语句。

TA的精华主题

TA的得分主题

发表于 2012-9-10 12:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
斑竹,你真的就是一个活菩萨。太感谢您了,早看到您的大作,也不至于浪费那么多时间揣摩。

TA的精华主题

TA的得分主题

发表于 2012-9-10 17:41 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 13:56 , Processed in 0.043870 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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