Excel精英培训网

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

[已解决]高难度的合并并计算

[复制链接]
发表于 2011-12-28 15:53 | 显示全部楼层 |阅读模式
10学分
求高手对两张表的数据进行有条件的合并并汇总,具体要求见附件[ 供应.zip (16.08 KB, 下载次数: 27)

发表于 2011-12-28 17:45 | 显示全部楼层
本帖最后由 fjmxwrs 于 2011-12-28 19:08 编辑

你是查询表还是汇总表呀?给你弄个汇总的,你看下效果
供应.zip (18.98 KB, 下载次数: 4)
回复

使用道具 举报

发表于 2011-12-28 18:15 | 显示全部楼层    本楼为最佳答案   
  1. Sub justtest()
  2.     Dim D As New Dictionary, Arr, i&, S$, Ar, Ph, Cj$, Sj, K&, ArrR(), j As Byte
  3.     Ph = [a2]: Cj = [b2]: Sj = [c2]
  4.     With Worksheets("合并汇总表")
  5.         Arr = .Range("a3:m" & .Cells(.Rows.Count, 1).End(3).Row).Value
  6.         For i = 1 To UBound(Arr)
  7.             S = Arr(i, 1) & Arr(i, 6) & Arr(i, 7)
  8.             If D.Exists(S) Then
  9.                 Ar = D(S)
  10.                 Ar(0) = Arr(i, 9) + CLng(Ar(0))
  11.                 Ar(1) = Arr(i, 13) + CLng(Ar(1))
  12.                 D(S) = Ar
  13.             Else
  14.                 D.Add S, Array(CLng(Arr(i, 9)), CLng(Arr(i, 13)))
  15.             End If
  16.         Next
  17.     End With
  18.     With Worksheets("合并调用数据")
  19.         Arr = .Range("a2:h" & .Cells(.Rows.Count, 1).End(3).Row).Value
  20.     End With
  21.     For i = 1 To UBound(Arr)
  22.         If (Arr(i, 1) = Ph Or Len(Ph) = 0) And _
  23.             (Arr(i, 6) = Cj Or Len(Cj) = 0) And _
  24.             (Arr(i, 7) = Sj Or Len(Sj) = 0) Then
  25.             K = K + 1: ReDim Preserve ArrR(1 To 12, 1 To K)
  26.             For j = 1 To 8
  27.                 ArrR(j, K) = Arr(i, j)
  28.             Next j
  29.             S = Arr(i, 1) & Arr(i, 6) & Arr(i, 7)
  30.             If D.Exists(S) Then
  31.                 ArrR(9, K) = D(S)(0)
  32.                 ArrR(11, K) = D(S)(1)
  33.             Else
  34.                 ArrR(9, K) = 0
  35.                 ArrR(11, K) = 0
  36.             End If
  37.             ArrR(10, K) = ArrR(8, K) - ArrR(9, K)
  38.             ArrR(12, K) = ArrR(8, K) - ArrR(11, K)
  39.         End If
  40.     Next
  41.     Range("a4:l" & Rows.Count).ClearContents
  42.     If K > 0 Then Range("a4").Resize(K, 12) = Application.Transpose(ArrR)
  43.     Set D = Nothing
  44. End Sub
复制代码

是这样的效果吗?
见附件:
供应.rar (20.81 KB, 下载次数: 39)
回复

使用道具 举报

 楼主| 发表于 2011-12-28 19:21 | 显示全部楼层
fjmxwrs 发表于 2011-12-28 17:45
你是查询表还是汇总表呀?给你弄个汇总的,你看下效果

朋友,不好意思,是这样的效果,不过还要可以查询,我已经把最佳答案给了比你先回帖子的3楼的朋友啦,谢谢你,非常感谢你
回复

使用道具 举报

发表于 2011-12-28 19:28 | 显示全部楼层
yty773436272 发表于 2011-12-28 19:21
朋友,不好意思,是这样的效果,不过还要可以查询,我已经把最佳答案给了比你先回帖子的3楼的朋友啦,谢谢 ...

查询可用单元格事件来完成,直接在汇总表的基础上用筛选的方法即可。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-23 19:42 , Processed in 0.203637 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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