2010-06-22 283 views
101

我試圖在Excel宏中顯示毫秒。我有一列整數,它們僅僅是以毫秒爲單位的時間戳(例如28095200是7:48:15.200 am),我想在它旁邊創建一個新的列,以保持運行平均值,並以「hh:mm」顯示時間:ss.000「格式。我嘗試了多種不同的路線,但我不能在毫秒級的情況下得到毫秒而不會導致奇怪的事情發生。在Excel中顯示毫秒

這就是我現在所擁有的:

Dim Cel As Range 
Set Cel = Range("B1") 
temp = Application.Average(Range("A1:A2"))/1000 
ms = Round(temp - Int(temp), 2) * 1000 
Cel.Value = Strings.Format((temp/60/60/24), "hh:mm:ss") _ 
       & "." & Strings.Format(ms, "#000") 

出於某種原因,這隻能顯示 「MM:ss.0」 位於小區。然而當我點擊單元格時,它會在公式欄中顯示「hh:mm:ss」。爲什麼細胞中缺少小時?

另外,發生的另一個奇怪的事情是,如果我將最後一行改爲Strings.Format(ms, "#000."),那麼我會得到「hh:mm:ss.000」。這就是我想要的,而不是多餘的時間。

回答

194

右鍵單擊單元格B1並選擇格式單元格。在定製,放在文本框中輸入下列標記類型:

[h]:mm:ss.000 

要設置此代碼,你可以這樣做:

Range("A1").NumberFormat = "[h]:mm:ss.000" 

這應該給你你」重新尋找。

注意:特殊格式的字段通常要求列寬足夠寬,以滿足格式化文本的全部內容。否則,文字將顯示爲######

+0

耶!但是有沒有辦法在代碼中做到這一點?現在,每次運行宏時,格式化都會重置。 (因爲我在宏中刪除並重新創建工作表。)Cel.EntireRow.NumberFormat =「[h]:mm:ss.000」但是在單元格中給了我「######」。 – Evelyn 2010-06-22 17:48:56

+0

@Evelyn - 3件事:1)我添加了您需要設置數字格式的代碼。 2)確保你的列足夠寬以適應整個格式化文本。看到我上面的註釋。 3)參見吉爾伯特的回答,並注意在「回合」函數中使用'3'。這確保你得到3位小數而不是2。 – 2010-06-22 19:40:34

+0

啊!你是對的。我只需要擴大專欄。另外,在這種情況下,我只想要2的精度。我只是希望它被格式化爲3.非常感謝您的幫助! – Evelyn 2010-06-22 20:08:33

4

我這樣做是在Excel 2000

這種說法應該是:ms = Round(temp - Int(temp), 3) * 1000

您需要創建一個自定義的格式,我在Excel 2007中發現的[h]:mm:ss.000

4

結果單元格,如果結果是來自嵌入式查詢的表,那麼ss.000不起作用。我可以粘貼查詢結果(從SQL Server Management Studio),並格式化時間。但是,當我將查詢作爲數據連接嵌入到Excel中時,格式始終以.000爲毫秒。

-3

首先代表的毫秒時間劃時代的日期(通常1/1/1970),然後添加您的毫秒時間的毫秒數除以一天(86400000):

=DATE(1970,1,1)+(A1/86400000)

如果您的單元格格式正確,則應該看到人類可讀的日期/時間。

+0

嗨喬治,歡迎!不幸的是,OP似乎特意要求一種實現單元格「正確格式化」的方法。他們的原始方法已經涵蓋了您要解決的部分:將毫秒時間戳轉換爲可形成日期時間值。此外,六年來,這是一個相當古老的問題,你投入你的時間。您的意見將在更新的問題上得到更多讚賞! – Carsten 2017-01-30 20:28:59