2010-02-18 2 views
3

Я ищу простой макрос для указания ячеек как типа «время» и ввода только числа (например, «955») будет форматировать это (и распознавать as) «hh: mm». Другими словами, набрав «955», ячейка интерпретирует значение «09:55», тогда как все, что я могу сделать, это прямо сейчас интерпретируется как «1902-08-12 00:00:00» (скорее всего, 955 номер дня за 1902-08-12).Excel: макрос для автоматического форматирования времени (без даты)

EDIT:

Часть необходимости это позволить вычисление времени после типизации (например, вычитать два значения времени, чтобы получить отрезок времени, или добавить несколько timespans, чтобы получить в общей сложности).

+0

Это похоже на «как использовать <специальное программное обеспечение>». Где программирование? – 2010-02-18 21:10:52

+0

Извините, я пересмотрел его. Теперь это «как мне написать »? – MPelletier

+0

@Roger Pate: программирование в электронной таблице или в коде по-прежнему программируется. В пользовательских форматах используется много псевдокодов, и их трудно ориентировать. – guitarthrower

ответ

3

код VBA:

Dim val As String 
val = myCell.Value 
Dim newval As String 
If Len(val) = 2 Then 
    newval = "00:" & val 
ElseIf Len(val) = 3 Then 
    newval = "0" & Left(val, 1) & ":" & Right(val, 2) 
ElseIf Len(val) = 4 Then 
    newval = Left(val, 2) & ":" & Right(val, 2) 
Else 
    newval = "Not a valid time" 
End If 
myCell.Value = newval 

Этот код не обнаружить, если две последние цифры допустимое время (более 59 минут), но в противном случае он должен обрабатывать большинство случаев.

Вам также необходимо добавить случай, если кто-то вводит цифру в 1 разряд, т.е. 1 через 9 минут после полуночи.


Если вы хотите, чтобы быть отформатирован как фактическое время (типа дата-время), а затем изменить форматирование ячейки в формате чч: мм. Значение, введенное, например, 955, должно быть обработано для получения доли дня.

псевдокод:

(left(myCell,len(myCell)-2) + (right(myCell,2)/60))/24 

Это дает правильное десятичное значение для того, как большую часть дня прошло, и, таким образом, будет отображаться как собственное «Время» в ячейке с чч: мм форматирование.

0

По какой-то причине Excel не позволяет использовать «:» в вашем пользовательском формате. Но если вы в порядке с другим разделителем, скажем, тире «-», вы можете просто создать собственный формат: ## - ##
Конечно, ваше время должно быть в формате 24 часа.

В качестве альтернативы вы можете сначала ввести все свое время точно так же, как цифры (или лучше, как текст, если вы не хотите потерять нулевые нули). Затем запустите свой скрипт, чтобы вставить точки с запятой между часами и минутами.

+0

Я вижу ... но это не делает это время как таковое, поэтому я не могу добавить их (ну, я мог бы, но формула не была бы очень чистой). Наверное, я должен был быть более конкретным. – MPelletier

1

Это не VBA, а формула, которая изменит форматирование. Вы можете включить это в VBA, если хотите, но должны помочь в качестве точки прыжка.

=TIMEVALUE(IF(LEN(A5)=3,"0"&LEFT(A5,1)&":",LEFT(A5,2)&":")&RIGHT(A5,2)) 

(Если А5 ячейку, в которой вы вводите 955)

(Кроме того, убедитесь, форматировать формулу ячейки в качестве желаемого форматирования времени.)

Я могу помочь с кодом, если необходимо. Просто отправь сообщение.

Смежные вопросы