Wyświetlaj milisekundy w programie Excel

123

Próbuję wyświetlić milisekundy w makrze programu Excel. Mam kolumnę liczb całkowitych, które są sygnaturami czasowymi w milisekundach (np. 28095200 to 7: 48: 15.200 rano) i chcę utworzyć nową kolumnę obok niej, która zachowuje bieżącą średnią i wyświetla czas w hh:mm:ss.000formacie.

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

Spowoduje to wyświetlenie w komórce tylko „mm: ss.0”. Jednak kiedy klikam komórkę, na pasku formuły wyświetla się „gg: mm: ss”. Dlaczego brakuje godzin? Jak mogę wyświetlić godziny, minuty, sekundy i milisekundy?

Evelyn
źródło

Odpowiedzi:

217

Kliknij prawym przyciskiem myszy komórkę B1i wybierz Formatuj komórki . W trybie Niestandardowe umieść następujące informacje w polu tekstowym oznaczonym Typ :

[h]:mm:ss.000 

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

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

To powinno dać ci to, czego szukasz.

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

Ben McCormack
źródło
Yay! Ale czy jest sposób, w jaki mogę to zrobić w kodzie? Teraz za każdym razem, gdy uruchamiam makro, formatowanie jest resetowane. (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
@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 zwróć uwagę na użycie 3w Roundfunkcji. To gwarantuje, że otrzymasz 3 miejsca po przecinku zamiast tylko 2.
Ben McCormack
Ach! Masz rację. Musiałem tylko poszerzyć kolumnę. W tym przypadku chciałem mieć tylko dokładność 2. Chciałem tylko, żeby był sformatowany na 3. Wielkie dzięki za pomoc!
Evelyn
25
Właśnie odkryłem następujące rzeczy i chciałem się nimi podzielić na wypadek, gdyby inni również mieli ten sam problem: Jeśli Twój Windows / Excel jest skonfigurowany dla Niemiec, .należy go zastąpić ,, tak jak w przypadku miejsc dziesiętnych w liczbach. W przeciwnym razie program Excel będzie narzekał, że nie jest to prawidłowy format. Tak więc musi być[h]:mm:ss,000
gehho
6

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

Eric
źródło
4

Zrobiłem to w programie Excel 2000.

To stwierdzenie powinno być: ms = Round(temp - Int(temp), 3) * 1000

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

Gilbert Le Blanc
źródło
-3

Najpierw przedstaw okres milisekund jako datę (zwykle 1/1/1970), a następnie dodaj swój czas milisekundowy podzielony przez liczbę milisekund w ciągu dnia (86400000):

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

Jeśli Twoja komórka jest prawidłowo sformatowana, powinieneś zobaczyć datę / godzinę czytelną dla człowieka.

Jerzy
źródło
Cześć George i witaj! Niestety, wydawało się, że OP zawiera konkretną prośbę o sposób osiągnięcia tego, aby komórka była „odpowiednio sformatowana”. Ich oryginalne podejście obejmuje już część, do której się odnosisz: konwersję milisekundowego znacznika czasu na formatowalną wartość daty i godziny. Dodatkowo, mając sześć lat, to dość stare pytanie, na które poświęcasz swój czas. Twój wkład byłby bardziej cenny w przypadku nowszych pytań!
Carsten