这是他的回答。

这是他的回答。

在 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。

记住:

仅当输入单元格被清除并格式化为文本在您输入数据之前。

相关内容