![这是他的回答。](https://linux22.com/image/1623208/%E8%BF%99%E6%98%AF%E4%BB%96%E7%9A%84%E5%9B%9E%E7%AD%94%E3%80%82.png)
在 Excel 中以 mm:ss 格式输入时间日期(只需输入数字,前面不加冒号 : 和 0: 小时)
你好,我正在做一个项目,需要计算人们工作的分钟数和秒数。
*我发现了一个类似的问题,但想知道我是否可以使格式更简单。(将在底部解释)
问题不是当输入 38:14 表示 38 分钟 14 秒时,单元格将其识别为 38 小时 14 分钟,如果我双击它......这就是我得到的...... 1900-01-01 2:14:00
我明白原因,但我想要一种可以将数字识别为分钟和秒的格式。
我发现了一个看似简单易行的答案,但我不知道如何让它发挥作用......
“Peter Albert 在这个链接中给出了解决方案。我喜欢他的答案很简单,只需要按照简单的指示进行复制和粘贴,但这对我来说不起作用”
这是他的回答。
有解决方案!将此 VBA 代码放入您的工作表模块中,即:
打开 Visual Basic 编辑器 (Alt-F11) 在左上角的树视图中,双击要输入时间的表单 在中央代码面板中,放置以下代码。 关闭 VBE 使用此代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value < 0 Or Target.Value > 1 And Target.NumberFormat <> "h:mm" Then Exit Sub
Application.EnableEvents = False
Target.Value = Target.Value / 60
Target.NumberFormat = "mm:ss"
Application.EnableEvents = True
End Sub
In case you already formatted the range you're entering the data in, use this line instead as the first line:
If Target.Value < 0 Or Target.Value > 1 Then Exit Sub
Note that this will change the value and format - every time you enter either a time - or something that is between 0 and 1! If you want to restrict it to a certain column, add this line:
If Target.Column <> 3 Then Exit Sub
or this line to restrict it to a certain range
If Intersect(Target, Range("A2:A100") Is Nothing Then Exit Sub
===================================================
*现在我喜欢的版本是当我输入 4 位数字时,我希望前两位数字被识别为分钟,后两位数字被识别为秒...这将帮助我节省输入:冒号的时间。
因此当我输入 3814 时,它会被识别为 38 分 14 秒,在单元格中它会自动标记为 38:14。
当然,即使过了 60 分钟,我也希望它只显示分钟。
我想要应用条件的单元格是从 G13 到 G104。
先感谢您。
答案1
首先清除数据输入单元格并将其格式化为文本。
然后在工作表代码区域安装此事件宏:
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
如果你输入1234你会得到12:34
如果你输入1你会得到00:01
如果您输入:12你会得到00:12
如果你输入123你会得到01:23
如果你输入9999你会得到100:93
ETC。
记住:
仅当输入单元格被清除并格式化为文本在您输入数据之前。