Vba excel сравнение времени

 

One6

Пользователь

Сообщений: 7
Регистрация: 22.09.2019

#1

12.10.2019 22:43:55

Добрый вечер! Коллеги требуется помощь. Столкнулся с такой проблемой. Хочу задать условие: При запуске Макроса 2 Ексель проверяет текущее время (сверяя его с поставленным) и в случае чего выдает по условию или MsgBox или же запускает макрос 1. На данное время (22:42) макрос почему то выдает MsgBox, вместо исполнения макроса.

Код
Sub Макрос1()Dim iLastRow As Long
iLastRow = Cells(Rows.Count, 2).End(xlUp).Row
Cells(iLastRow + 1, 2).Select
ActiveCell.FormulaR1C1 = "1"
Application.Run "Макрос2"
End Sub
Sub Макрос2()
If Now < "22:31:00" Then
MsgBox "СТОП"
Else
TimeToRun = Now + TimeValue("00:00:15")
    Application.OnTime TimeToRun, "Макрос1"
End If
End Sub

Изменено: One613.10.2019 11:31:25

 

БМВ

Модератор

Сообщений: 21378
Регистрация: 28.12.2016

Excel 2013, 2016

Вы сравниваете строки. Остальное, после правки оформления Вашего сообщения.

По вопросам из тем форума, личку не читаю.

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

1. Название темы ни о чём. Предложите новое — модераторы поменяют.
2. Код следует оформлять соответствующим тегом: ищите такую кнопку (см. скрин) и исправьте своё сообщение.

 

One6

Пользователь

Сообщений: 7
Регистрация: 22.09.2019

#4

13.10.2019 11:34:39

Цитата
БМВ написал:
Вы сравниваете строки. Остальное, после правки оформления Вашего сообщения.

Вроде все поправил, вопрос остался открытым — вчера так и не разобрался (не смог найти ответы на других форумах)

 

sokol92

Пользователь

Сообщений: 4445
Регистрация: 10.09.2017

#5

13.10.2019 14:03:59

Функция VBA Now возвращает текущую дату и время, функция Time — только время.

Код
If Time < TimeValue("22:31:00") Then

Владимир

 

One6

Пользователь

Сообщений: 7
Регистрация: 22.09.2019

Владимир добрый день! Все равно не работает — после 1 запуска не может включить заново Макрос2. (Пишет что его просто нету, хоть в VBA он так подписан)

 

БМВ

Модератор

Сообщений: 21378
Регистрация: 28.12.2016

Excel 2013, 2016

#7

13.10.2019 19:18:03

Ща Cоколик по доброте душевной подзатыльник циклом заработает :-)

Цитата
Юрий М написал:
1. Название темы ни о чём. Предложите новое — модераторы поменяют.

По вопросам из тем форума, личку не читаю.

 

sokol92

Пользователь

Сообщений: 4445
Регистрация: 10.09.2017

#8

13.10.2019 19:55:15

Цитата
One6 написал:
Все равно не работает

Не берите плохой пример с локализаторов Excel — пишите имена функций и переменных латынью.
Кроме того, всегда используйте Option Explicit. Обратите также внимание на форму записи Application.Ontime

Код
Option Explicit
Sub Macro1()
    Dim iLastRow As Long
    iLastRow = Cells(Rows.Count, 2).End(xlUp).Row
    Cells(iLastRow + 1, 2).Select
    ActiveCell.FormulaR1C1 = "1"
    Application.Run "Macro2"
End Sub
Sub Macro2()
    Dim TimeToRun
    If Time < TimeValue("19:44:00") Then
        MsgBox "СТОП"
    Else
        TimeToRun = Now + TimeValue("00:00:15")
        Application.OnTime TimeToRun, ThisWorkbook.Name & "!Macro1"
    End If
End Sub

Для МОДЕРАТОРОВ. Тема: Как в VBA сравнить текущее время с определенным.

Владимир

 

БМВ

