在Excel中,我需要自定义单元格格式,将时间显示为hh:mm,但它返回0:00

在Excel中,我需要自定义单元格格式,将时间显示为hh:mm,但它返回0:00,excel,Excel,我希望能够在单元格中输入“1830”,并让Excel自动将其转换为18:30格式 我尝试使用自定义格式和时间格式化单元格,但无法使其正常工作。请在发布之前自己试试,我需要做的就是输入hh:mm 我猜我将需要使用VBA,我不是很熟悉,但想学习。我知道我可以右键单击“Sheet1”,转到“查看源代码”,并确保在顶部选择“工作表”而不是“常规”,然后编写代码。如果有人能粘贴代码,将不胜感激 谢谢大家! 这很简单。您只需在单元格中键入18:30,Excel将为您完成其余工作。这非常简单。您只需在单元格中

我希望能够在单元格中输入“1830”,并让Excel自动将其转换为18:30格式

我尝试使用自定义格式和时间格式化单元格,但无法使其正常工作。请在发布之前自己试试,我需要做的就是输入hh:mm

我猜我将需要使用VBA,我不是很熟悉,但想学习。我知道我可以右键单击“Sheet1”,转到“查看源代码”,并确保在顶部选择“工作表”而不是“常规”,然后编写代码。如果有人能粘贴代码,将不胜感激


谢谢大家!

这很简单。您只需在单元格中键入18:30,Excel将为您完成其余工作。

这非常简单。您只需在单元格中键入18:30,Excel将为您完成其余工作。

为此,您必须首先提出一些将整数值转换为时间值的规则。一些问题:

如果有人键入7,您希望将其保留为7,还是希望将其转换为00:07

如果有人键入1861,是否将其转换为19:01


如果有人键入1830.5,是否要将其转换为18:30:30?

要执行此操作,必须首先提出一些将整数值转换为时间值的规则。一些问题:

如果有人键入7,您希望将其保留为7,还是希望将其转换为00:07

如果有人键入1861,是否将其转换为19:01


如果有人键入1830.5,是否将其转换为18:30:30?

这只会影响A1,但您可以将rAffected更改为您想要的任何范围

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rAffected As Range

    'You may want to limit which cells change
    Set rAffected = Me.Range("A1")

    If Not Intersect(Target, rAffected) Is Nothing Then
        Application.EnableEvents = False
            Target.Value = TimeSerial(Left$(Target.Value2, Len(Target.Value2) - 2), Right$(Target.Value2, 2), 0)
        Application.EnableEvents = True
    End If

End Sub

这只会影响A1,但您可以将rAffected更改为您想要的任何范围

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rAffected As Range

    'You may want to limit which cells change
    Set rAffected = Me.Range("A1")

    If Not Intersect(Target, rAffected) Is Nothing Then
        Application.EnableEvents = False
            Target.Value = TimeSerial(Left$(Target.Value2, Len(Target.Value2) - 2), Right$(Target.Value2, 2), 0)
        Application.EnableEvents = True
    End If

End Sub

创建此自定义格式并应用于选定单元格:0 \:00

创建此自定义格式并应用于选定单元格:0 \:00

如果需要excel中的当前时间,可以按Ctrl+Shift+;在单元格中输入时间,并获取单元格中的时间

如果需要excel中的当前时间,可以按Ctrl+Shift+;在一个牢房里,把时间放在牢房里

我也有类似的需要。用户使用数字键盘输入24小时的时间,输入冒号是一件痛苦的事

这有点过分了,但对我的情况有效。您只需使用24小时时间格式之一设置所需单元格的格式:

  Public Sub Handle24HourTimeEntry(ByVal Target As Range)
   'Converts up to 4 digits to 24 hour time
   Dim sTime24 As String

   Const sTIME_FORMATS As String = "|h:mm;@|h:mm|hh:mm|"
   Const sERROR_VALUE As String = "XXXX"
   'Valid 24hr time values: 1, 59, 135, 2035, 2359
   'Invalid values: 2400, 90, 9999, 12345

     If Target.Cells.Count = 1 Then ' ensure that only single cell edits get processed
        If IsNumeric(Target.Cells.Value2) Then ' skips empty cells, labels and error conditions
           If Not Target.Cells.HasFormula Then ' skip formulas
              If InStr(1, sTIME_FORMATS, "|" & Target.Cells.NumberFormat & "|") > 0 Then
                 If Target.Value2 >= 1 Then ' it's not a standard time value
                    sTime24 = Format$(Target.Value2, "0000")
                    If Len(sTime24) = 4 Then
                       sTime24 = Left$(sTime24, 2) & ":" & Mid$(sTime24, 3, 2)
                       If IsDate(sTime24) Then
                          Target.Value2 = CDate(sTime24)
                       Else
                          Target.Value = sERROR_VALUE
                       End If
                    Else
                       Target.Value = sERROR_VALUE
                    End If
                 End If
              End If
           End If
        End If
     End If

  End Sub
