получение неправильного значения при работе со временем в vba Excel

#excel #vba

#excel #vba

Вопрос:

Я пытаюсь выполнить некоторые вычисления на моей таблице Excel, где я использую макросы, я имею дело со значениями времени.

  h2 = rg.Cells(i, 5) 'time value
 h1 = rg.Cells(i, 4) 'time value
 h3 = (TimeValue("23:59") - h1)   (h2 - TimeValue("23:59"))
  

проблема заключается, например, в том, что h1="20:00" и h2="07:55" h3 должны быть 11:55 , но это дает 12:05

Кстати, H1 это время входа и H2 время ожидания, поэтому h2 на следующий день, и я пытаюсь вычислить разницу во времени.

введите описание изображения здесь

с уважением

Комментарии:

1. Что вы пытаетесь получить на h3?? ваши переменные объявлены как Date ?

2. да, переменные являются значениями времени, и это работает отлично, за исключением того, что они получают неправильные значения

3. оно выдает неправильное значение, оно должно быть 11: 55, а не 12: 05

Ответ №1:

Поскольку H2, как вы указали, на следующий день после H1, вам необходимо учесть это при расчете.

Итак, чтобы вычислить разницу между H1 и H2, сначала к H2 следует добавить 24 часа.

   h2     1dy
07:55   24:00 = 31:55

                  v
                         -h1
                31:55 - 20:00 = 11:55
  

Один день, представленный как время, является 1 — поскольку время измеряется как десятичная доля дня.

Итак, среди многих других способов сделать это, чтобы получить приведенное выше, ваша формула должна быть:

h3 = (h2 1) - h1

Комментарии:

1. давайте предположим, что h1 = 12:00 и h2 = 12:00 следующего дня, используя вашу формулу, вернет 00, тогда как оно должно возвращать 24 часа

2. Ну .. да. Конечно. Если вы хотите, чтобы в нем учитывалась не только дата, но и время, тогда вам нужно убедиться, что ячейки также содержат даты. Если оба содержат даты, то это просто случай вычитания более раннего времени из более позднего.

3. хм, нет, даты нет, но я уверен, что h2 на следующий день, так что нет никакого способа?

4. Извините, теперь я понимаю ваши рассуждения. Формула на самом деле работает как есть и содержит 1 целый день (24 часа), проблема в том, что Excel отформатирует ее как TIME и покажет только элемент TIME. Переформатируйте его в [hh]:mm вместо hh:mm , и оно отобразит 24:00

5. При полном отсутствии времени в ячейках (введенном или отображаемом) и формуле = (h2 1) - h1 ? Это отлично работает на моем рабочем столе.

Ответ №2:

На самом деле правильный ответ — минус 11:05:00, но Excel не обрабатывает отрицательное время. Добавление одного дня к минус 11:05::00 равно положительным 12:05:00.