Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1817|回复: 5

[已解决]谢谢liuguansky老师,汇总求助

[复制链接]
发表于 2010-12-9 18:32 | 显示全部楼层 |阅读模式

p7amr7os.rar (64.52 KB, 下载次数: 1)

 楼主| 发表于 2010-12-10 07:48 | 显示全部楼层

回复:(lhj323323)[求助]汇总求助

求助
回复

使用道具 举报

发表于 2010-12-10 09:44 | 显示全部楼层

详见附件

Sub justsoso()
    Dim dic, dic1, arr, i&, arrt(), k&
    Set dic = CreateObject("scripting.dictionary")
    Set dic1 = CreateObject("scripting.dictionary")
    dic1.Add "本币", 0
    dic1.Add "外币", 9
    arr = [b3:j3]
    For i = 1 To UBound(arr, 2)
        dic1.Add arr(1, i), i
    Next i
    arr = Sheet11.Range("a1:l" & Sheet11.Cells(Rows.Count, 2).End(3).Row).Value
    For i = 2 To UBound(arr, 1)
        If arr(i, 8) <> "" Then
            If dic.exists(arr(i, 8)) Then
                arrt(dic1(arr(i, 6)) + dic1(arr(i, 2)), dic(arr(i, 8))) = arrt(dic1(arr(i, 6)) + dic1(arr(i, 2)), dic(arr(i, 8))) + arr(i, 11)
                arrt(dic1(arr(i, 6)) + dic1(arr(i, 2)) + 20, dic(arr(i, 8))) = arrt(20 + dic1(arr(i, 6)) + dic1(arr(i, 2)), dic(arr(i, 8))) + arr(i, 12)
                Else: k = k + 1: ReDim Preserve arrt(1 To 40, 1 To k): dic.Add arr(i, 8), k
            End If
        End If
    Next
    Rows("4:" & Rows.Count).ClearContents
    Cells(4, 1).Resize(k, 1) = Application.Transpose(dic.keys)
    Cells(4, 2).Resize(k, 40) = Application.Transpose(arrt)
    Set dic = Nothing
End Sub 35SJeS0g.rar (46.13 KB, 下载次数: 4)
回复

使用道具 举报

 楼主| 发表于 2010-12-10 12:09 | 显示全部楼层

回复:(liuguansky)详见附件

liuguansky老师:

在数据源[全辖数据库]的K\L列的金额合计为1140854958

在结果表[表六]的金额合计为1124466219

好像结果表导入的数据不够

回复

使用道具 举报

发表于 2010-12-10 12:41 | 显示全部楼层    本楼为最佳答案   

Sub justsoso()
    Dim dic, dic1, arr, i&, arrt(), k&
    Set dic = CreateObject("scripting.dictionary")
    Set dic1 = CreateObject("scripting.dictionary")
    dic1.Add "本币", 0
    dic1.Add "外币", 9
    arr = [b3:j3]
    For i = 1 To UBound(arr, 2)
        dic1.Add arr(1, i), i
    Next i
    arr = Sheet11.Range("a1:l" & Sheet11.Cells(Rows.Count, 2).End(3).Row).Value
    For i = 2 To UBound(arr, 1)
        If arr(i, 8) <> "" Then
            If dic.exists(arr(i, 8)) Then
                arrt(dic1(arr(i, 6)) + dic1(arr(i, 2)), dic(arr(i, 8))) = arrt(dic1(arr(i, 6)) + dic1(arr(i, 2)), dic(arr(i, 8))) + arr(i, 11)
                arrt(dic1(arr(i, 6)) + dic1(arr(i, 2)) + 18, dic(arr(i, 8))) = arrt(18 + dic1(arr(i, 6)) + dic1(arr(i, 2)), dic(arr(i, 8))) + arr(i, 12)
                Else: k = k + 1: ReDim Preserve arrt(1 To 36, 1 To k): dic.Add arr(i, 8), k
                    arrt(dic1(arr(i, 6)) + dic1(arr(i, 2)), k) = arr(i, 11)
                    arrt(dic1(arr(i, 6)) + dic1(arr(i, 2)) + 18, k) = arr(i, 12)
            End If
        End If
    Next
    Rows("4:" & Rows.Count).ClearContents
    Cells(4, 1).Resize(k, 1) = Application.Transpose(dic.keys)
    Cells(4, 2).Resize(k, 36) = Application.Transpose(arrt)
    Set dic = Nothing
End Sub
不好意思,漏了一段代码。 IDGD8lHX.rar (46.33 KB, 下载次数: 17)
回复

使用道具 举报

发表于 2010-12-13 16:06 | 显示全部楼层

学习下
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-14 23:23 , Processed in 0.330800 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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