Модератор

Сообщений: 21378
Регистрация: 28.12.2016

Excel 2013, 2016

#9

13.10.2019 22:13:14

Эх Владимир, хардкод …. :-)

Код
Const MyTime As DateTime = #7:44:00 PM#

If Time < MyTime Then

По вопросам из тем форума, личку не читаю.

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#10

14.10.2019 00:47:37

Цитата
One6 написал:
Как в VBA сравнить текущее время с определенным.

используйте операторы сравнения

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Дмитрий Попов

Пользователь

Сообщений: 21
Регистрация: 28.01.2021

#11

01.02.2021 12:10:58

Добрый день. Вопрос по теме.
Будет ли корректно работать макрос сравнения текущего времени с заданным, если я сделаю сравнение по примеру:

Код
if Time > TimeValue("23:00:00") And Time < TimeValue("06:00:00")

Т.е. ночью мне необходимо, чтобы в данный if заходила проверка

 

Jack Famous

Пользователь

Сообщений: 10848
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#12

01.02.2021 12:27:26

Цитата
Дмитрий Попов: Будет ли корректно работать

попробуйте попробовать

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#13

01.02.2021 13:59:01

Дмитрий Попов,
заменим время 23 часа и 6 часов на числа 23 и 6
а теперь назовите такое число, которое будет одновременно больше 23 и меньше 6! знаете такое? если знаете несколько, называйте все такие числа))
if Time > TimeValue(«23:00:00») Or Time < TimeValue(«06:00:00»)

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

use application.worksheetfunction.mod( date value, 1 )

You ought to understand that date and time in excel is represented by a serial number, in which 1 equals to a day, and time is repredented by decimals or fractions.

All systems base their date from day zero which us January 1, 1900 = 1, and January 2, 1900 = 2 and so on.

On the excel worksheet you cab retrieve the current date snd time using today(). On vba you use Now instead. Todays date, in «0» or «General» number formatting should show a number that starts with 42…, which represents the number of days since January 1, 1900.

Since there are 24 hours within a day, if you wish to refer to 1 hour or 1:00 AM the fraction or decimal in the serial number is equalent to 1/24. 7:00 PM = 19/24

mod() is a formula or function that will return the remainder of a division. Remember that time is represented by decimals, you do not need the actual whole numbers.

You can use the mod() formula in vba by using «application.worksheetfunction.» before any.

When you divide a date and time with 1 using mod() it will return the remainder which is the decimal portion of your date aka the time.

Comparing datevalue(«1:00 PM») will not equal CDate(«May 8, 2015 1:00 PM»)

This example teaches you how to compare dates and times in Excel VBA. Dates and times are stored as numbers in Excel and count the number of days since January 0, 1900. What you see depends on the number format.

1. Enter some numbers in column A.

Numbers

2. These numbers are dates. This is a perfect way to enter some dates without worrying about the Date format. Change the format to Date (Right click on the column A header, Format Cells and choose Date).

Result:

Dates

Note: Dates are in US Format. Months first, Days Second. This type of format depends on your windows regional settings.

Place a command button on your worksheet and add the following code lines:

3. Declare the variable i of type Integer.

Dim i As Integer

4. Add a For Next loop.

5. The Date function returns the current date without the time. Add the following code line to the loop, to highlight all the cells containing the current date (3/13/2020).

If Cells(i, 1).Value = Date Then Cells(i, 1).Font.Color = vbRed

Result:

Dates Equal To

6. Add the following code line to the loop, to highlight all the dates earlier than 04/19/2019.

If Cells(i, 1).Value < DateValue(«April 19, 2019») Then Cells(i, 1).Font.Color = vbRed

Result:

Dates Earlier Than

7. But what about times, we hear you say. They are the decimals. Switch back to General format and change the numbers to decimal numbers.

Decimal Numbers

8. Now change the format to ‘Date and Time’ format.

Date and Time Format

Result:

Dates and Times

