One6 Пользователь Сообщений: 7 |
#1 12.10.2019 22:43:55 Добрый вечер! Коллеги требуется помощь. Столкнулся с такой проблемой. Хочу задать условие: При запуске Макроса 2 Ексель проверяет текущее время (сверяя его с поставленным) и в случае чего выдает по условию или MsgBox или же запускает макрос 1. На данное время (22:42) макрос почему то выдает MsgBox, вместо исполнения макроса.
Изменено: One6 — 13.10.2019 11:31:25 |
||
БМВ Модератор Сообщений: 21378 Excel 2013, 2016 |
Вы сравниваете строки. Остальное, после правки оформления Вашего сообщения. По вопросам из тем форума, личку не читаю. |
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
1. Название темы ни о чём. Предложите новое — модераторы поменяют. |
One6 Пользователь Сообщений: 7 |
#4 13.10.2019 11:34:39
Вроде все поправил, вопрос остался открытым — вчера так и не разобрался (не смог найти ответы на других форумах) |
||
sokol92 Пользователь Сообщений: 4445 |
#5 13.10.2019 14:03:59 Функция VBA Now возвращает текущую дату и время, функция Time — только время.
Владимир |
||
One6 Пользователь Сообщений: 7 |
Владимир добрый день! Все равно не работает — после 1 запуска не может включить заново Макрос2. (Пишет что его просто нету, хоть в VBA он так подписан) |
БМВ Модератор Сообщений: 21378 Excel 2013, 2016 |
#7 13.10.2019 19:18:03 Ща Cоколик по доброте душевной подзатыльник циклом заработает
По вопросам из тем форума, личку не читаю. |
||
sokol92 Пользователь Сообщений: 4445 |
#8 13.10.2019 19:55:15
Не берите плохой пример с локализаторов Excel — пишите имена функций и переменных латынью.
Для МОДЕРАТОРОВ. Тема: Как в VBA сравнить текущее время с определенным. Владимир |
||||
БМВ Модератор Сообщений: 21378 Excel 2013, 2016 |
#9 13.10.2019 22:13:14 Эх Владимир, хардкод ….
По вопросам из тем форума, личку не читаю. |
||
Ігор Гончаренко Пользователь Сообщений: 13746 |
#10 14.10.2019 00:47:37
используйте операторы сравнения Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
Дмитрий Попов Пользователь Сообщений: 21 |
#11 01.02.2021 12:10:58 Добрый день. Вопрос по теме.
Т.е. ночью мне необходимо, чтобы в данный if заходила проверка |
||
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#12 01.02.2021 12:27:26
попробуйте попробовать Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||
Ігор Гончаренко Пользователь Сообщений: 13746 |
#13 01.02.2021 13:59:01 Дмитрий Попов, Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
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.
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:
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:
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:
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.
Result:
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:
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:
goba911 0 / 0 / 0 Регистрация: 24.11.2016 Сообщений: 33 |
||||
1 |
||||
Сравнение времени (минуты и секунды)15.06.2017, 10:41. Показов 7402. Ответов 11 Метки нет (Все метки)
Здравствуйте ещё раз Задача сравнить время в двух разных столбцах и если разница больше 5 минут то ячейка первого столбца должна быть покрашена красным цветом. Вот мой, конечно же, нерабочий код:
0 |
Vlad999 3827 / 2254 / 751 Регистрация: 02.11.2012 Сообщений: 5,930 |
||||
15.06.2017, 10:56 |
2 |
|||
что у вас в ячейке Cells(i, 1) ?
0 |
goba911 0 / 0 / 0 Регистрация: 24.11.2016 Сообщений: 33 |
||||
15.06.2017, 11:37 [ТС] |
3 |
|||
в ячейке время в формате чч:мм:сс, если написать так:
компилятор ругается на строчку «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,
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 как решение Решение
2 |
goba911 0 / 0 / 0 Регистрация: 24.11.2016 Сообщений: 33 |
||||
15.06.2017, 13:08 [ТС] |
9 |
|||
Вот так работает. Нужно было разницу написать в минутах) спасибо!
0 |
1 / 1 / 0 Регистрация: 06.02.2017 Сообщений: 16 |
|
15.06.2017, 13:15 |
10 |
Числовой формат: время. Тип: *9:00:00. Или вы что то другое имеете в виду? если использовать Ваш код:
If Abs((Cells(i, 1) — Cells(i, 2)) * 24) >= 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 |
то надо так: Не надо так. Если есть готовая функция DateDiff, то на фига изготавливать грабли самостоятельно?
1 |
1 / 1 / 0 Регистрация: 06.02.2017 Сообщений: 16 |
|
15.06.2017, 13:43 |
12 |
Не надо так. Если есть готовая функция 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 |
Помогаю со студенческими работами здесь Ввод времени и разбивка на часы, минуты, секунды Выбор времени в NumericUpDown в формате Часы:Минуты:Секунды Ошибка с конвертированием времени из секунд в день, час, минуты, секунды Преобразование часов из десятичного числа в стандартный формат времени (часы : минуты : секунды). Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 12 |
Содержание
- Compare Dates and Times
- Функция DateDiff
- Синтаксис
- Параметры
- Примечания
- Пример
- См. также
- Поддержка и обратная связь
- Как сравнить время с помощью Excel VBA
- 4 ответа
- VBA Excel. Функции для работы с датой и временем
- Функция Date
- Функция DateAdd
- Функция 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».
Источник