Excel精英培训网

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

[已解决]请教老师,怎么修改,能在M-T列汇总sheet1与sheet2的数据

[复制链接]
发表于 2013-3-1 11:05 | 显示全部楼层 |阅读模式
本帖最后由 weixin321 于 2013-3-1 12:28 编辑

hz.rar (15.11 KB, 下载次数: 11)
发表于 2013-3-1 11:20 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2013-3-1 11:28 | 显示全部楼层
本帖最后由 weixin321 于 2013-3-1 11:29 编辑
hwc2ycy 发表于 2013-3-1 11:20
怎么个汇总法,数据相加?

将两表中的数据进行汇总
例如:时间段为2-26 结束时间段2-26
sheet1 有数据
日期:2-26   名称:甲  金额:100
         2-26             乙            -50
         2-26             丙            100        
sheet2 有数据
日期:2-26    名称:甲  金额:200
         2-26              丁          -100
         2-26              丙          -50
         2-26              葵           100
汇总结果
名称甲   金额300
       乙         -50
       丙        50
       丁        -100
       葵         100


回复

使用道具 举报

发表于 2013-3-1 11:37 | 显示全部楼层
直接用合并计算就能出结果。
回复

使用道具 举报

 楼主| 发表于 2013-3-1 11:42 | 显示全部楼层
本帖最后由 weixin321 于 2013-3-1 11:45 编辑
hwc2ycy 发表于 2013-3-1 11:37
直接用合并计算就能出结果。

老师请帮忙看看怎么弄。


Private Sub CommandButton1_Click()
Range("M5:U65535").ClearContents
Dim cn As New ADODB.Connection, sql As String
Dim SQdate As String
Application.ScreenUpdating = False
t = Timer
Dim SQ1$, SQ2$
Dim MROW&, XROW&
MROW = Sheets("sheet1").Range("B65536").End(xlUp).Row '取工作表有数据的最大行号,本例以E列
XROW = Sheets("sheet2").Range("B65536").End(xlUp).Row
If Len([N1]) > 0 And Len([R1]) > 0 Then SQdate = " WHERE 日期 between #" & [N1] & "# AND #" & [R1] & "#"
cn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName
SQ1 = "select 货品编号,供应商,产地,品名,规格,数量 as 量,单位,进货总金额 as 金额 from [sheet1$B4:K" & MROW & "]"
SQ2 = "select 货品编号,供应商,产地,品名,规格,数量 as 量,单位,进货总金额 as 金额 from [sheet2$B4:K" & XROW & "]"
sql = "select 货品编号,供应商,产地,品名,规格,sum(量),单位,sum(金额) FROM(" & SQ1 & " Union ALL " & SQ2 & _
") " & _
SQdate & "and 方式 IN('采购进货入库','采购退货出库') GROUP BY 货品编号,供应商,产地,品名,规格,单位"
Sheet1.Range("M5").CopyFromRecordset cn.Execute(sql)
cn.Close
Set cn = Nothing
Application.ScreenUpdating = True
MsgBox "查询完成"
End Sub
回复

使用道具 举报

发表于 2013-3-1 13:29 | 显示全部楼层
你整一个两个表都有M-T列数据的表。我再给你整一个合并计算的,其实你录宏就能完成。
回复

使用道具 举报

发表于 2013-3-2 14:32 | 显示全部楼层    本楼为最佳答案   
weixin321 发表于 2013-3-1 11:42
老师请帮忙看看怎么弄。
  1. Private Sub CommandButton1_Click()
  2.     Range("M5:U65535").ClearContents
  3.     Dim cn As New ADODB.Connection, sql As String
  4.     Dim SQdate As String
  5.     Application.ScreenUpdating = False
  6.     t = Timer
  7.     Dim SQ1$, SQ2$
  8.     Dim MROW&, XROW&
  9.     MROW = Sheets("sheet1").Range("B65536").End(xlUp).Row    '取工作表有数据的最大行号,本例以E列
  10.     XROW = Sheets("sheet2").Range("B65536").End(xlUp).Row
  11.     If Len([N1]) > 0 And Len([R1]) > 0 Then SQdate = " WHERE 日期 between #" & [N1] & "# AND #" & [R1] & "# "
  12.     cn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName
  13.     SQ1 = "select 日期,货品编号,供应商,产地,品名,规格,进货数量 as 量,单位,进货总金额 as 金额,方式 from [sheet1$B4:K" & MROW & "]"
  14.     SQ2 = "select 日期,货品编号,供应商,产地,品名,规格,进货数量 as 量,单位,进货总金额 as 金额,方式 from [sheet2$B4:K" & XROW & "]"
  15.     sql = "select 货品编号,供应商,产地,品名,规格,sum(量),单位,sum(金额) FROM(" & SQ1 & " Union ALL " & SQ2 & _
  16.           ") " & _
  17.           SQdate & "and 方式 IN('采购进货入库','采购退货出库') GROUP BY 货品编号,供应商,产地,品名,规格,单位"
  18.    
  19.     Sheet1.Range("m5").CopyFromRecordset cn.Execute(sql)
  20.     cn.Close
  21.     Set cn = Nothing
  22.     Application.ScreenUpdating = True
  23.     MsgBox "查询完成"
  24. End Sub
复制代码
回复

使用道具 举报

发表于 2013-3-2 14:33 | 显示全部楼层
你原有的语句落了方式,日期字段。

后面的条件是针对查询结果再做筛选的,你之前的查询结果里没有选择日期和方式字段。

回复

使用道具 举报

 楼主| 发表于 2013-3-3 12:22 | 显示全部楼层
hwc2ycy 发表于 2013-3-2 14:33
你原有的语句落了方式,日期字段。

后面的条件是针对查询结果再做筛选的,你之前的查询结果里没有选择日 ...


老师,再请教一个问题

就是在这个代码的基础上再添加一个查询条件,该如何修改???

http://www.excelpx.com/thread-296172-1-1.html
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 04:02 , Processed in 0.369130 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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