ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

佛山小老鼠说Excel VBA

    [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-28 18:08 | 显示全部楼层
本帖已被收录到知识树中,索引项:开发帮助和教程
山山好又快 发表于 2012-11-28 16:54
请教老师:
学习您“字典实例应用(二)实例2”中的("产品名称", "型号", "数量", "金额") 加一项“单 ...

先是在单元格里,字典里不能存永久性的东西,运算时放进字典或者数组里,计算后,还是要存放单元格中
所以你要学会从字典里读和写

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-11-29 15:58 | 显示全部楼层
佛山小老鼠 发表于 2012-11-28 18:08
先是在单元格里,字典里不能存永久性的东西,运算时放进字典或者数组里,计算后,还是要存放单元格中
所以你 ...

烦请老师:下面代码中的红色代码是我加入计算“单价”的,为什么只计算数据源的首行数据?谢谢!
Sub test()
    '定义相关的变量
    Dim arr(1 To 10000, 1 To 5), arr1, dic As Object, i As Long, k As Long, hang As Long, Maxrow As Long, t As Single
    t = Timer '开始记时
    Maxrow = Cells(Rows.Count, 1).End(xlUp).Row '找到A列最后一个有数据单元格的行号
    Set dic = CreateObject("scripting.dictionary") '创建字典
    arr1 = Range("A2:E" & Maxrow) '把单元格区域装入数组
    For i = 1 To UBound(arr1, 1) '遍历数组arr1的一维
        Mystring = arr1(i, 1) & arr1(i, 2) '把两个合起来为一个,因为字典的关键词只能装进一列
        If dic.Exists(Mystring) Then '如果字典里存在arr1这个关键词,那么
            hang = dic(Mystring) '找到这个关键词在字典里的位置,对应的Item,而字典里这种Item位置刚好和数组arr的一维对应
            '把字典里的相应的关键键对应的条目对值赋给hang
            arr(hang, 3) = arr(hang, 3) + arr1(i, 3) '累加数组arr前面所对应的数量
            arr(hang, 4) = arr(hang, 4) + arr1(i, 4) '累加数组arr前面所对应的金额
        Else
            k = k + 1 '累加k
            dic(Mystring) = k '把关键字Mystring添加到字典里,且条目对为k
            arr(k, 1) = arr1(i, 1) '把数组arr1里的第i行第1列的数据装进一个新的arr数组里的第k行第1列
            arr(k, 2) = arr1(i, 2) '把数组arr1里的第i行第2列的数据装进一个新的arr数组里的第k行第2列
            arr(k, 3) = arr1(i, 3) '把数组arr1里的第i行第3列的数据装进一个新的arr数组里的第k行第3列
            arr(k, 4) = arr1(i, 4) '把数组arr1里的第i行第4列的数据装进一个新的arr数组里的第k行第4列
            
        End If
        arr(k, 5) = arr1(i, 4) / arr1(i, 3) '计算单价
    Next i
    [H1:L1] = Array("产品名称", "型号", "数量", "金额", "单价")
    Range("H2").Resize(k, 5) = arr
    MsgBox "用时" & Format(Timer - t, "0.00秒") '
End Sub

TA的精华主题

TA的得分主题

发表于 2012-11-29 23:20 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-29 23:29 | 显示全部楼层
山山好又快 发表于 2012-11-29 15:58
烦请老师:下面代码中的红色代码是我加入计算“单价”的,为什么只计算数据源的首行数据?谢谢!
Sub te ...

把附件传上来

TA的精华主题

TA的得分主题

发表于 2012-11-30 08:46 | 显示全部楼层
很好很强大,谢谢分享~~

TA的精华主题

TA的得分主题

发表于 2012-11-30 09:12 | 显示全部楼层
本帖最后由 山山好又快 于 2012-11-30 09:12 编辑
佛山小老鼠 发表于 2012-11-29 23:29
把附件传上来



请教老师:想学习一下。谢谢!

工作表.rar (19.52 KB, 下载次数: 9)

TA的精华主题

TA的得分主题

发表于 2012-11-30 10:51 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-30 11:16 | 显示全部楼层
山山好又快 发表于 2012-11-29 15:58
烦请老师:下面代码中的红色代码是我加入计算“单价”的,为什么只计算数据源的首行数据?谢谢!
Sub te ...

这个结果是对的,你用筛选自己验证一下,如筛选W1,用总金额除以总数量,就是1.956522

TA的精华主题

TA的得分主题

发表于 2012-11-30 12:39 | 显示全部楼层
对我这刚开始学2007的主来说,学这个是早了点,不过好贴子不能错过,收藏下来了。
谢谢斑竹啦

TA的精华主题

TA的得分主题

发表于 2012-11-30 14:31 | 显示全部楼层
佛山小老鼠 发表于 2012-11-30 11:16
这个结果是对的,你用筛选自己验证一下,如筛选W1,用总金额除以总数量,就是1.956522

我验证了,为什么只是部分对呢?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-15 12:10 , Processed in 0.040435 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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