Excel精英培训网

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

VBA实现一个数据提取后排序

[复制链接]
发表于 2019-8-2 13:57 | 显示全部楼层 |阅读模式
5学分
各位朋友,我遇到问题了,请帮帮忙
希望达到的目标
1.把所有的相同公司名称的单元格 AND 相同的币种单元格的  金额的值 相加。= 总的金额
生成一个新的表格,把所有公司的不同币种的费用总计做一个排序。看出哪家公司的金额最多,哪家最少。

工作簿4.zip

34.45 KB, 下载次数: 9

最佳答案

查看完整内容

数据透视表就可以了
发表于 2019-8-2 13:57 | 显示全部楼层
回复

使用道具 举报

发表于 2019-8-3 10:16 | 显示全部楼层
是这样的吗?需要手动建一个Sheet2表,放结果。

Option Explicit
Sub test()
        Dim arr, i, d, d1, d2, s, Ik, Ik2, Im
        Dim sh1 As Worksheet, sh2 As Worksheet, sh3 As Worksheet
        Set sh1 = Sheets("sheet1")
        Set sh2 = Sheets("sheet2")
        sh2.Cells.Clear
        sh1.[a1:c1].Copy sh2.[a1]
         arr = sh1.[a1].CurrentRegion
         Set d = CreateObject("scripting.dictionary")
         Set d1 = CreateObject("scripting.dictionary")
         Set d2 = CreateObject("scripting.dictionary")
         
         For i = 2 To UBound(arr)
                s = arr(i, 1) & "|" & arr(i, 2)
                d(s) = arr(i, 1)
                d1(s) = arr(i, 2)
                 d2(s) = d2(s) + arr(i, 3)
         Next i
         Ik = d.items
         Ik2 = d1.items
         Im = d2.items
         sh2.[a2].Resize(d.Count) = Application.Transpose(Ik)
         sh2.[b2].Resize(d.Count) = Application.Transpose(Ik2)
         sh2.[c2].Resize(d.Count) = Application.Transpose(Im)
         sh2.Range("a1:c" & sh2.[a65536].End(3).Row).Sort sh2.[b1], 1, , sh2.[a1], 1, sh2.[c1], 1, 1
         ThisWorkbook.Save
End Sub

回复

使用道具 举报

发表于 2019-8-5 21:53 | 显示全部楼层
PivotTable汇总参考
ScreenShot.PNG

工作簿4.rar

47.2 KB, 下载次数: 8

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 13:51 , Processed in 0.165709 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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