在 Excel 中格式化时间(持续时间)

在 Excel 中格式化时间(持续时间)

有没有人有好的快的在 Excel 中输入时间(特别是持续时间,而不是一天中的时间)的方法是什么?在这种情况下,所有时间都是很短的,只有分钟和秒。没有长达一小时的时间,所以我不需要显示小时,我也不想每次都输入它。

我想出了一些捷径来简化一些事情——我的格式是m:ss;@,它显示我想要的内容,但我仍然必须0:3:14每次都输入。

我创建了一个宏,这样只要输入 ,..我就能得到一个:,这比经常在按下 Shift 键输入冒号和按下 Shift 键输入数字之间切换要快得多。(这也节省了时间,因为 就.在数字键盘上,所以我可以轻松地单手打字,而不必每次都把手移到 和 之间:。)忘记我在哪里看到这个建议了,但它真是天才。

但是,我还是得输入0..3..14。它要求我输入小时,即使它始终为 0。我有没有办法只输入3..14。如果我现在这样做,我最终会得到3:14:00而不是0:03:14。这似乎不多,但是当你必须做数百次时,每一点都有帮助。(我试过作弊,假装小时和分钟是分钟和秒,但当我想把底部的所有持续时间加起来时,这种方法就失败了——总和将要以小时为单位,尽管个别时间要短得多。

答案1

您可以使用变化事件来捕获数据输入,并通过除以 60 将小时:分钟值转换为分钟:秒值。

例如,A 列中输入的所有值都将输入为 xx:yy,宏会将它们转换为 mm:ss,而不是 hh:mm。A 列中的一个单元格的范围名称为“totals”。此单元格将从自动转换中排除。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
On Error Resume Next
    If Not Target.Name.Name = "totals" Then
        Application.EnableEvents = False
        Target = Target / 60
        Application.EnableEvents = True
    End If
End If
End Sub

根据您的需要调整范围。

答案2

看看下面的宏是否适合您。它需要以下形式的条目:

314   
852   
  3   

换句话说,只是数字。59 秒将输入为 59,1 分 21 秒将输入为 121,等等。

完成数据输入后,选择输入的值并运行宏。它会将输入的内容转换为时间值。

Sub NumToTime()
    Dim cell As Variant
    Dim hr As Long
    Dim min As Long
    Dim sec As Long
    hr = 0
    For Each cell In Selection
        min = Int(cell.Value / 100)
        sec = cell.Value - (min * 100)
        cell.Value = TimeSerial(hr, min, sec)
    Next
End Sub

答案3

“您可以使用以下 VBA(Visual Basic for Applications)代码替换旧的宏(另一种类型的 Excel 宏),该代码处理用冒号替换双点。

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Cells.Count <> 1 Then Exit Sub 'Only check when one cell is being changed.

   Select Case UBound(Split(Target.Formula, "..")) 'How many ".." appear in the formula?
      'UBound returns 1 less than the number of elements in an array because array indexes start at 0, eg: array(0), array(1)

      Case 1 'ie only two values entered, minutes & seconds (so add the hours)
         Target.Formula = "0:" & Replace(Target.Formula, "..", ":")
         Target.NumberFormat = "[m]:ss" 'Optional formatting to show duration in minutes

      Case 2 'ie three values entered, hours, minutes, seconds, just replace the double dots with colons
         Target.Formula = Replace(Target.Formula, "..", ":")
         Target.NumberFormat = "[h]:mm:ss" 'Optional formatting to show duration in hours
   End Select
End Sub

此代码假定一组双点表示分钟和秒(1..1 -> 0:01:01),而不是 Excel 默认的小时和分钟。

它还会根据输入的内容自动格式化单元格。请注意或[ ]周围的,它告诉 Excel 显示总分钟数。如果没有,Excel 只会显示小时内的分钟数,或一天内的小时数(即最多 59 分钟或 23 小时)。如果值大于这些最大值,格式将忽略任何额外内容。使用 强制Excel 显示总分钟数或小时数等(例如 65 分钟将显示为带有或带有但显示为使用)。mh[ ][ ]5:00m:ss1:05:00h:mm:ss65:00[m]:ss

PS 如果您需要此功能在所有工作表上运行,则需要将代码添加到本工作簿Sub 内的模块具有以下定义:

 Private Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

希望这可以帮助...

相关内容