9. If you want to highlight all cells containing the current date, we cannot use the code line at 5 anymore. Why not? Because the numbers in column A are decimal numbers now. Comparing it with Date (a whole number) would not give any match. (It would only give a match with 3/13/2020 at midnight exactly!) The following code line does work:

If Int(Cells(i, 1).Value) = Date Then Cells(i, 1).Font.Color = vbRed

Explanation: we simply use the Int function. The Int function rounds a number down to the nearest integer. This way we can get the dates without the times and compare these dates with Date.

Result:

Dates Without Times Equal To

10. Add the following code line to highlight all the cells containing times in the morning.

If (Cells(i, 1).Value — Int(Cells(i, 1).Value)) < 0.5 Then Cells(i, 1).Font.Color = vbRed

Explanation: we only need the decimals so therefore we subtract the integer part. Noon (halfway through the day) is represented as 0.5. Decimals lower than 0.5 are the times in the morning.

Result:

Times in the Morning

goba911

0 / 0 / 0

Регистрация: 24.11.2016

Сообщений: 33

1

Сравнение времени (минуты и секунды)

15.06.2017, 10:41. Показов 7402. Ответов 11

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте ещё раз Задача сравнить время в двух разных столбцах и если разница больше 5 минут то ячейка первого столбца должна быть покрашена красным цветом. Вот мой, конечно же, нерабочий код:

Visual Basic
1
2
3
4
For i = 13 To 163
    If (Cells(i, 1) - Cells(i, 2)) >= 5 Or (Cells(i, 1) - Cells(i, 2)) <= 5 Then
    Cells(i, 1).Font.Color = -16776961
Next



0



Vlad999

3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,930

15.06.2017, 10:56

2

что у вас в ячейке Cells(i, 1) ?
может так

Visual Basic
1
If ABS((Cells(i, 1) - Cells(i, 2))*24) >= 5 Then



0



goba911

0 / 0 / 0

Регистрация: 24.11.2016

Сообщений: 33

15.06.2017, 11:37

 [ТС]

3

в ячейке время в формате чч:мм:сс, если написать так:

Visual Basic
1
2
3
4
5
For i = 13 To 163
 
If Abs((Cells(i, 1) - Cells(i, 2)) * 24) >= 5 Then Cells(i, 1).Interior.Color = -16776961
    
Next

компилятор ругается на строчку «Type mismatch».



0



3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,930

15.06.2017, 11:45

4

покажите файл.



0



0 / 0 / 0

Регистрация: 24.11.2016

Сообщений: 33

15.06.2017, 12:04

 [ТС]

5



0



11482 / 3773 / 677

Регистрация: 13.02.2009

Сообщений: 11,145

15.06.2017, 12:07

6

goba911,
что у вас в ячейке Cells(i, 1) ?
Не в модуле!



0



0 / 0 / 0

Регистрация: 24.11.2016

Сообщений: 33

15.06.2017, 12:19

 [ТС]

7

Числовой формат: время. Тип: *9:00:00. Или вы что то другое имеете в виду?



0



Alex77755

11482 / 3773 / 677

Регистрация: 13.02.2009

Сообщений: 11,145

15.06.2017, 12:30

8

Лучший ответ Сообщение было отмечено goba911 как решение

Решение

Visual Basic
1
If DateDiff("s", Cells(1, 1), Cells(1, 2)) > 5 Then Cells(1, 2).Interior.ColorIndex = 4



2



goba911

0 / 0 / 0

Регистрация: 24.11.2016

Сообщений: 33

15.06.2017, 13:08

 [ТС]

9

Visual Basic
1
If DateDiff("n", Cells(i, 1), Cells(i, 2)) >= 5 Then Cells(i, 1).Interior.ColorIndex = 4

Вот так работает. Нужно было разницу написать в минутах) спасибо!



0



1 / 1 / 0

Регистрация: 06.02.2017

Сообщений: 16

