有没有人有好的快的在 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 分钟将显示为带有或带有但显示为使用)。m
h
[ ]
[ ]
5:00
m:ss
1:05:00
h:mm:ss
65:00
[m]:ss
PS 如果您需要此功能在所有工作表上运行,则需要将代码添加到本工作簿Sub 内的模块具有以下定义:
Private Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
希望这可以帮助...