Excel: макрос для автоматического форматирования времени (без даты) - PullRequest
3 голосов
/ 18 февраля 2010

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

РЕДАКТИРОВАТЬ:

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

Ответы [ 3 ]

3 голосов
/ 19 февраля 2010

код 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

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

1 голос
/ 19 февраля 2010

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

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

(Если A5 - это ячейка, в которой вы вводите 955)

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

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

0 голосов
/ 19 февраля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...