15.06.2017, 13:15

10

Цитата
Сообщение от goba911
Посмотреть сообщение

Числовой формат: время. Тип: *9:00:00. Или вы что то другое имеете в виду?

если использовать Ваш код:

Цитата
Сообщение от goba911
Посмотреть сообщение

If Abs((Cells(i, 1) — Cells(i, 2)) * 24) >= 5 Then Cells(i, 1).Interior.Color = -16776961

то надо так:
If Abs((Cells(i, 1) — Cells(i, 2)) * 1440) >= 5 Then Cells(i, 1).Interior.Color = -16776961



0



es geht mir gut

11264 / 4746 / 1183

Регистрация: 27.07.2011

Сообщений: 11,437

15.06.2017, 13:28

11

Цитата
Сообщение от Дмитрий 1755
Посмотреть сообщение

то надо так:

Не надо так. Если есть готовая функция DateDiff, то на фига изготавливать грабли самостоятельно?



1



1 / 1 / 0

Регистрация: 06.02.2017

Сообщений: 16

15.06.2017, 13:43

12

Цитата
Сообщение от SoftIce
Посмотреть сообщение

Не надо так. Если есть готовая функция DateDiff, то на фига изготавливать грабли самостоятельно?

А я и не настаивал, что так надо делать. Я написал что если использовать Ваш код …
И к тому же надо исправить немного код, иначе он не верно считает
Точнее будет так:

If DateDiff(«s», Cells(i, 1), Cells(i, 2)) >= 300 Then Cells(i, 1).Interior.ColorIndex = 4



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

15.06.2017, 13:43

Помогаю со студенческими работами здесь

Ввод времени и разбивка на часы, минуты, секунды
Всем доброго дня суток.
Задача: Описать подпрограмму IncTime (H, M, S, T), которая увеличивает на…

Выбор времени в NumericUpDown в формате Часы:Минуты:Секунды
Можно ли с помощью NumericUpDown сделать выбор по принципу Часы:Минуты:Секунды?

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

Преобразование часов из десятичного числа в стандартный формат времени (часы : минуты : секунды).
Ребята помогите, как осуществить в C#
Преобразование часов из десятичного числа в стандартный…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

12

Содержание

  1. Compare Dates and Times
  2. Функция DateDiff
  3. Синтаксис
  4. Параметры
  5. Примечания
  6. Пример
  7. См. также
  8. Поддержка и обратная связь
  9. Как сравнить время с помощью Excel VBA
  10. 4 ответа
  11. VBA Excel. Функции для работы с датой и временем
  12. Функция Date
  13. Функция DateAdd
  14. Функция DateDiff

Compare Dates and Times

This example teaches you how to compare dates and times in Excel VBA. Dates and times are stored as numbers in Excel and count the number of days since January 0, 1900. What you see depends on the number format.

1. Enter some numbers in column A.

2. These numbers are dates. This is a perfect way to enter some dates without worrying about the Date format. Change the format to Date (Right click on the column A header, Format Cells and choose Date).

Note: Dates are in US Format. Months first, Days Second. This type of format depends on your windows regional settings.

Place a command button on your worksheet and add the following code lines:

3. Declare the variable i of type Integer.

4. Add a For Next loop.

5. The Date function returns the current date without the time. Add the following code line to the loop, to highlight all the cells containing the current date (3/13/2020).

6. Add the following code line to the loop, to highlight all the dates earlier than 04/19/2019.

7. But what about times, we hear you say. They are the decimals. Switch back to General format and change the numbers to decimal numbers.

8. Now change the format to ‘Date and Time’ format.

9. If you want to highlight all cells containing the current date, we cannot use the code line at 5 anymore. Why not? Because the numbers in column A are decimal numbers now. Comparing it with Date (a whole number) would not give any match. (It would only give a match with 3/13/2020 at midnight exactly!) The following code line does work:

Explanation: we simply use the Int function. The Int function rounds a number down to the nearest integer. This way we can get the dates without the times and compare these dates with Date.

