Excel精英培训网

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

[已解决]几个月的数据,固定间隔1440行插入两行,求平均值

[复制链接]
发表于 2023-4-2 00:56 | 显示全部楼层 |阅读模式
几个月的数据,一天一分钟一个数据,每天1440个数,要求每天的平均值,可以在每天结束的一行插入两行,求这一天的平均值,然后把每天汇总一起。

最佳答案
2023-4-4 14:35
嗯,已改。

  1. Public Sub Test()
  2.     Dim Sh As Worksheet, Sh2 As Worksheet, Arr()
  3.     Dim Lr&, i&, j%, k%, r1&, r2& 'r1、r2分别代表同一天里的行首和行尾

  4.     Set Sh = ThisWorkbook.Worksheets("Sheet1")
  5.     Lr = Sh.Cells(Sh.Rows.Count, 1).End(xlUp).Row '最后一行
  6.     r1 = 1
  7.     For i = 2 To Lr + 1
  8.         If (DateDiff("D", Sh.Cells(i - 1, 1), Sh.Cells(i, 1)) <> 0) Or (i = Lr + 1) Then
  9.             r2 = i - 1
  10.             k = k + 1
  11.             ReDim Preserve Arr(1 To 8, 1 To k)
  12.             Arr(1, k) = DateValue(Sh.Cells(r1, 1)) '日期
  13.             For j = 1 To 7 '各列平均数
  14.                 Arr(j + 1, k) = Application.Average(Sh.Range(Sh.Cells(r1, j + 1), Sh.Cells(r2, j + 1))) '利用工作表函数取平均值是最快的
  15.             Next j
  16.             r1 = i
  17.         End If
  18.     Next i

  19.     Set Sh2 = Sheets.Add '新建工作表
  20.     Sh2.[A1].Resize(k, 8) = Application.Transpose(Arr) '将数组转置后输出到新工作表中
  21. End Sub
复制代码


excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2023-4-3 09:20 | 显示全部楼层
楼主,您好!
您的要求不难实现,
只是您最好能上附件,哪怕是胡乱造些假数据,
别人才能根据您提供的数据来写代码。
回复

使用道具 举报

 楼主| 发表于 2023-4-3 16:48 | 显示全部楼层
vitrel 发表于 2023-4-3 09:20
楼主,您好!
您的要求不难实现,
只是您最好能上附件,哪怕是胡乱造些假数据,

您好,我上传了一些数据,我自己是录了一个宏,就是在每天结尾1440行插入两行,求上面的平均值,然后复制这些平均值到另一个sheet里,再把最前面的1442行删掉,结束宏。最后将sheetl里的平均值复制到另一个表格里。
您有更快的方法嘛,请赐教,谢谢!!!

数据.zip

809.54 KB, 下载次数: 2

回复

使用道具 举报

发表于 2023-4-4 10:32 | 显示全部楼层
楼主,按您意思做了,您试试看吧。

  1. Public Sub Test()
  2.     Dim D As Object, Sh As Worksheet, Sh2 As Worksheet
  3.     Dim Lr&, i&, r1&, r2& 'r1、r2分别代表同一天里的行首和行尾

  4.     Set D = CreateObject("Scripting.Dictionary") '在本例中,利用数组记录数据,比用数组方便一些
  5.     D("日期") = "平均值" '表头

  6.     Set Sh = ThisWorkbook.Sheets(1)
  7.     Lr = Sh.Cells(Sh.Rows.Count, 1).End(xlUp).Row '最后一行

  8.     r1 = 1
  9.     For i = 2 To Lr
  10.         If DateDiff("D", Sh.Cells(i - 1, 1), Sh.Cells(i, 1)) <> 0 Then
  11.             r2 = i - 1
  12.             D(DateValue(Sh.Cells(r1, 1))) = Application.Average(Sh.Range(Sh.Cells(r1, "C"), Sh.Cells(r2, "H"))) '利用工作表函数取平均值是最快的
  13.             r1 = i
  14.         End If
  15.     Next i

  16.     '待上面的循环结束后,还要取一下最后一个日期的平均值
  17.     D(DateValue(Sh.Cells(r1, 1))) = Application.Average(Sh.Range(Sh.Cells(r1, "C"), Sh.Cells(Lr, "H")))

  18.     Set Sh2 = Sheets.Add '新建工作表
  19.     Sh2.[A1].Resize(D.Count, 2) = Application.Transpose(Array(D.Keys, D.Items)) '将字典输出到新工作表中
  20. End Sub
复制代码


数据2.rar

817.43 KB, 下载次数: 2

回复

使用道具 举报

 楼主| 发表于 2023-4-4 12:01 | 显示全部楼层
vitrel 发表于 2023-4-4 10:32
楼主,按您意思做了,您试试看吧。

您好,您给我的程序我试用了,确实可以,但是我可能没表达清楚,我给的是每天有7列数据,最后求的是7列数据一天的平均值,一天下来有7个数,不是这一天所有数据的平均值。
回复

使用道具 举报

发表于 2023-4-4 14:35 | 显示全部楼层    本楼为最佳答案   
嗯,已改。

  1. Public Sub Test()
  2.     Dim Sh As Worksheet, Sh2 As Worksheet, Arr()
  3.     Dim Lr&, i&, j%, k%, r1&, r2& 'r1、r2分别代表同一天里的行首和行尾

  4.     Set Sh = ThisWorkbook.Worksheets("Sheet1")
  5.     Lr = Sh.Cells(Sh.Rows.Count, 1).End(xlUp).Row '最后一行
  6.     r1 = 1
  7.     For i = 2 To Lr + 1
  8.         If (DateDiff("D", Sh.Cells(i - 1, 1), Sh.Cells(i, 1)) <> 0) Or (i = Lr + 1) Then
  9.             r2 = i - 1
  10.             k = k + 1
  11.             ReDim Preserve Arr(1 To 8, 1 To k)
  12.             Arr(1, k) = DateValue(Sh.Cells(r1, 1)) '日期
  13.             For j = 1 To 7 '各列平均数
  14.                 Arr(j + 1, k) = Application.Average(Sh.Range(Sh.Cells(r1, j + 1), Sh.Cells(r2, j + 1))) '利用工作表函数取平均值是最快的
  15.             Next j
  16.             r1 = i
  17.         End If
  18.     Next i

  19.     Set Sh2 = Sheets.Add '新建工作表
  20.     Sh2.[A1].Resize(k, 8) = Application.Transpose(Arr) '将数组转置后输出到新工作表中
  21. End Sub
复制代码


数据3.rar

817.84 KB, 下载次数: 2

回复

使用道具 举报

 楼主| 发表于 2023-4-5 13:06 | 显示全部楼层

       谢谢大神,完美解决我的问题,真的感谢!!!我的工作经常要处理这些机组DCS数据,有时候是一整天的数据,还有的一天内多个时间段的。你写的这段程序真的很棒,我可在你的基础上魔改魔改,不懂的再请教你。谢谢!!!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 15:57 , Processed in 0.413257 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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