Отображение миллисекунд в 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