Как сравнить «мм: сс» время пробега в 1 милю, чтобы определить, что быстрее - PullRequest
0 голосов
/ 26 апреля 2018

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

Это сравнение превращает ячейку "A1 "черный

If TimeValue("11:00") > TimeValue("10:00" Then
Range("A1").Interior.ColorIndex = 5
End If

Когда ячейка 2,14 содержит 12:00, а ячейка 3,12 содержит 11:40 Это сравнение дает мне: Ошибка времени выполнения '13': Несоответствие типов

If TimeValue(Worksheets("Individual_Stats").Cells(2, 14)) > TimeValue(Worksheets("PRT_Scores").Cells(3, 12)) Then
Range("A1").Interior.ColorIndex = 5
End If

Как я могу сравнить два мм: сс раз, чтобы увидеть, что больше или меньше?

Спасибо!

1 Ответ

0 голосов
/ 26 апреля 2018

Когда вы вызываете функцию TimeValue , она ожидает, что вы передадите ей строку, которую можно интерпретировать как значение времени.Когда вы сохраняете значение времени в ячейке рабочего листа, оно преобразует это значение в доли за 24 часа и сохраняет его как число с плавающей запятой.

Таким образом, значение «12:00» в ячейке рабочего листа равнохранится как «0.5», потому что он рассматривается как 12 часов.Когда вы затем вызываете TimeValue для значения этой ячейки, это эквивалентно TimeValue(0.5).Переданный аргумент не является строкой, которую можно интерпретировать как значение времени, и, таким образом, вы получаете несоответствие типов.

Кроме того, для сохранения значения 12 минут и нулевых секунд в ячейке необходимо ввести«00:12:00» - т.е. использовать формат чч: мм: сс.Если вы укажете только два значения, это будет интерпретироваться как формат чч: мм, который можно проверить, введя значение, например «45:30».

Чтобы реально сравнить значения, вы можете попробовать следующее (используяr1 и r2 для представления двух ячеек, которые вы хотите сравнить):

  • r1.Value < r2.Value

Это простейшее сравнение, но оно может дать неверные результаты, если любой изячейки отформатированы как текст и хранят значение времени в виде строки, а не числа с плавающей запятой

  • DateDiff("s", r1.Value, r2.Value) > 0

функция DateDiff сообщает, сколько единиц времени прошло между двумя значениями даты / времени - параметр «s» указывает, что мы хотим считать секунды.

Положительный результат указывает, что вторая дата / время были позже, чем первое.Отрицательный результат означает, что вторая дата / время были раньше, чем первая.Эта функция может успешно сравнивать значения с плавающей запятой со строковыми значениями - DateDiff("s",8.33333333333333E-03,"00:11:40") вернет -20, как и ожидалось.

  • TimeValue(r1.Text) < TimeValue(r2.Text)

При этом используется отображаемый текстячейка листа, а не сохраненное значение.Если отображаемый текст изменяется, сравнение может быть неверным.Если формат ячейки был изменен с общего на числовой, в результате чего текст изменится с «00:12:00» на «0,008333», то может произойти ошибка несоответствия типов


Все три решения могут работать в некоторыхобстоятельства, но я бы склонялся к использованию DateDiff.Подобные сравнения предназначены для этой функции

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