我正在尋找一個簡單的宏來指定單元格爲類型「時間」,只鍵入數字(例如「955」)將格式化(並識別as)「hh:mm」時間。換句話說,通過輸入「955」,單元格會解釋爲「09:55」,而我現在所能做的就是解釋爲「1902-08-12 00:00:00」(最可能的955是1902-08-12的天數)。Excel:宏自動格式化時間(無日期)
編輯:的這方面的需要
部分是允許的時間計算後輸入(例如。減去兩個時間值來獲得一個時間跨度,或添加幾個時間跨度一共拿到)。
我正在尋找一個簡單的宏來指定單元格爲類型「時間」,只鍵入數字(例如「955」)將格式化(並識別as)「hh:mm」時間。換句話說,通過輸入「955」,單元格會解釋爲「09:55」,而我現在所能做的就是解釋爲「1902-08-12 00:00:00」(最可能的955是1902-08-12的天數)。Excel:宏自動格式化時間(無日期)
編輯:的這方面的需要
部分是允許的時間計算後輸入(例如。減去兩個時間值來獲得一個時間跨度,或添加幾個時間跨度一共拿到)。
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的小區中的適當的「時間」的適當的十進制值:毫米格式。
由於某些原因,Excel不允許在自定義格式中使用「:」。 但是,如果您確定了另一個分隔符,請輸入破折號「 - 」,那麼您可以簡單地創建一個自定義格式,如下所示:## - ##
當然,您的時間必須採用24小時格式。
或者,您可以先輸入您的所有時間,就像數字一樣(或者如果您不想丟失尾隨零,則可以更好地輸入文本)。然後運行腳本在幾分鐘和幾分鐘之間插入分號。
我明白了......但這本身並不是一個時間,所以我不能添加它們(當然,我可以,但公式不會很乾淨)。我想我應該更具體。 – MPelletier 2010-02-18 21:55:26
這不是VBA,而是一個會改變格式的公式。如果你願意的話,你可以把它加入到VBA中,但應該幫助你作爲一個跳躍點。
=TIMEVALUE(IF(LEN(A5)=3,"0"&LEFT(A5,1)&":",LEFT(A5,2)&":")&RIGHT(A5,2))
(如果A5是你進入955細胞)
(另外,確保公式的單元格的格式設置爲你想要的時間格式。)
我可以用代碼,如果幫需要。只要回覆。
這似乎更多「如何使用<特定軟件>」。編程在哪裏? – 2010-02-18 21:10:52
對不起,我重寫了它。現在是「我怎麼寫」? –
MPelletier
2010-02-18 21:14:34
@Roger Pate:電子表格編程或代碼編程仍在編程中。自定義格式使用很多僞代碼,並且可能很難導航。 – guitarthrower 2010-02-18 21:50:30