Отображение миллисекунд в Excel


123

Я пытаюсь отобразить миллисекунды в макросе Excel. У меня есть столбец целых чисел, который представляет собой временные метки в миллисекундах (например, 28095200 - 7:48:15 200 am), и я хочу создать рядом с ним новый столбец, в котором хранится текущее среднее значение и отображается время в hh:mm:ss.000формате.

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

В ячейке отображается только «мм: сс.0». Тем не менее, когда я нажимаю на ячейку, в строке формул отображается «чч: мм: сс». Почему не хватает часов? Как я могу показать часы, минуты, секунды и миллисекунды?

Ответы:


217

Щелкните правой кнопкой мыши Cell B1и выберите Format Cells . В поле Custom введите следующее в текстовое поле Type :

[h]:mm:ss.000 

Чтобы установить это в коде, вы можете сделать что-то вроде:

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

Это должно дать вам то, что вы ищете.

ПРИМЕЧАНИЕ. Для специально отформатированных полей часто требуется, чтобы ширина столбца была достаточно широкой для всего содержимого форматированного текста. В противном случае текст будет отображаться как ######.


Ура! Но есть ли способ сделать это в коде? Теперь каждый раз, когда я запускаю макрос, форматирование сбрасывается. (потому что я удаляю и воссоздаю лист в макросе.) Cel.EntireRow.NumberFormat = "[h]: mm: ss.000" Но это только дало мне "######" в ячейке.
Evelyn

@Evelyn - 3 вещи: 1) Я добавил код, необходимый для установки числового формата. 2) Убедитесь, что ваш столбец достаточно широкий, чтобы уместить весь форматированный текст. См. Мою заметку выше. 3) См. Ответ Гилберта и обратите внимание на использование 3в Roundфункции. Это гарантирует, что вы получите 3 десятичных разряда вместо двух
Бен МакКормак,

Ах! Ты прав. Мне просто нужно было расширить колонну. Кроме того, в этом случае мне нужна была только точность 2. Просто хотел отформатировать на 3. Спасибо за помощь!
Evelyn

25
Я только что обнаружил следующее и хотел поделиться им на случай, если у других возникнет такая же проблема: если ваш Windows / Excel настроен для Германии, .необходимо заменить его на ,, как и для десятичных знаков в числах. В противном случае Excel будет жаловаться, что это недопустимый формат. Так что это должно быть[h]:mm:ss,000
gehho

6

В Excel 2007 я обнаружил, что если результаты представляют собой таблицу из встроенного запроса, ss.000 не работает. Я могу вставить результаты запроса (из SQL Server Management Studio) и отлично отформатировать время. Но когда я встраиваю запрос как соединение данных в Excel, формат всегда дает .000 в качестве миллисекунд.


4

Я сделал это в Excel 2000.

Это заявление должно быть: ms = Round(temp - Int(temp), 3) * 1000

Вам необходимо создать собственный формат для ячейки результата [h]:mm:ss.000


-3

Сначала представьте эпоху миллисекунды как дату (обычно 01.01.1970), затем добавьте миллисекунду, разделенную на количество миллисекунд в дне (86400000):

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

Если ваша ячейка правильно отформатирована, вы должны увидеть удобочитаемую дату / время.


Привет Джордж и добро пожаловать! К сожалению, OP, похоже, специально просил способ добиться того, чтобы ячейка была «правильно отформатирована». Их первоначальный подход уже охватывает ту часть, к которой вы обращаетесь: преобразование миллисекундной отметки времени в форматируемое значение даты и времени. Кроме того, с шестью годами работы это довольно старый вопрос, на который вы тратите свое время. Мы будем благодарны за ваш вклад при ответе на новые вопросы!
Carsten
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.