2012-06-18 57 views
1

我收到了代表軍事時間的自定義格式(類型:000000)中的數字列表。它總是包含6位數字,必要時使用前導零。例如:如何將給定的數字轉換爲VBA中的時間格式HH:MM:SS?

  • 123456變爲12時34分56秒(PM)
  • 000321變爲0時03分21秒(AM)
  • 142321變得十四時23分21秒(PM)

如何將列A中的整數轉換爲列B中的格式(hh:mm:ss)?我想用24小時軍用時鐘。

+0

你是如何 「接納他們爲整數」? '000321'不是一個整數,所以你必須以另一種格式獲得它們。 (知道這種格式可能會使答案更容易。) –

+0

你是對的...格式是自定義,請輸入:000000 – phan

+0

你有這個問題標記'VBA',但你真的想在VBA代碼中做到這一點?或者你只想要一個可以在Excel單元格中使用的公式? – alan

回答

6

假設其真正的整數,而不是文本:

=TIME(INT(A1/10000),INT(MOD(A1,10000)/100),MOD(A1,100))

如果是文本,然後使用結果,但是你想

=TIME(VALUE(LEFT(A1,2)),VALUE(MID(A1,3,2)),VALUE(RIGHT(A1,2)))

格式。

作爲VBA函數:整數:

Function RetTime(IntTime As Long) As Date 
RetTime = TimeSerial(Int(IntTime/10000), Int((IntTime Mod 10000)/100), (IntTime Mod 100)) 
End Function 

字符串:

Function RetTimeS(StrTime As String) As Date 
RetTimeS = TimeSerial(Val(Left(StrTime, 2)), Val(Mid(StrTime, 3, 2)), Val(Right(StrTime, 2))) 
End Function 
+0

來做到這一點我嘗試使用您的公式,但得到了錯誤「Sub or Fucntion not defined」。我究竟做錯了什麼? – phan

+0

這是一個公式 - 不需要VBA – SeanC

+0

我明白,但我想在VBA中做到這一點(而不是使用公式)。這就是爲什麼我標記VBA。我試圖調整你的公式到VBA中,但沒有運氣。 – phan

3

如果你想VBA代碼,或一個單元格的公式,或者是什麼Custom, type 00000是我不能告訴。上面的答案可能是從正確使用VBA函數的角度來看最好的,但我不相信有什麼辦法在軍事時間格式化一個時間對象,以「(am)」和「(pm)」結尾。至少不使用標準的Excel格式。 (也許是因爲上午和下午都在軍隊的時間冗餘。)

因此,假如您的源數據是真正的絃樂,這裏是一個選擇,如果你真的想「是」出於某種原因,「PM」:

=MID(A1,1,2) & ":" & MID(A1,3,2) & ":" & MID(A1,5,2) & IF(VALUE(MID(A1,1,2)) < 12," (am)", " (pm)") 
+0

對不起Alan,我把am和pm放在括號內以顯示它的一部分時間是......但我不希望上午或下午在我的結果..只是數字和冒號 – phan

6

嘗試TEXT函數,即B1

=TEXT(A1,"00\:00\:00")+0

和格式爲hh:mm:ss的

相關問題