ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助平均值

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-8-21 09:14 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
请看附件,谢谢

1.rar

10.86 KB, 下载次数: 23

TA的精华主题

TA的得分主题

发表于 2018-8-21 11:13 | 显示全部楼层
本帖最后由 mjzxlmg 于 2018-8-21 11:23 编辑

1、最后三天,五天的指的是什么,有数据的后三天还是最后一天之前二个日期(不知是不是每都有数据)?
2、最大值、最小值指的是什么?
3、合计总重量如何计算?表中根本没有重量一说
4、平均值指的什么项目的平均值?

真是糊涂之极

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-21 11:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
mjzxlmg 发表于 2018-8-21 11:13
1、最后三天,五天的指的是什么,有数据的后三天还是最后一天之前二个日期(不知是不是每都有数据)?
2、 ...

1.有数据的后三天
2.最大值和最小值是指提取数据H列中的最大值和最小值
3.合计重量同样是合计提取数据部分,同样是表1的H列
4.平均值是提取数据部分的平均值
谢谢

TA的精华主题

TA的得分主题

发表于 2018-8-21 16:29 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-21 22:52 | 显示全部楼层
本帖最后由 83607370 于 2018-8-21 22:56 编辑

感谢版主的帮助,但在使用过程中,在工作表1存在数据的,但他提示没有数据,再麻烦你一下,帮我看看,谢谢

123.rar

20.78 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2018-8-22 10:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
附件中数据太少,不超过3个的没有计算平均值。
代码测试正常。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-22 11:02 | 显示全部楼层
蓝桥玄霜 发表于 2018-8-22 10:37
附件中数据太少,不超过3个的没有计算平均值。
代码测试正常。

数据已超出3个,但他提示没有找到

123.rar

20.81 KB, 下载次数: 3

TA的精华主题

TA的得分主题

