ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2675|回复: 17

多条件求和-统计某时间段内的数据

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-7-24 16:44 | 显示全部楼层 |阅读模式
根据设置的时间段内,统计各线别的数量,原来是用SUMPRODUCT函数做的   卡的不要不要的。请大哥哥帮我用vba实现一下,谢谢。

88888.png

产线良率报表.rar

628.5 KB, 下载次数: 21

TA的精华主题

TA的得分主题

发表于 2021-7-24 17:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
可以用数据透视表做吧

TA的精华主题

TA的得分主题

发表于 2021-7-24 17:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
附件供参考

产线良率报表.zip

941.98 KB, 下载次数: 25

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-7-24 17:33 | 显示全部楼层

大哥哥神速啊   这个是按照机种统计的吧     我想要的是按照线别统计   黄色区域输入机种和站别  查询到绿色部分就统计出来   和SUMPRODUCT函数一样的功能

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-7-24 17:35 | 显示全部楼层
excel玉米 发表于 2021-7-24 17:18
可以用数据透视表做吧

数据分析出来做图表的  所以不方便

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-7-24 17:40 | 显示全部楼层

大哥哥这个是根据机种统计的吧   想要通过线别-机种-站别3个条件查询出绿色部分的数据   3个条件可以是且也可以是或   (实际应该是4个条件,还有个时间段)  

TA的精华主题

TA的得分主题

发表于 2021-7-24 18:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
huntgb 发表于 2021-7-24 17:40
大哥哥这个是根据机种统计的吧   想要通过线别-机种-站别3个条件查询出绿色部分的数据   3个条件可以是且 ...

3个条件可以是且也可以是或
要么是且,要么是或

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-7-26 09:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
3190496160 发表于 2021-7-24 18:15
3个条件可以是且也可以是或
要么是且,要么是或

如果是或怎么处理?

TA的精华主题

TA的得分主题

发表于 2021-7-26 11:07 | 显示全部楼层
huntgb 发表于 2021-7-26 09:16
如果是或怎么处理?

之前说用数据透视表,没有仔细看,有点草率了。细细研究了一下,采用SQL查询语言,应该可以达到楼主的要求。对表格做了改动,说明如下:
1.建立了基础数据表格,将站别/机种/不良项目都提取出来,以便在代码中利用上。站别已经去重复处理。
   站别和机种是为了在黄色查询框内建立数据有效性,以免查询过程中输入看似相似但却不一样的词语。
   不良项目是为了SQL查询语言中用for ...next 加入查询词组。
2.因为数量不知道是要哪个数量,所以我取的是同线别同机种同站别的数量合计。如果不符合楼主之意,楼主可以自行修改。
3.不知道楼主在时间/机种/站别三个条件都没有时需不需要查询数据,我取的是时间/机种/站别三个条件都没有时,按线别进行汇总。
  1. Option Explicit
  2. Public Function cnn() As Object
  3.     Set cnn = CreateObject("adodb.connection")
  4.     If Application.Version < 12 Then
  5.         cnn.Open "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.FullName
  6.     Else
  7.         cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
  8.     End If
  9. End Function

  10. Sub GetData()
  11. Application.ScreenUpdating = False
  12. Dim rs As New ADODB.Recordset, SQL$
  13. Dim i%, JCSJR%,  StrM$, StrMm$, TJ$, TJR$
  14. Dim TJRQ1, TJRQ2
  15. TJRQ1 = Sheet3.Range("e2"): TJRQ2 = Sheet3.Range("m2")     '日期条件
  16. '###################################################################################
  17. JCSJR = Sheet1.Range("C65536").End(3).Row                  '基础数据要进行SQL查询的不良项目
  18. For i = JCSJR To 2 Step -1
  19.   StrM = Sheet1.Range("c" & i)
  20.    If InStr(StrM, "/") > 0 Then
  21.      StrM = "[" & StrM & "]"                 '当SQL查询中有特珠字符/时,要用中括号括起
  22.    End If
  23.   StrM = ",sum(" & StrM & ")"
  24.   StrMm = StrM & StrMm
  25. Next
  26. '###################################################################################
  27. For i = 4 To 13                                           '有机种有站别则形成查询条件
  28.    TJ = ""
  29.    If Len(Sheet3.Range("b" & i)) > 0 And Len(Sheet3.Range("c" & i)) > 0 Then
  30.      TJ = "线别=" & Sheet3.Range("A" & i) & " AND 机种='" & Sheet3.Range("b" & i) & "' AND 站别='" & Sheet3.Range("C" & i) & "'"
  31.    ElseIf Len(Sheet3.Range("b" & i)) > 0 And Len(Sheet3.Range("c" & i)) <= 0 Then
  32.      TJ = "线别=" & Sheet3.Range("A" & i) & " AND 机种='" & Sheet3.Range("b" & i) & "'"
  33.    ElseIf Len(Sheet3.Range("b" & i)) <= 0 And Len(Sheet3.Range("c" & i)) > 0 Then
  34.      TJ = "线别=" & Sheet3.Range("A" & i) & " AND  站别='" & Sheet3.Range("C" & i) & "'"
  35.    End If
  36.    If Len(TJ) <= 0 Then TJ = "线别=" & Sheet3.Range("A" & i) & ""   '当没有条件时设置条件为线别
  37.    If Len(TJRQ1) <= 0 And Len(TJRQ2) <= 0 Then
  38.      SQL = "select sum(数量)" & StrMm & " from [品质报表$] where " & TJ & " "
  39.    ElseIf Len(TJRQ1) > 0 And Len(TJRQ2) <= 0 Then
  40.      SQL = "select sum(数量)" & StrMm & " from [品质报表$] where " & TJ & " and (日期 between #" & Format(TJRQ1, "yyyy-mm-dd") & "# and #" & Format(Date, "yyyy-mm-dd") & "#)"
  41.    ElseIf Len(TJRQ1) <= 0 And Len(TJRQ2) > 0 Then
  42.      SQL = "select sum(数量)" & StrMm & " from [品质报表$] where " & TJ & " and (日期 >= #" & Format(TJRQ1, "yyyy-mm-dd") & ""
  43.    ElseIf Len(TJRQ1) > 0 And Len(TJRQ2) > 0 Then
  44.      SQL = "select sum(数量)" & StrMm & " from [品质报表$] where " & TJ & " and (日期 between #" & Format(TJRQ1, "yyyy-mm-dd") & "# and #" & Format(TJRQ2, "yyyy-mm-dd") & "#)"
  45.    End If
  46.          rs.Open SQL, cnn, 1, 3
  47.      If rs.EOF Then
  48.        MsgBox "未查找到记录"
  49.      Else
  50.         Sheet3.Range("d" & i).CopyFromRecordset rs
  51.         rs.Close
  52.      End If
  53. Next
  54.    Set rs = Nothing
  55.     Application.ScreenUpdating = True
  56. End Sub
复制代码


产线良率报表.7z

572.01 KB, 下载次数: 19

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-7-26 12:18 | 显示全部楼层
excel玉米 发表于 2021-7-26 11:07
之前说用数据透视表,没有仔细看,有点草率了。细细研究了一下,采用SQL查询语言,应该可以达到楼主的要 ...

数据正确与否请自行验证
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-24 22:02 , Processed in 0.048828 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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