ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论]有点难度的汇总

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-11-27 11:49 | 显示全部楼层
QUOTE:
以下是引用彭希仁在2007-11-27 10:44:24的发言:

单片机中的IF,左移右移,加法,减法我倒是知道如何通过数字电路实现,

至于你说的开发自已的Excel我是屁都不懂一个,估计中国人就你懂.哈哈

彭兄,你又提到我的强项了,单片机这块我太熟了,可以说是我的发展方向之一,想当年给老外做了一个项目(附图),老外连个物理参数都不让改,向老板建议自己搞,老板不愿在研发上投入,说人家这方面已经做得很成熟了,我想老板几百万美元宁可给老外也不让自己人拿,一不爽就走人了
这里我要承认自己犯了个低级的错误,我怎么能以国内的水平来衡量自己,对自己的要求也太低了吧


[讨论]有点难度的汇总

[讨论]有点难度的汇总

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-11-27 14:05 | 显示全部楼层
QUOTE:
以下是引用BrandSex在2007-11-27 11:49:18的发言:

彭兄,你又提到我的强项了,单片机这块我太熟了,可以说是我的发展方向之一,想当年给老外做了一个项目(附图),老外连个物理参数都不让改,向老板建议自己搞,老板不愿在研发上投入,说人家这方面已经做得很成熟了,我想老板几百万美元宁可给老外也不让自己人拿,一不爽就走人了
这里我要承认自己犯了个低级的错误,我怎么能以国内的水平来衡量自己,对自己的要求也太低了吧


你牛逼,即然你这么牛逼,那么就请你做做这题吧,让大伙见识见识.

TA的精华主题

TA的得分主题

发表于 2007-11-27 14:28 | 显示全部楼层
QUOTE:
以下是引用dxy27在2007-11-27 9:49:24的发言:

结果好象不对啊?

地区备注 栏的总数 才 388

应该是 658 才对。

TA的精华主题

TA的得分主题

发表于 2007-11-27 14:32 | 显示全部楼层

难处理的地方是报表的格式、美观的问题

“地区备注” 栏这样设计, 开始以为是统计各地区各型号故障 的总合。

仔细看又觉得是分别统计 各型号各种故障 在各地区的数量

如此一来“地区备注” 栏会非常宽(几十列)不知道题目的本意是否这样

另 不用ado 也可以用字典套字典实现

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-11-27 14:41 | 显示全部楼层
QUOTE:
以下是引用ldy888在2007-11-27 14:32:40的发言:

难处理的地方是报表的格式、美观的问题

“地区备注” 栏这样设计, 开始以为是统计各地区各型号故障 的总合。

仔细看又觉得是分别统计 各型号各种故障 在各地区的数量

如此一来“地区备注” 栏会非常宽(几十列)不知道题目的本意是否这样

另 不用ado 也可以用字典套字典实现

地区备注只需保留前三,难就难在这里.

ldy888兄用字典套字典写一个吧.

TA的精华主题

TA的得分主题

发表于 2007-11-27 14:47 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-11-27 15:09 | 显示全部楼层
QUOTE:
以下是引用ldy888在2007-11-27 14:32:40的发言:

难处理的地方是报表的格式、美观的问题

“地区备注” 栏这样设计, 开始以为是统计各地区各型号故障 的总合。

仔细看又觉得是分别统计 各型号各种故障 在各地区的数量

如此一来“地区备注” 栏会非常宽(几十列)不知道题目的本意是否这样

另 不用ado 也可以用字典套字典实现

“地区备注” 栏的意思是每种型号的每种问题只取前3个最多的地区,而且是从大到小排列,我觉得

这是最难的地方.请参考

TA的精华主题

TA的得分主题

发表于 2007-11-27 16:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

