在特定时间间隔获取值

时间:2018-12-17 11:16:27

标签: excel vba

我有一个包含测试数据的电子表格。数据是相当规律的时间间隔的温度读数。我之所以说是“相当”,是因为读数通常间隔10秒,但是偶尔测试硬件会跳过一两个读数。
在本练习中,我们可以忽略丢失的数据。

第一次阅读于2016年5月12日在09:00:00,而最后一次阅读在2016年5月20日在09:10:10。可在此处下载文件:
http://mbf.me/3XkRR0

我想找到每个小时间隔的平均温度。
如果可以将这些平均值插入新的列(例如D列),那就太好了。

例如,在单元格B361中,时间为09:59:50。下一个单元格B362将表示下一个小时时间段,因此在单元格D361中,我想查看从单元格C2到C361的温度读数的平均值。然后在下一个小时间隔,单元格D718将显示从单元格C362到C718(包括端值)的平均温度读数。
D1078将对单元格C719到C1078进行平均,依此类推。

尽管我在这里没有任何VBA工作可展示,但是我一直在尝试使用excel中的各种功能(例如自动填充系列公式),但无济于事。老实说,我认为我无法绕开Excel处理时间来解决这一问题的方法,更不用说使用有限的VBA技能将其转换为代码了。我认为时间间隔并不是真正一致的事实,并且数据跨越几天,这使我很难解决这个问题。

这是我第一次发布问题,因此如果我不遵守任何规则,我深表歉意(尽管在此过程中我曾多次咨询stackoverflow,但我成功编写了自己的首次VBA Excel代码而不发布问题!)

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这不是您要的,而是另一种考虑的方法:

数据透视表

在您的示例文件中,Time列的格式实际上是 Date / Time (日期/时间),仅显示时间。

所以您可以

  • 插入数据透视表
  • 将时间拖到行区域
  • 将温度拖到值区域
  • 编辑“温度”以显示Average(而不是默认的Sum)并根据需要设置数字的格式(我用一个小数点表示)
  • 右键单击“数据透视表”中的行项目,然后选择按小时和天(如果需要,也可以仅按小时)分组
  • 添加一些格式

按小时和天分组的数据透视:

enter image description here

仅按小时分组的数据透视:

enter image description here

答案 1 :(得分:0)

将其放在D列的顶部并填写。

=if(hour(b2)<>hour(b2+time(0, 0, 10)), averageifs(c:c, b:b, ">="&int(b2)+time(hour(b2), 0, 0), b:b, "<="&int(b2)+time(hour(b2), 59, 59)), "")