我正在尝试创建一个 Excel 电子表格,以便记录参赛选手的比赛时间。我需要展示,mm:ss.00
并且我希望能够做到这一点而无需输入冒号或小时数。
我已经在 VBA 中尝试过此代码,效果很好,但是它只显示mm:ss
不分秒。有人知道我该如何编辑此代码以包含分秒吗?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Intrsct As Range, Cell As Range, s As String
Dim mins As Long, secs As Long, t As Date
Set Intrsct = Intersect(Range("G13:G104"), Target)
If Intrsct Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each Cell In Intrsct
s = Cell.Text
If s = "" Then
Cell.NumberFormat = "@"
ElseIf Len(s) > 4 Then
Cell.Clear
Cell.NumberFormat = "@"
Else
s = Right("0000" & s, 4)
If s Like "####" Then
mins = CLng(Left(s, 2))
secs = CLng(Right(s, 2))
t = TimeSerial(0, mins, secs)
Cell.NumberFormat = "[mm]:ss"
Cell.Value = t
Else
Cell.Clear
Cell.NumberFormat = "@"
End If
End If
Next Cell
Application.EnableEvents = True
End Sub
答案1
答案2
它似乎TimeSerial
功能只接受整数值作为参数,因此不能在此处传递秒数。同样适用于工作表函数TIME
但时间以以下格式表示为数字:
Hours/24 + Minutes/(24*60) + Second/(24*60*60)
因此,如果您得到这个数字,您可以使用带有第二个分数的自定义格式!(在屏幕截图中mm:ss.00
使用)
看Excel Online 文件示例显示函数和自定义公式生成的时间值之间的差异TIME
。(不幸的是,Excel online 不支持创建自定义数字格式,并且仅mm:ss.0
在那里可用。)
答案3
它不显示您输入的瞬间秒数,因为您不允许它显示。
如上所述,仅当您在单元格中输入四个或更少的字符时,您的宏才会输出值。
超过四项时,宏将清除该条目。
四个或更少,它会在单元格中创建一个时间条目。
请注意,条目将是由四个或更少的字符组成的分钟(左边两个字符)和秒(右边两个字符)s
。
因此,如果您确实输入了分秒,则条目将被清除,并且不会显示任何时间。
更糟糕的是,TimeSerial()
创建步骤确保结果仅仅是mm:ss
。
您需要重新考虑如何处理输入字符串。您必须将至少六个字符传递到最后的步骤中。
为了避免提到的任何限制TimeSerial()
,也许可以执行已经存在的步骤,尽管使用字符串的左边两个字符和中间的第三和第四个字符来创建值TimeSerial()
,然后添加右边的两个字符(除以,(24*60*60*100)
因此它实际上是添加了瞬间的时间。
或者只需将字符串的每个部分除以适当的除数(分钟: (24*60)
和秒 (24*60*60)
:),将值放入单元格中,然后应用mm:ss.00
格式。Excel 本身很乐意允许显示最多千分之一(mm:ss.000
)。