10. Add the following code line to highlight all the cells containing times in the morning.

Explanation: we only need the decimals so therefore we subtract the integer part. Noon (halfway through the day) is represented as 0.5. Decimals lower than 0.5 are the times in the morning.

Источник

Функция DateDiff

Возвращает значение типа Variant (Long), указывающее на количество интервалов времени между двумя указанными датами.

Синтаксис

DateDiff(интервал, дата1, дата2, [ первый_день_недели, [ первая_неделя_года ]] )

Синтаксис функции DateDiff использует следующие именованные аргументы:

Часть Описание
интервал Обязательный аргумент. Строковое выражение, которое обозначает интервал времени, используемый для вычисления разницы значений дата1 и дата2.
дата1, дата2 Обязательный элемент; Variant (Date). Две даты, которые требуется использовать в расчете.
первый_день_недели Необязательный аргумент. Константа, задающая первый день недели. Если она не указана, им является воскресенье.
первая_неделя_года Необязательно. Константа, задающая первую неделю года. Если она не указана, первой неделею является неделя, начинающаяся 1 января.

Параметры

Аргументinterval имеет следующие параметры:

Setting Описание
yyyy Год
q Квартал
m Месяц
y День года
d День
w День недели
ww Неделя
h Часы
n Минуты
s Секунды

Аргумент первый_день_недели может принимать следующие значения:

Константа Значение Описание
vbUseSystem 0 Используются параметры API NLS.
vbSunday 1 Воскресенье (по умолчанию)
vbMonday 2 Понедельник
vbTuesday 3 Вторник
vbWednesday 4 Среда
vbThursday 5 Четверг
vbFriday 6 Пятница
vbSaturday 7 Суббота

Аргумент firstweekofyear имеет следующие параметры:

Константа Значение Описание
vbUseSystem 0 Используются параметры API NLS.
vbFirstJan1 1 Начать с недели, содержащей 1 января (по умолчанию).
vbFirstFourDays 2 Первой неделей считается та, которая содержит хотя бы четыре дня нового года.
vbFirstFullWeek 3 Первой неделей считается первая полная неделя года.

Примечания

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

Для вычисления числа дней между аргументами дата1 и дата2 используется значение «День года» («y») или «День» («d»). Если интервал задан как «День недели» («w»), DateDiff возвращает число недель между двумя датами. Если день дата1 приходится на понедельник, DateDiff считает число понедельников до дня дата2. День, соответствующий значению аргумента дата2, учитывается, а дата1 — нет.

Однако если интервал задан как «Неделя» («ww»), функция DateDiff возвращает число календарных недель между двумя датами. Для этого рассчитывается число воскресений между днями дата1 и дата2. DateDiff учитывает день дата2, если он приходится на воскресенье; день дата1 не учитывается, даже если он приходится на воскресенье.

Если значение дата1 соответствует более поздней дате, чем значение дата2, функция DateDiff возвращает отрицательное число. Аргумент первый_день_недели влияет на вычисления, если заданы значения «w» и «ww».

Если аргумент дата1 или дата2 содержит литерал даты, указанный год становится постоянной частью этой даты. Однако если аргумент дата1 или дата2 заключен в двойные кавычки (» «), а год опущен, при каждом вычислении выражения дата1 или дата2 в код вставляется текущий год. Это позволяет писать код, который можно использовать для разных лет.

При сравнении 31 декабря с 1 января следующего года функция DateDiff для года («yyyy») возвращает значение 1, не смотря на то, что разница составляет всего один день.

Если в свойстве Calendar задан григорианский календарь, аргументы дата1 и дата2 следует указывать соответствующим образом. Если используется календарь Хиджра, дата должна соответствовать ему.

Пример

В данном примере функция DateDiff отображает число дней между указанной датой и сегодняшним днем.

См. также

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

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Как сравнить время с помощью Excel VBA

