如何在Excel中按15/30/45分钟间隔生成两日期间的时间序列?
解决Excel生成分钟级间隔时间序列的问题
看起来你之前误解了WriteDates方法的间隔参数单位——它的参数是天数,不是小时数!所以你传入0.5得到的是12小时间隔(半天),而不是30分钟。这就是为什么没达到预期效果的原因。
下面给你两种简单的实现方案,覆盖不同Excel版本的需求:
方案1:用公式快速生成(推荐,无需VBA)
如果你的Excel是365/2021或更高版本,SEQUENCE函数可以一键生成完整序列,非常方便:
- 在单元格A1输入起始时间:
2020/10/1 7:00 - 在单元格B1输入结束时间:
2020/10/4 13:00 - 在C1输入公式,根据需要替换间隔分钟数:
- 15分钟间隔:
=SEQUENCE(INT((B1-A1)/TIME(0,15,0))+1,1,A1,TIME(0,15,0)) - 30分钟间隔:
=SEQUENCE(INT((B1-A1)/TIME(0,30,0))+1,1,A1,TIME(0,30,0)) - 45分钟间隔:
=SEQUENCE(INT((B1-A1)/TIME(0,45,0))+1,1,A1,TIME(0,45,0))
- 15分钟间隔:
- 按回车后,Excel会自动生成从起始到结束的所有时间点,最后设置单元格格式为
m/d/yy h:mm即可匹配你要的显示效果。
如果是旧版Excel(没有SEQUENCE),用手动填充法:
- A1输入起始时间
2020/10/1 7:00 - A2输入公式,替换对应间隔的分数(15分钟=1/96天,30分钟=1/48天,45分钟=1/32天):
=A1+1/48 ' 30分钟间隔示例 - 选中A2,鼠标移到单元格右下角的填充柄,下拉直到时间超过
2020/10/4 13:00,最后删掉超出的行即可。
方案2:修改VBA方法支持分钟间隔
如果你习惯用VBA,可以调整原有的WriteDates方法,或者直接用下面这个专门处理分钟间隔的自定义宏:
Sub WriteTimeSequence(startTime As Date, endTime As Date, intervalMinutes As Integer, targetRange As Range) Dim currentTime As Date Dim cell As Range currentTime = startTime Set cell = targetRange ' 设置时间显示格式 cell.NumberFormat = "m/d/yy h:mm" Do While currentTime <= endTime cell.Value = currentTime Set cell = cell.Offset(1, 0) currentTime = currentTime + TimeSerial(0, intervalMinutes, 0) Loop End Sub
调用示例:
在VBA编辑器中插入模块,粘贴上面的代码后,运行下面的测试宏:
Sub GenerateMyTimeSeries() Dim startDt As Date Dim endDt As Date ' 设置起止时间 startDt = #10/1/2020 7:00:00 AM# endDt = #10/4/2020 1:00:00 PM# ' 生成30分钟间隔,从Sheet1的A1单元格开始写入 WriteTimeSequence startDt, endDt, 30, ThisWorkbook.Sheets("Sheet1").Range("A1") End Sub
运行后就会得到你要的时间序列,修改intervalMinutes参数为15或45即可切换间隔。
内容的提问来源于stack exchange,提问作者RSprod
相关产品推荐
相关产品推荐

