2010-06-22 18 views
101

Próbuję wyświetlić milisekundy w makrze programu Excel. Mam kolumnę liczb całkowitych, które są po prostu znacznikami czasu w milisekundach (np. 28095200 jest 7: 48: 15.200 rano) i chcę utworzyć nową kolumnę obok niej, która utrzymuje średnią bieżącą i wyświetla czas w "hh: mm : ss.000 "format. Próbowałem wielu różnych tras, ale po prostu nie mogę uzyskać milisekund, nie powodując dziwnych rzeczy.Wyświetlane milisekundy w Excelu

Oto co mam teraz:

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") 

Z jakiegoś powodu, to tylko wskazania "mm: ss.0" w komórce. Jednak po kliknięciu komórki wyświetla się "hh: mm: ss" na pasku formuły. Dlaczego brakuje godzin w komórce?

Kolejną dziwną rzeczą, która się dzieje, jest to, że jeśli zmienię ostatnią linię na Strings.Format(ms, "#000."), otrzymam "hh: mm: ss.000". Właśnie tego chcę, tylko nie dodatkowy okres.

Odpowiedz

194

Kliknij prawym przyciskiem myszy na komórkę B1 i wybierz opcję Formatuj komórki. W Niestandardowy, umieścić następujące informacje w polu tekstowym oznaczone Rodzaj:

[h]:mm:ss.000 

ustawić to w kodzie, można zrobić coś takiego:

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

To powinno dać to, czego” szukam ponownie.

UWAGA: Specjalnie sformatowane pola często wymagają, aby szerokość kolumny była wystarczająco szeroka dla całej zawartości sformatowanego tekstu. W przeciwnym razie tekst będzie wyświetlany jako ######.

+0

Yay! Ale czy istnieje sposób, w jaki mogę to zrobić w kodzie? Teraz za każdym razem, gdy uruchamiam makro, formatowanie zostaje zresetowane. (ponieważ usuwam i odtwarzam arkusz w makrze.) Cel.EntireRow.NumberFormat = "[h]: mm: ss.000" Ale to właśnie dało mi "######" w komórce. – Evelyn

+0

@Evelyn - 3 rzeczy: 1) Dodałem kod potrzebny do ustawienia formatu liczb. 2) Upewnij się, że kolumna jest wystarczająco szeroka, aby zmieścić cały sformatowany tekst. Zobacz moją notatkę powyżej. 3) Zobacz odpowiedź Gilberta i zanotuj użycie "3" w funkcji "Round". W ten sposób uzyskujesz 3 miejsca dziesiętne zamiast 2. –

+0

Ah! Masz rację. Po prostu musiałem poszerzyć kolumnę. Poza tym chciałem tylko dokładność 2 w tym przypadku. Chciałem tylko, żeby był sformatowany na 3. Bardzo dziękuję za pomoc! – Evelyn

4

Zrobiłem to w programie Excel 2000.

Oświadczenie to powinno być: ms = Round(temp - Int(temp), 3) * 1000

Musisz utworzyć niestandardowy format dla komórki wynikowej [h]:mm:ss.000

4

odkryłam w programie Excel 2007 , jeśli wyniki są tabelą z osadzonego zapytania, ss.000 nie działa. Mogę wkleić wyniki zapytania (z SQL Server Management Studio) i dokładnie sformatować czas. Ale kiedy osadzam zapytanie jako połączenie danych w programie Excel, format zawsze daje .000 jako milisekundy.

-3

pierwsze reprezentują epokę czasie milisekund jako daty (zazwyczaj 1/1/1970), a następnie dodaj swój czas milisekundy podzieloną przez liczbę milisekund w ciągu jednego dnia (86400000):

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

Jeśli komórka jest odpowiednio sformatowana, powinna pojawić się czytelna dla człowieka data i godzina.

+0

Witaj George i witaj! Niestety, OP najwyraźniej poprosił o sposób na osiągnięcie tego, że komórka jest "odpowiednio sformatowana". Ich oryginalne podejście obejmuje już adresowaną część: konwersję milisekundowego znacznika czasu do formatowalnej wartości datetime. Dodatkowo, za sześć lat, to raczej stare pytanie, w które inwestujesz swój czas. Twój wkład byłby bardziej doceniany w nowszych pytaniach! – Carsten

Powiązane problemy