2016-11-23 79 views
0

時間格式有問題。Excel時間格式

我已經將單元格設置爲自定義格式00:00。

當前在A欄中輸入一個日期,可以是0300,它可以轉換爲03:00,這是完美的,或者您可以輸入03:00。

如果用戶輸入03我現在有一個問題; 00,因爲我需要它,可以顯示03:00

我如何能確保所有的時間都在HH:mm格式,而不是在HH;毫米等

這需要在輸入中自動更改列A中的任何內容,但標題(A1:A5)除外,但不應受此影響。

感謝

+1

據我所知,'的00自定義格式:00'將是無效的。你可能是指'hh:mm'?但如果您使用'hh:mm',則輸入「0300」將導致Excel在第300天(即1900年10月26日)顯示午夜時間。或者你使用了'00 \:00'的格式嗎?但'00 \:00'會導致「03:00」的輸入計算爲0.125(一天中的1/8)並顯示爲「00:00」。我擔心我很困惑。 – YowE3K

+0

你爲什麼不用''替換';'並運行你所擁有的普通宏? – Niclas

+0

對不起,我的意思是00 \:00這工作正常。 @niclas我目前沒有任何宏,我需要一個關於細胞的變化。我嘗試過,但不知道我在做什麼是對的。 – jynxy

回答

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 =真 結束小組

感謝

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中。如果它通過了條件,它將簡單地替換;:

+0

您好nbayly感謝您的評論。我已經嘗試過這一點,如果我按照預期輸入0302時間變爲03:02。如果我輸入03:02現在變成00:00這是不好的,如果我輸入03; 02它仍然是一樣的。我做錯了什麼? – jynxy

+0

好吧即時靠近,[code] Private Sub Worksheet_Change(ByVal Target As Range) 如果Target.CountLarge = 1並且Target.Column = 1並且Target.Row> 5然後 Target.Value = Replace(Target.Value,「 ;「,」:「) End If End Sub [/ code]但是我必須刪除單元格格式,所以現在允許03:02並將03; 02轉換爲03:02但是現在我需要它當我輸入0302時,它將轉換爲03:02 – jynxy

+0

這比您的原始問題要困難得多,主要是因爲直到您輸入值並且Excel重新格式化數字之前,事件纔會觸發。您是否將時間格式的A列中的單元格預設爲?您遇到的問題是Excel試圖解釋並重新格式化您的輸入,因此我不知道在Excel執行此操作之前找到手動輸入。也許將您的列設置爲文本並創建時間格式驗證,然後將該單元格格式設置爲時間。 – nbayly