2010-02-18 76 views
3

我正在尋找一個簡單的宏來指定單元格爲類型「時間」,只鍵入數字(例如「955」)將格式化(並識別as)「hh:mm」時間。換句話說,通過輸入「955」,單元格會解釋爲「09:55」,而我現在所能做的就是解釋爲「1902-08-12 00:00:00」(最可能的955是1902-08-12的天數)。Excel:宏自動格式化時間(無日期)

編輯:的這方面的需要

部分是允許的時間計算後輸入(例如。減去兩個時間值來獲得一個時間跨度,或添加幾個時間跨度一共拿到)。

+0

這似乎更多「如何使用<特定軟件>」。編程在哪裏? – 2010-02-18 21:10:52

+0

對不起,我重寫了它。現在是「我怎麼寫」? – MPelletier 2010-02-18 21:14:34

+0

@Roger Pate:電子表格編程或代碼編程仍在編程中。自定義格式使用很多僞代碼,並且可能很難導航。 – guitarthrower 2010-02-18 21:50:30

回答

3

VBA代碼:

Dim val As String 
val = myCell.Value 
Dim newval As String 
If Len(val) = 2 Then 
    newval = "00:" & val 
ElseIf Len(val) = 3 Then 
    newval = "0" & Left(val, 1) & ":" & Right(val, 2) 
ElseIf Len(val) = 4 Then 
    newval = Left(val, 2) & ":" & Right(val, 2) 
Else 
    newval = "Not a valid time" 
End If 
myCell.Value = newval 

此代碼未檢測到,如果最後兩位數是一個有效的時間(大於59的分鐘),但除此之外,它應處理大多數情況下。

如果有人輸入1位數字,也就是說您還需要添加一個案例。午夜後1至9分鐘。


如果您希望將其格式化爲實際時間(日期 - 時間類型),則將單元格的格式更改爲hh:mm。 必須操作鍵入的值,例如955,以產生一天中的一小部分。

僞代碼:

(left(myCell,len(myCell)-2) + (right(myCell,2)/60))/24 

這產生多大的一天已過去且因此將顯示在hh的小區中的適當的「時間」的適當的十進制值:毫米格式。

0

由於某些原因,Excel不允許在自定義格式中使用「:」。 但是,如果您確定了另一個分隔符,請輸入破折號「 - 」,那麼您可以簡單地創建一個自定義格式,如下所示:## - ##
當然,您的時間必須採用24小時格式。

或者,您可以先輸入您的所有時間,就像數字一樣(或者如果您不想丟失尾隨零,則可以更好地輸入文本)。然後運行腳本在幾分鐘和幾分鐘之間插入分號。

+0

我明白了......但這本身並不是一個時間,所以我不能添加它們(當然,我可以,但公式不會很乾淨)。我想我應該更具體。 – MPelletier 2010-02-18 21:55:26

1

這不是VBA,而是一個會改變格式的公式。如果你願意的話,你可以把它加入到VBA中,但應該幫助你作爲一個跳躍點。

=TIMEVALUE(IF(LEN(A5)=3,"0"&LEFT(A5,1)&":",LEFT(A5,2)&":")&RIGHT(A5,2)) 

(如果A5是你進入955細胞)

(另外,確保公式的單元格的格式設置爲你想要的時間格式。)

我可以用代碼,如果幫需要。只要回覆。