我从工作簿工作表更改事件中将其称为:

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

   Handle24HourTimeEntry Target

End Sub

我也有类似的需要。用户使用数字键盘输入24小时的时间,输入冒号是一件痛苦的事

这有点过分了,但对我的情况有效。您只需使用24小时时间格式之一设置所需单元格的格式:

  Public Sub Handle24HourTimeEntry(ByVal Target As Range)
   'Converts up to 4 digits to 24 hour time
   Dim sTime24 As String

   Const sTIME_FORMATS As String = "|h:mm;@|h:mm|hh:mm|"
   Const sERROR_VALUE As String = "XXXX"
   'Valid 24hr time values: 1, 59, 135, 2035, 2359
   'Invalid values: 2400, 90, 9999, 12345

     If Target.Cells.Count = 1 Then ' ensure that only single cell edits get processed
        If IsNumeric(Target.Cells.Value2) Then ' skips empty cells, labels and error conditions
           If Not Target.Cells.HasFormula Then ' skip formulas
              If InStr(1, sTIME_FORMATS, "|" & Target.Cells.NumberFormat & "|") > 0 Then
                 If Target.Value2 >= 1 Then ' it's not a standard time value
                    sTime24 = Format$(Target.Value2, "0000")
                    If Len(sTime24) = 4 Then
                       sTime24 = Left$(sTime24, 2) & ":" & Mid$(sTime24, 3, 2)
                       If IsDate(sTime24) Then
                          Target.Value2 = CDate(sTime24)
                       Else
                          Target.Value = sERROR_VALUE
                       End If
                    Else
                       Target.Value = sERROR_VALUE
                    End If
                 End If
              End If
           End If
        End If
     End If

  End Sub
我从工作簿工作表更改事件中将其称为:

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

   Handle24HourTimeEntry Target

End Sub

是的,但是每次我都要手动把冒号放进去。我想能够键入1830不带冒号,并让excel自动添加冒号。(这是一个计算机实验室,它要求用户键入他们登记的时间,这样他们就可以将使用时间限制在30分钟内)@Tom Excel希望您这样做。它实际上将其存储为一整天的分数,因此12:00存储为0.5,并仅表示为一个时间。如果你只使用Excel并做它想让你做的事情,生活会变得更轻松。对,但每次我都必须手动将冒号放在那里。我想能够键入1830不带冒号,并让excel自动添加冒号。(这是一个计算机实验室,它要求用户键入他们登记的时间,这样他们就可以将使用时间限制在30分钟内)@Tom Excel希望您这样做。它实际上将其存储为一整天的分数,因此12:00存储为0.5,并仅表示为一个时间。如果你只使用Excel并做它想让你做的事情,生活会更轻松。+1指出了一些破坏Excel输入规则的陷阱+1指出了一些破坏Excel输入规则的陷阱+1我不明白OP为什么如此痴迷于不打字“:”也许他的键盘缺了一个键,但是你应该得到一些名声,因为你逗了他!同意。在我加上我的答案之前,我对你的答案投了赞成票。我必须承认,我为自己编写了一些奇怪的烦恼/捷径,其他人会认为它们很奇怪。因此,无论如何,我都尽量不去严厉地说出来。:)+1我不明白为什么OP如此痴迷于不打字:“也许他的键盘缺了一个键,但你应该得到一些代表来逗他!同意。在我加上我的答案之前,我对你的答案投了赞成票。我必须承认,我为自己编写了一些奇怪的烦恼/捷径,其他人会认为它们很奇怪。因此,无论如何,我都尽量不去严厉地说出来。:)