Sub aaaa()
    'Dim d1 As New Dictionary  d1 是多余的注释掉
    Dim d2 As New Dictionary
    Dim d3 As New Dictionary
    Dim d4 As New Dictionary
    r = Sheet2.Range("a2").End(xlDown).Row - 1
    arr = Sheet2.Range("a2").Resize(r, 3)

    For I = 1 To r
        For j = 1 To 3
            arr(I, j) = Trim(arr(I, j))    '文字净化处理 去掉手误空格
        Next
      '  s = d1(arr(I, 1))
        d2(arr(I, 2)) = d2(arr(I, 2)) + 1
        s = d3(arr(I, 3))
        xhgz = arr(I, 2) & " " & arr(I, 3)    ' 型号 故障
        If d4.Exists(xhgz) = False Then Set d4(xhgz) = New Dictionary'字典套字典
        d4(xhgz)(arr(I, 1)) = d4(xhgz)(arr(I, 1)) + 1
    Next
    arr = d4.Items
    For I = 0 To UBound(arr)
        If arr(I).Count > X Then X = arr(I).Count: SS = d4.Keys(I)
    Next
    Erase arr
    ReDim AR(1 To (d2.Count + d4.Count), 1 To 11)
    I = 0
    For Each K In d4
        xh = Split(K)(0)
        gz = Split(K)(1)
        I = I + 1
        AR(I, 1) = (I - 1) Mod (d3.Count + 1) + 1

        AR(I, 2) = xh
        AR(I, 3) = gz

        For Each KK In d4(K)
            AR(I, 4) = AR(I, 4) + d4(K)(KK)

        For Each KK In d4(K)
            AR(i, 4) = AR(i, 4) + d4(K)(KK)
            If d4(K)(KK) >= AR(i, 7) Then' 这里重新改过了, 取前三名,优化问题就不管了
                AR(i, 10) = AR(i, 8): AR(i, 11) = AR(i, 9)
                AR(i, 8) = AR(i, 6): AR(i, 9) = AR(i, 7)
                AR(i, 6) = KK: AR(i, 7) = d4(K)(KK)
            ElseIf d4(K)(KK) >= AR(i, 9) Then
                AR(i, 10) = AR(i, 8): AR(i, 11) = AR(i, 9)
                AR(i, 8) = KK: AR(i, 9) = d4(K)(KK)
            ElseIf d4(K)(KK) > AR(i, 11) Then
                AR(i, 10) = KK: AR(i, 11) = d4(K)(KK)
            End If

        Next

        Next
        AR(I, 5) = AR(I, 4) / d2(xh)
        If AR(I, 1) = d3.Count Then
            I = I + 1
            AR(I, 1) = (I - 1) Mod (d3.Count + 1) + 1
            AR(I, 2) = xh
            AR(I, 3) = "合计"
            AR(I, 4) = d2(xh)
            AR(I, 5) = "100%"
        End If
    Next
    Range("a3").Resize(UBound(AR), 11) = AR
End Sub

[此贴子已经被作者于2007-11-27 17:26:17编辑过]

TA的精华主题

TA的得分主题

发表于 2007-11-27 16:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

彭兄的表里所有机型都出现了5 种故障

所以 没考虑某种型号的故障 没有出齐的情况。

比如 所有地区的s11都没有出现 不开机 的故障

否则又要增加判断语句.

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-11-27 16:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
QUOTE:
以下是引用ldy888在2007-11-27 16:11:15的发言:

Sub aaaa()
    Dim d1 As New Dictionary
    Dim d2 As New Dictionary
    Dim d3 As New Dictionary
    Dim d4 As New Dictionary
    r = Sheet2.Range("a2").End(xlDown).Row - 1
    arr = Sheet2.Range("a2").Resize(r, 3)

    For I = 1 To r
        For j = 1 To 3
            arr(I, j) = Trim(arr(I, j))    '文字净化处理 去掉手误空格
        Next
        s = d1(arr(I, 1))
        d2(arr(I, 2)) = d2(arr(I, 2)) + 1
        s = d3(arr(I, 3))
        xhgz = arr(I, 2) & " " & arr(I, 3)    ' 型号 故障
        If d4.Exists(xhgz) = False Then Set d4(xhgz) = New Dictionary'字典套字典
        d4(xhgz)(arr(I, 1)) = d4(xhgz)(arr(I, 1)) + 1
    Next
    arr = d4.Items
    For I = 0 To UBound(arr)
        If arr(I).Count > X Then X = arr(I).Count: SS = d4.Keys(I)
    Next
    Erase arr
    ReDim AR(1 To (d2.Count + d4.Count), 1 To 11)
    I = 0
    For Each K In d4
        xh = Split(K)(0)
        gz = Split(K)(1)
        I = I + 1
        AR(I, 1) = (I - 1) Mod (d3.Count + 1) + 1

        AR(I, 2) = xh
        AR(I, 3) = gz

        For Each KK In d4(K)
            AR(I, 4) = AR(I, 4) + d4(K)(KK)
            If d4(K)(KK) > AR(I, 7) Then  '前3个最多的地区
                AR(I, 6) = KK: AR(I, 7) = d4(K)(KK)
            ElseIf d4(K)(KK) > AR(I, 9) Then
                AR(I, 8) = KK: AR(I, 9) = d4(K)(KK)
            ElseIf d4(K)(KK) > AR(I, 11) Then
                AR(I, 10) = KK: AR(I, 11) = d4(K)(KK)
            End If
        Next
        AR(I, 5) = AR(I, 4) / d2(xh)
        If AR(I, 1) = d3.Count Then
            I = I + 1
            AR(I, 1) = (I - 1) Mod (d3.Count + 1) + 1
            AR(I, 2) = xh
            AR(I, 3) = "合计"
            AR(I, 4) = d2(xh)
            AR(I, 5) = "100%"
        End If
    Next
    Range("a3").Resize(UBound(AR), 11) = AR
End Sub

引用胡汗三的一句名言"高,实在是高"

总算见识了什么是字典套字典了

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-15 07:22 , Processed in 0.042444 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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