发表于 2018-8-22 13:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 lsdongjh 于 2018-8-22 13:21 编辑

  1. Sub Test()
  2.     Dim strShName As String, shSource As Worksheet, shResult As Worksheet
  3.     Dim lngRows As Long, strTemp As String, strDate As String
  4.     Dim Conn As Object, Rst As Object, strPath As String
  5.     Dim strConn As String, strBasicSql As String, strCondition As String, strSQL As String
  6.     Dim arrResult(1 To 9, 1 To 1) As Double

  7.     strShName = "1"
  8.     Set shSource = Sheets(strShName)
  9.     Set shResult = Sheets("2")
  10.    
  11.     lngRows = shSource.Range("A" & Rows.Count).End(xlUp).Row
  12.     If lngRows < 4 Then lngRows = 4
  13.    
  14.     strTemp = shResult.Range("O1").Value
  15.     If Trim(strTemp) = "" Or Not IsDate(strTemp) Then
  16.         MsgBox "请输入【开始日期】"
  17.         shResult.Range("O1").Select
  18.         Exit Sub
  19.     End If
  20.    
  21.     strTemp = shResult.Range("O2").Value
  22.     If Trim(strTemp) = "" Or Not IsDate(strTemp) Then
  23.         MsgBox "请输入【结束日期】"
  24.         shResult.Range("O2").Select
  25.         Exit Sub
  26.     End If
  27.    strDate = strTemp
  28.    
  29.     strCondition = "AND 日期 Between #" & shResult.Range("O1").Value & "# AND #" & shResult.Range("O2").Value & "# "
  30.     strTemp = shResult.Range("O3").Value
  31.     If Trim(strTemp) <> "" Then strCondition = strCondition & " AND 编号='" & Trim(strTemp) & "'"
  32.     strTemp = shResult.Range("O4").Value
  33.     If Trim(strTemp) <> "" Then strCondition = strCondition & " AND 名称='" & Trim(strTemp) & "'"
  34.     strTemp = shResult.Range("O5").Value
  35.     If Trim(strTemp) <> "" Then strCondition = strCondition & " AND 时间段='" & Trim(strTemp) & "'"
  36.    
  37.     Set Conn = CreateObject("ADODB.Connection")
  38.     Set Rst = CreateObject("ADODB.Recordset")
  39.     strPath = ThisWorkbook.FullName
  40.     Select Case Application.Version * 1
  41.         Case Is <= 11
  42.             strConn = "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=excel 8.0;Data source=" & strPath
  43.         Case Is >= 12
  44.             strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath & ";Extended Properties=""Excel 12.0;HDR=YES"";"""
  45.     End Select
  46.     Conn.Open strConn
  47.    
  48.     strBasicSql = "SELECT Sum(使用数量) AS 数量合计, Sum(合计金额) AS 金额合计, Min(合计金额) AS 最小金额, Max(合计金额) AS 最大金额 " & _
  49.                  "FROM [" & strShName & "$A3:M" & lngRows & "]" & _
  50.                  "WHERE 1=1 "
  51.     strSQL = strBasicSql & strCondition
  52.    
  53.     If Rst.State = 1 Then Rst.Close
  54.     Rst.Open strSQL, Conn, 3, 1
  55.     Rst.movefirst
  56.     arrResult(6, 1) = IIf(IsNull(Rst("最小金额")), 0, Rst("最小金额"))
  57.     arrResult(7, 1) = IIf(IsNull(Rst("最大金额")), 0, Rst("最大金额"))
  58.     arrResult(8, 1) = IIf(IsNull(Rst("数量合计")), 0, Rst("数量合计"))
  59.     arrResult(9, 1) = IIf(IsNull(Rst("金额合计")), 0, Rst("金额合计"))
  60.    
  61.     strBasicSql = "SELECT SUM(金额) AS 合计金额 " & _
  62.                 "FROM (SELECT 日期, Sum(合计金额) AS 金额 " & _
  63.                 "FROM  [" & strShName & "$A3:M" & lngRows & "]" & _
  64.                 "WHERE (1=1 @Condition) " & _
  65.                 "GROUP BY 日期 ) " & _
  66.                 "WHERE 日期>=#@Date#"
  67.     strBasicSql = Replace(strBasicSql, "@Condition", strCondition)
  68.    
  69.     strTemp = DateAdd("d", -2, strDate)
  70.     strSQL = Replace(strBasicSql, "@Date", strTemp)
  71.     If Rst.State = 1 Then Rst.Close
  72.     Rst.Open strSQL, Conn, 3, 1
  73.     arrResult(1, 1) = IIf(IsNull(Rst("合计金额")), 0, Rst("合计金额") / 3)
  74.    
  75.     strTemp = DateAdd("d", -4, strDate)
  76.     strSQL = Replace(strBasicSql, "@Date", strTemp)
  77.     If Rst.State = 1 Then Rst.Close
  78.     Rst.Open strSQL, Conn, 3, 1
  79.     arrResult(2, 1) = IIf(IsNull(Rst("合计金额")), 0, Rst("合计金额") / 5)
  80.    
  81.     strTemp = DateAdd("d", -9, strDate)
  82.     strSQL = Replace(strBasicSql, "@Date", strTemp)
  83.     If Rst.State = 1 Then Rst.Close
  84.     Rst.Open strSQL, Conn, 3, 1
  85.     arrResult(3, 1) = IIf(IsNull(Rst("合计金额")), 0, Rst("合计金额") / 10)
  86.    
  87.     strTemp = DateAdd("d", -14, strDate)
  88.     strSQL = Replace(strBasicSql, "@Date", strTemp)
  89.     If Rst.State = 1 Then Rst.Close
  90.     Rst.Open strSQL, Conn, 3, 1
  91.     arrResult(4, 1) = IIf(IsNull(Rst("合计金额")), 0, Rst("合计金额") / 15)
  92.    
  93.     strTemp = DateAdd("d", -29, strDate)
  94.     strSQL = Replace(strBasicSql, "@Date", strTemp)
  95.     If Rst.State = 1 Then Rst.Close
  96.     Rst.Open strSQL, Conn, 3, 1
  97.     arrResult(5, 1) = IIf(IsNull(Rst("合计金额")), 0, Rst("合计金额") / 30)
  98.    
  99.     shResult.Range("O7:O15") = arrResult
  100.     Set Rst = Nothing
  101.     Set Conn = Nothing
  102. End Sub

复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-23 10:53 | 显示全部楼层
蓝桥玄霜 发表于 2018-8-22 10:37
附件中数据太少,不超过3个的没有计算平均值。
代码测试正常。

您好,我测试了,都是提示没有找到数据,你可以把附件发上来吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-23 10:55 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-12 15:59 , Processed in 0.033455 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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