Excel精英培训网

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

[已解决]如图所示,如何比较多个工作薄中相同项的值并保留最大值

[复制链接]
发表于 2016-12-18 20:11 | 显示全部楼层 |阅读模式
如图所示,需要对同一个文件夹下的多个不同的工作薄中相同项的值进行比较并保留最大值,如何实现,请老师指教。
最佳答案
2016-12-19 10:31
Sub test()
    Dim p$, f$, d1, d2, A, i%
    Application.ScreenUpdating = False
    Set d1 = CreateObject("scripting.dictionary")
    Set d2 = CreateObject("scripting.dictionary")
    p = ThisWorkbook.Path & "\"
    f = Dir(p & "*.xlsx")

    Do While f <> ""
        With Workbooks.Open(p & f)
            A = .Sheets(1).UsedRange
            .Close
        End With

        For i = 3 To UBound(A)
            If A(i, 2) > d1(A(i, 1)) Then
                d1(A(i, 1)) = A(i, 2)
                d2(A(i, 1)) = A(i, 3)
            End If
        Next i
        f = Dir
    Loop

    A = Range("a1").CurrentRegion
    For i = 3 To UBound(A)
        A(i, 2) = d1(A(i, 1))
        A(i, 3) = d2(A(i, 1))
    Next i
    Range("a1").Resize(UBound(A), UBound(A, 2)) = A
End Sub

比较并保留最大值2.rar (43.58 KB, 下载次数: 7)
捕获.PNG

比较并保留最大值.zip

33.77 KB, 下载次数: 5

发表于 2016-12-19 10:31 | 显示全部楼层    本楼为最佳答案   
Sub test()
    Dim p$, f$, d1, d2, A, i%
    Application.ScreenUpdating = False
    Set d1 = CreateObject("scripting.dictionary")
    Set d2 = CreateObject("scripting.dictionary")
    p = ThisWorkbook.Path & "\"
    f = Dir(p & "*.xlsx")

    Do While f <> ""
        With Workbooks.Open(p & f)
            A = .Sheets(1).UsedRange
            .Close
        End With

        For i = 3 To UBound(A)
            If A(i, 2) > d1(A(i, 1)) Then
                d1(A(i, 1)) = A(i, 2)
                d2(A(i, 1)) = A(i, 3)
            End If
        Next i
        f = Dir
    Loop

    A = Range("a1").CurrentRegion
    For i = 3 To UBound(A)
        A(i, 2) = d1(A(i, 1))
        A(i, 3) = d2(A(i, 1))
    Next i
    Range("a1").Resize(UBound(A), UBound(A, 2)) = A
End Sub

比较并保留最大值2.rar (43.58 KB, 下载次数: 7)
回复

使用道具 举报

 楼主| 发表于 2016-12-19 12:47 | 显示全部楼层
爱疯 发表于 2016-12-19 10:31
Sub test()
    Dim p$, f$, d1, d2, A, i%
    Application.ScreenUpdating = False

非常感谢[em17][em17]
回复

使用道具 举报

 楼主| 发表于 2016-12-19 22:44 | 显示全部楼层
爱疯 发表于 2016-12-19 10:31
Sub test()
    Dim p$, f$, d1, d2, A, i%
    Application.ScreenUpdating = False

请问第一列的“产品名称”的顺序不固定该怎么处理。
回复

使用道具 举报

发表于 2016-12-19 22:52 | 显示全部楼层
suge168 发表于 2016-12-19 22:44
请问第一列的“产品名称”的顺序不固定该怎么处理。

不用处理,仍会根据第1列的产品来查找数量和人员
回复

使用道具 举报

 楼主| 发表于 2016-12-19 23:41 | 显示全部楼层
爱疯 发表于 2016-12-19 22:52
不用处理,仍会根据第1列的产品来查找数量和人员

如图所示,A列中各项的顺序不一样或者项目的数量不一样时不能够正常汇总
捕获2.PNG
回复

使用道具 举报

 楼主| 发表于 2016-12-19 23:51 | 显示全部楼层
suge168 发表于 2016-12-19 23:41
如图所示,A列中各项的顺序不一样或者项目的数量不一样时不能够正常汇总

改变顺序可以正常比较,,刚刚不知道怎么回事,现在可以了,,但是如果每个工作表中的“型号”不一样不能显示啊?
回复

使用道具 举报

发表于 2016-12-20 08:53 | 显示全部楼层
suge168 发表于 2016-12-19 23:51
改变顺序可以正常比较,,刚刚不知道怎么回事,现在可以了,,但是如果每个工作表中的“型号”不一样不能 ...

不清楚你说的情况,最好上传附件并说明。


回复

使用道具 举报

 楼主| 发表于 2016-12-20 13:26 | 显示全部楼层
爱疯 发表于 2016-12-20 08:53
不清楚你说的情况,最好上传附件并说明。

已解决,非常感谢啊
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 05:20 , Processed in 0.444849 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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