У меня есть значение даты в ячейке (скажем, A1 ), и я хочу проверить с помощью VBA, больше или меньше время этой даты, чем определенное время (скажем, 13 часов). Как я могу это сделать? Я старался:

Но это не сработало.

Кроме того, если я хочу узнать разницу во времени, например, я хочу узнать разницу между 13:00:00 и 13:10:00 (что составляет 10 минут), как я могу это сделать?

4 ответа

Приведенный ниже код получает значения времени из диапазона A1 и A2 и показывает разницу в A3.Просто чтобы дать вам четкое представление о том, как это работает.

Вот полный пример: вы не можете сравнить целое число со строкой, целое значение можно сравнивать только с тем же типом данных, т.е. только целое число. Аналогичное значение времени можно сравнивать только с временными значениями .. Спасибо

Предлагаемые решения, использующие TimeValue (), могут столкнуться с ошибками округления, которые в некоторых случаях приводят к некорректным сравнениям, например, когда разница в 1E-17 в последовательных значениях делает 2 значения времени разными.

Бывает, что серийный номер Time на самом деле является Double, поэтому это тип данных с плавающей запятой, который, естественно, имеет неточности.

Лучшее решение, которое я нашел, чтобы избежать ошибок округления, — это сравнить строку формата, отформатировав ее только с теми частями даты / времени, которые важны для вашего приложения. Вы можете использовать это вместе с TimeValue, чтобы получить правильные сравнения

Примеры:

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

И несколько примеров сравнения даты и времени «равно»:

Источник

VBA Excel. Функции для работы с датой и временем

Функции для работы с датой и временем в VBA Excel. Синтаксис, параметры, спецсимволы, примеры. Функции, возвращающие текущие дату и время по системному таймеру.

Функция Date

Синтаксис

Пример

Функция DateAdd

Синтаксис

Параметры

Параметр Описание
interval Обязательный параметр. Строковое выражение из спецсимволов, представляющее интервал времени, который требуется добавить.
number Обязательный параметр. Числовое выражение, задающее количество интервалов, которые необходимо добавить. Может быть как положительным (возвращается будущая дата), так и отрицательным (возвращается предыдущая дата).
date Обязательный параметр. Значение типа Variant/Date или литерал, представляющий дату, к которой должен быть добавлен интервал.

Таблицу аргументов (значений) параметра interval смотрите в параграфе «Приложение 1».

Примечание к таблице аргументов: три символа – y, d, w – указывают функции DateAdd на один день, который необходимо прибавить к исходной дате number раз.

Пример

Функция DateDiff

Синтаксис

Параметры

Параметр Описание
interval Обязательный параметр. Строковое выражение из спецсимволов, представляющее интервал времени, количество которых (интервалов) требуется вычислить между двумя датами.
date1, date2 Обязательные параметры. Значения типа Variant/Date , представляющие две даты, между которыми вычисляется количество указанных интервалов.
firstdayofweek Необязательный параметр. Константа, задающая первый день недели. По умолчанию – воскресенье.
firstweekofyear Необязательный параметр. Константа, задающая первую неделю года. По умолчанию – неделя, в которую входит 1 января.

Таблицу аргументов (значений) параметра interval смотрите в параграфе «Приложение 1».

Примечание к таблице аргументов: в отличие от функции DateAdd , в функции DateDiff спецсимвол «w» , как и «ww» , обозначает неделю. Но расчет осуществляется по разному. Подробнее об этом на сайте разработчиков.

Параметры firstdayofweek и firstweekofyear определяют правила расчета количества недель между датами.

Таблицы констант из коллекций firstdayofweek и firstweekofyear смотрите в параграфах «Приложение 2» и «Приложение 3».

Источник

Понравилась статья? Поделить с друзьями:
  • Vba excel справка по русски
  • Vba excel список файлов в папке по маске
  • Vba excel список строк
  • Vba excel список списков
  • Vba excel список связей