Excel精英培训网

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

[已解决]无人能解的汇总难题,如有老师愿意帮忙!在此先谢过诸位老师啦!

[复制链接]
发表于 2014-11-17 22:06 | 显示全部楼层 |阅读模式
本帖最后由 wmw123 于 2014-11-18 17:38 编辑

恳请老师帮我完成最后一个难题,在此先谢过诸位老师啦!

sshot-1.png
SQL汇总查询一最终难题.rar (48.33 KB, 下载次数: 30)
 楼主| 发表于 2014-11-18 09:32 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2014-11-18 16:28 | 显示全部楼层
{:201:}{:201:}{:201:}{:201:}{:201:}{:201:}{:201:}{:201:}{:201:}xlDo      _______________________________________________________
回复

使用道具 举报

发表于 2014-11-18 19:38 | 显示全部楼层
什么难题?
回复

使用道具 举报

发表于 2014-11-19 06:46 | 显示全部楼层
  1. Sub Macro1()
  2. Dim arr, brr(1 To 20000, 1 To 6), d, i%, j&, zf$$
  3. Dim date1#, date2, mc$$, qy$$, rng As Range, n&, s&
  4. Sheets("汇总").Activate
  5. date1 = Range("p2"): date2 = Range("p3")
  6. mc = Range("q3"): qy = Range("r3")
  7. Set d = CreateObject("scripting.dictionary")
  8. For i = 1 To 2
  9.     Set rng = Sheets(i).UsedRange.Find("组---明细", lookat:=xlPart)
  10.     If Not rng Is Nothing Then arr = rng.CurrentRegion
  11.     For j = 5 To UBound(arr)
  12.         If arr(j, 2) >= date1 And arr(j, 2) <= date2 And arr(j, 3) Like "*" & mc & "*" And arr(j, 4) Like "*" & qy & "*" Then
  13.             zf = arr(j, 3) & "," & arr(j, 4)
  14.             If Not d.Exists(zf) Then
  15.                 s = s + 1
  16.                 d(zf) = s
  17.                 brr(s, 1) = arr(j, 3)
  18.                 brr(s, 2) = arr(j, 4)
  19.                 brr(s, Asc(arr(j, 5)) - 62) = arr(j, 6)
  20.             Else
  21.                 n = d(zf)
  22.                 brr(n, Asc(arr(j, 5)) - 62) = brr(n, Asc(arr(j, 5)) - 62) + arr(j, 6)
  23.             End If
  24.         End If
  25.     Next
  26. Next
  27. Range("o5").Resize(s, 6) = brr
  28. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-11-19 10:44 | 显示全部楼层
dsmch 发表于 2014-11-19 06:46

老师,可能您还没理解到我想要得到的效果
请老师看我现在发的图片说明:
3918.jpg

点评

结果有什么不同?  发表于 2014-11-19 16:11
回复

使用道具 举报

 楼主| 发表于 2014-11-19 17:13 | 显示全部楼层
dsmch 发表于 2014-11-19 06:46

您的代码是把。a组明细a的数据与b组明细c的数据合在一起了,无法区分出b组明细c.d的数量!

点评

模拟结果,用附件说明问题  发表于 2014-11-19 20:03
回复

使用道具 举报

发表于 2014-11-19 19:07 | 显示全部楼层
看样子处理数据还是Access呀!

点评

外行  发表于 2014-11-19 20:04
回复

使用道具 举报

 楼主| 发表于 2014-11-19 21:12 | 显示全部楼层
dsmch 发表于 2014-11-19 06:46

老师以重新做说明,请老师看看
sshot5551.png SQL汇总查询一最终难题1.rar (21.89 KB, 下载次数: 8)
回复

使用道具 举报

发表于 2014-11-19 22:01 | 显示全部楼层    本楼为最佳答案   
Private Sub 汇总两表数据_Click()
    Dim cn As New ADODB.Connection, t As Single
    Dim sq1 As String, sq2 As String, sq3 As String
     t = Timer
    Range("O5:T" & Range("O65536").End(xlUp).Row + 1).ClearContents
    cn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName
    sq1 = "select 名称,区域,类型,数量 from [A明细$B4:G]"
    sq2 = "select 名称,区域,类型,数量 from [B明细$H4:M]"
    sq3 = "select 名称,区域," & _
    "SUM(iif(类型='A',数量,0)),SUM(iif(类型='B',数量,0)),SUM(iif(类型='C',数量,0)),SUM(iif(类型='D',数量,0))" & _
          "from ( " & sq1 & " UNION ALL " & sq2 & ") GROUP BY 名称,区域"
    Sheets("汇总").Range("O5").CopyFromRecordset cn.Execute(sq3)
    cn.Close
    Set cn = Nothing
    MsgBox "共用时:" & (Timer - t) * 1000 & "毫秒"
End Sub

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 00:38 , Processed in 0.451037 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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