【问题标题】:How to display hh:mm:ss in Excel?如何在 Excel 中显示 hh:mm:ss?
【发布时间】:2015-06-15 08:05:14
【问题描述】:

我是 Excel VBA 的新手。我想设置一个循环,在新单元格中显示每一分钟的时间。

有没有办法只显示单元格中的时间 (hh:mm:ss) 而不会看到旁边的日期?另外,我想要显示的时区。 (例如新加坡时间,“SGT”)。

这是我希望看到的输出示例:

23-Oct-13 10:00:00 AM SGT
23-Oct-13 10:01:00 AM SGT
23-Oct-13 10:02:00 AM SGT
23-Oct-13 10:03:00 AM SGT
23-Oct-13 10:04:00 AM SGT
23-Oct-13 10:05:00 AM SGT
23-Oct-13 10:06:00 AM SGT
23-Oct-13 10:07:00 AM SGT
23-Oct-13 10:08:00 AM SGT
23-Oct-13 10:09:00 AM SGT
23-Oct-13 10:10:00 AM SGT
23-Oct-13 10:11:00 AM SGT
23-Oct-13 10:12:00 AM SGT
23-Oct-13 10:13:00 AM SGT
23-Oct-13 10:14:00 AM SGT
23-Oct-13 10:15:00 AM SGT
23-Oct-13 10:16:00 AM SGT
23-Oct-13 10:17:00 AM SGT
23-Oct-13 10:18:00 AM SGT
23-Oct-13 10:19:00 AM SGT
23-Oct-13 10:20:00 AM SGT
...

【问题讨论】:

  • 您想从 A 列中获取值,仅提取时间值 (hh:mm:ss),然后将其放入不同的列吗?您的源数据的长度是否始终相同(即时间值前后的字符数始终相同)?到目前为止,您尝试过做什么?
  • 我希望有一个代码可以自动为我提供从 00:00:00 到 23:59:00 的时间。 (不是提取和粘贴)。我仍在做一些可能帮助我找到答案的研究。很抱歉没有为您提供任何编码.. - @eirikdaude
  • 那么你从哪里得到这些时间值呢?如果只是关于格式,查看NumberFormat 可能会有所帮助。
  • 我从建筑荷载的原始数据中得到了值。嗯.. 抱歉,这与格式无关。更像是插入一个代码,这样我就可以将 00:00:00 到 23:59:00 的时间放入 A 列,而不仅仅是将 range("A1").Value = 00:00:00 放在范围(“A_”)。值 = 23:59:00。这将需要数百个编码来完成...... -@eirikdaude
  • 您想将 00:00:00 到 23:59:00 之间的每个时间值放入 A 列,增量为 1 分钟?没有得到问题中显示的格式?如果是这样,您应该将其放入您的问题中,因为很难解析您正在尝试做的事情。

标签: vba excel time


【解决方案1】:

这应该做,玩得开心。 :-)

Option Explicit
Sub test()
    Dim i&, sTime As Date, TimeStep As Date, Cell As Range
    '// Format range cell to 24Hrs
    With Range("A1:A1440") '// 24H*60M
        .NumberFormat = "HH:MM:SS;@"
    End With

    Set Cell = [A1] '// first cell to write
        sTime = "00:00:00"  '// start time
    '// Loop 24hrs
    TimeStep = "00:01:00" '// time increment
    For i = 0 To 1439 ' // 1439 means 1439 cells
        Cell.Offset(i, 0).Value = sTime
        sTime = sTime + TimeStep
    Next i
End Sub

开始

结束

【讨论】:

  • 一般情况下,在处理时间时,你不应该连续添加一个增量。这可能导致累积的舍入误差。最好将步长乘以倍数并添加该单个数字:.Value = sTime + TimeStep * i。如果时间存储在特定(最近)的一天,这很可能是一个问题,因为“数字”从 47000 左右开始,或者如果您添加的是秒而不是分钟。来自@Jeeped 的相关帖子:stackoverflow.com/a/30380424/4288101
  • @拜伦。太感谢了 !抱歉,我花了很长时间才回复 :') 是的,它确实有帮助。再次感谢您
【解决方案2】:

好的,现在你解释得更深入了,

ActiveSheet.Cells(1, 1).Value = "00:00:00"
ActiveSheet.Cells(2, 1).Value = "00:01:00"
Range("A1:A2").Select
Selection.AutoFill Destination:=Range("A1:A1440"), Type:=xlFillDefault

应该做的伎俩

【讨论】:

    【解决方案3】:

    要检索时间格式,您可以使用:

    =Mid(A1,11,8)*1 into function bar (with additional column)
    

    或进入一个子

    timeOnClock = Mid(MyString, 10, 9)*1
    

    那么对于你的第一行(23-Oct-13 10:00:00 AM SGT) you retrieve 0,416666667,你可以选择你喜欢的格式

    【讨论】:

    • 不会吹毛求疵,但您是否刚刚从我丢弃的编辑中复制了答案的第二部分?因为变量名非常独特...
    • 科恩,我用同一个变量名,容易理解。您的代码是正确的,我只添加了 *1,因为在这种情况下,如果我碰到了,结果将从文本转换为数字对不起
    • @Fabrizio 为什么还要这样做?您正在丢失数据并对其进行格式化,而只是格式化它可以获得所需的结果。
    猜你喜欢
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    相关资源
    最近更新 更多