Excel时间格式

时间:2016-11-23 19:59:46

标签: excel excel-vba vba

时间格式化问题。

我已将单元格设置为自定义格式00:00。

目前在A栏中输入日期,这可以是0300,转换为03:00,这是完美的,或者你可以输入03:00。

如果用户输入03; 00,我现在有一个问题,因为我需要这个来显示03:00

我怎样才能确保所有时间都是hh:mm格式而不是hh; mm等。

除了标题(A1:A5)之外,这需要自动更改A列中任何内容的输入,但这不应受到影响。

由于

2 个答案:

答案 0 :(得分:0)

在工作表更改事件中,您将放置以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.CountLarge = 1 And Target.Column = 1 And Target.Row > 5 Then
        Target.Value2 = Replace(Target.Value2, ";", ":")
    End If
End Sub

解释代码......它首先检查以确保更改不在多个单元格上(即粘贴),并且更改位于第5行下面的列A.如果它确实通过了条件,它只是替换{ {1}} ;

答案 1 :(得分:0)

这就是我所需要的。

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim xStr As String
Dim xVal As String
Set rng1 = Range("A:A")
Set rng2 = Range("C:C")
Set rng3 = Range("I:I")
On Error GoTo EndMacro
If Application.Intersect(Target, Union(rng1, rng2, rng3)) Is Nothing Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Target.Row < 5 Then Exit Sub
Application.EnableEvents = False
With Target
    If Not .HasFormula Then
        Target.Value = Replace(Target.Value, ";", ":")
        Target.Value = Left(Target.Value, 5)
        xVal = .Value
        Select Case Len(xVal)
            Case 1 ' e.g., 1 = 00:01 AM
                xStr = "00:0" & xVal
            Case 2 ' e.g., 12 = 00:12 AM
                xStr = "00:" & xVal
            Case 3 ' e.g., 735 = 07:35 AM
                xStr = "0" & Left(xVal, 1) & ":" & Right(xVal, 2)
            Case 4 ' e.g., 1234 = 12:34
                xStr = Left(xVal, 2) & ":" & Right(xVal, 2)
            Case 5 ' e.g., 12:45 = 12:45
                xStr = Left(xVal, 2) & Mid(xVal, 2, 1) & Right(xVal, 2)
            Case Else
                Err.Raise 0
        End Select
        .Value = Format(TimeValue(xStr), "hh:mm")
    End If
End With
Application.EnableEvents = True
Exit Sub

EndMacro:     Application.EnableEvents = True 结束子

由于