Vba excel сравнение дат

Vba excel сравнение дат

Table of Contents:

Сравнение дат в Microsoft Visual Basic для приложений ничем не отличается от сравнения любого другого типа данных. Сравниваемые значения должны иметь тип «Дата». Вы можете использовать стандартные операторы сравнения: « " для "больше чем"; "> =" для "больше или равно"; "=" для "равно"; и "<>" для "не равно". Вы также можете использовать два оператора сравнения: «Есть» и «Есть».

VBA хранит дату как количество дней с 30 декабря 1899 года. Кредит: Сергей Гнатюк / iStock / Getty Images

Тип даты VBA

Полезно помнить, как VBA хранит значения даты в памяти при сравнении дат. Дата хранится в виде числа с плавающей запятой двойной точности или двойного числа. Длинная целая часть — это количество дней, положительных или отрицательных, начиная с 30 декабря 1899 года. Десятичная часть — это количество времени, прошедшее с полуночи. У даты без времени ее десятичная часть установлена ​​в ноль. Например, 1 мая 1967 года хранится как 24593.0. Это означает, что когда VBA сравнивает две даты, фактически сравниваются два числа, которые представляют дни.

Строка символов Vs. Дата

Когда вы сравниваете даты в VBA, вы должны убедиться, что сравниваемые значения имеют тип «Дата» и не являются символьными строками. Например, строка символов «01.05.1999» меньше строки символов «31.12.1900», потому что «05» предшествует «12». Преобразуйте строку символов в тип даты, используя функцию «CDate», например, «CDate (TextBox.Value)».

Полезные функции

Помимо CDate (), есть и другие полезные функции, которые вы можете использовать при сравнении дат. Функция «Date ()» предоставляет сегодняшнюю дату в качестве значения Date. Функция Now () предоставляет сегодняшнюю дату и время в качестве значения Date. Поскольку тип данных Date также включает компонент времени, вы можете извлекать только часть даты переменной при сравнении дат, используя функцию «DateValue ()», например «If submission> DateValue (deadline) Then …»

Дата Арифметика

Поскольку дата хранится как число дней с 30 декабря 1899 года, вы можете включить арифметику дат при сравнении дат в VBA. Например, если срок действия билета истекает через три дня после его приобретения, вы можете проверить билет с истекшим сроком действия с кодом VBA, аналогичным следующему:

Открытая функция истекла (покупка как Дата), как логическое значение истекло = Ложь, если покупка + 3> Дата () Затем истек = Истина Конец, Если Завершить функцию

Содержит 64-разрядные (8-байтные) значения IEEE, представляющие даты в диапазоне от 1 января 0001 года до 31 декабря 9999 года и время от 00:00:00 (полночь) до 23:59:9999999. Holds IEEE 64-bit (8-byte) values that represent dates ranging from January 1 of the year 0001 through December 31 of the year 9999, and times from 12:00:00 AM (midnight) through 11:59:59.9999999 PM. Каждое приращение представляет 100 наносекунд затраченного времени с начала 1 января 1 года по григорианскому календарю. Each increment represents 100 nanoseconds of elapsed time since the beginning of January 1 of the year 1 in the Gregorian calendar. Максимальное значение представляет 100 наносекунд перед началом 1 января 10 000 года. The maximum value represents 100 nanoseconds before the beginning of January 1 of the year 10000.

Читайте также:  Как можно перехватить смс с другого номера

Примечания Remarks

Используйте тип данных Date , содержащий значения даты, времени или даты и времени. Use the Date data type to contain date values, time values, or date and time values.

Значение по умолчанию Date : 0:00:00 (полночь) 1 января 0001 года. The default value of Date is 0:00:00 (midnight) on January 1, 0001.

Текущие дату и время можно получить из класса DateAndTime. You can get the current date and time from the DateAndTime class.

Требования к формату Format Requirements

Необходимо заключить литерал Date в символы решетки ( # # ). You must enclose a Date literal within number signs ( # # ). Необходимо указать значение даты в формате М/д/гггг, например #5/31/1993# , или гггг-ММ-дд, например #1993-5-31# . You must specify the date value in the format M/d/yyyy, for example #5/31/1993# , or yyyy-MM-dd, for example #1993-5-31# . При указании года сначала можно использовать символы косой черты. You can use slashes when specifying the year first. Это требование не зависит от языкового стандарта и настроек формата времени и даты компьютера. This requirement is independent of your locale and your computer’s date and time format settings.

Причина этого ограничения связана с тем, что значение кода никогда не должно изменяться в зависимости от языкового стандарта, который использует приложение. The reason for this restriction is that the meaning of your code should never change depending on the locale in which your application is running. Предположим, что литерал Date жестко закодирован как #3/4/1998# , что это означает 4 марта 1998 года. Suppose you hard-code a Date literal of #3/4/1998# and intend it to mean March 4, 1998. В языковом стандарте, использующем формат дд/мм/гггг, 3/4/1998 компилируется, как предполагается. In a locale that uses mm/dd/yyyy, 3/4/1998 compiles as you intend. Но предположим, что приложение развертывается во многих странах и регионах. But suppose you deploy your application in many countries/regions. В языковом стандарте, использующем формат мм/дд/гггг, ваш жестко закодированный литерал будет компилироваться как 3 апреля 1998 года. In a locale that uses dd/mm/yyyy, your hard-coded literal would compile to April 3, 1998. В языковом стандарте, использующем формат гггг/мм/дд, литерал будет недопустимым (апрель 1998, 0003) и вызовет ошибку компилятора. In a locale that uses yyyy/mm/dd, the literal would be invalid (April 1998, 0003) and cause a compiler error.

Читайте также:  Как убрать мерцание светодиодной ленты

Методы обхода проблемы Workarounds

Для преобразования литерала Date в формат языкового стандарта или пользовательский формат, передайте литерал функции Format, указав стандартный или пользовательский формат даты. To convert a Date literal to the format of your locale, or to a custom format, supply the literal to the Format function, specifying either a predefined or user-defined date format. В следующем примере это показано. The following example demonstrates this.

Кроме того, для формирования значения даты и времени можно использовать один из перегруженных конструкторов структуры DateTime. Alternatively, you can use one of the overloaded constructors of the DateTime structure to assemble a date and time value. В следующем примере создается значение для представления даты и времени 12:14 31 мая, 1993 г. The following example creates a value to represent May 31, 1993 at 12:14 in the afternoon.

Часовой формат Hour Format

Значение времени можно указать в 12- или 24-часовом формате, например #1:15:30 PM# или #13:15:30# . You can specify the time value in either 12-hour or 24-hour format, for example #1:15:30 PM# or #13:15:30# . Однако если не указать значение минут или секунд, необходимо указать AM или PM. However, if you do not specify either the minutes or the seconds, you must specify AM or PM.

Дата и время по умолчанию Date and Time Defaults

Если не указать дату в литерале даты и времени, Visual Basic задает часть даты как 1 января 0001 года. If you do not include a date in a date/time literal, Visual Basic sets the date part of the value to January 1, 0001. Если в литерал даты и времени не включено время, Visual Basic задает часть значения времени как начало дня, то есть полночь (0:00:00). If you do not include a time in a date/time literal, Visual Basic sets the time part of the value to the start of the day, that is, midnight (0:00:00).

Преобразования типов Type Conversions

При преобразовании значения Date типа String Visual Basic отображает дату в формате короткой даты, определяемом языковым стандартом времени выполнения. Время отображается в формате времени (12- или 24-часовом), определяемом языковым стандартом времени выполнения. If you convert a Date value to the String type, Visual Basic renders the date according to the short date format specified by the run-time locale, and it renders the time according to the time format (either 12-hour or 24-hour) specified by the run-time locale.

Советы по программированию Programming Tips

Вопросы взаимодействия. Interop Considerations. При взаимодействие с компонентами, которые не написаны для платформы .NET Framework (например, автоматизация или COM-объекты), необходимо помнить, что в других средах типы даты и времени несовместимы с типом Date Visual Basic. If you are interfacing with components not written for the .NET Framework, for example Automation or COM objects, keep in mind that date/time types in other environments are not compatible with the Visual Basic Date type. Если вы передаете аргумент даты и времени такому компоненту, объявите его Double , а не как Date в новом коде Visual Basic и используйте методы преобразования DateTime.FromOADate и DateTime.ToOADate. If you are passing a date/time argument to such a component, declare it as Double instead of Date in your new Visual Basic code, and use the conversion methods DateTime.FromOADate and DateTime.ToOADate.

Читайте также:  Как управлять триколором пультом от телевизора

Символы типа. Type Characters. Date не имеет символа типа литерала или символа типа идентификатора. Date has no literal type character or identifier type character. Однако компилятор обрабатывает литералы, заключенные в решетки ( # # ), как Date . However, the compiler treats literals enclosed within number signs ( # # ) as Date .

Тип платформы. Framework Type. В .NET Framework данный тип соответствует структуре System.DateTime. The corresponding type in the .NET Framework is the System.DateTime structure.

Пример Example

Переменная или константа типа данных Date содержит дату и время. A variable or constant of the Date data type holds both the date and the time. Это показано в следующем примере. The following example illustrates this.

У меня возникает проблема сравнения дат в excel. Одно значение даты вытягивается из рабочего листа и имеет форму "24-JAN-17". Другие данные объявлены в сценарии от "2017-12-31". Кто-нибудь знает решение для сравнения двух дат, поэтому я могу определить, будет ли значение даты выведено с листа позже 2018. Я включил код в текущее состояние ниже.

2 ответа

Вы работаете со строковыми литеральными значениями на листе, которые представляют даты в американском формате даты (DD-MMM-YY). Это не Date значения , это просто строки. Поэтому, когда вы пытаетесь разобрать его как строку типа "22-ЯНВ-18", например используя функцию Year , я понимаю, что она должна возвращать "2018". Но работать с разными настройками локали может быть сложно, и это осложняется тем фактом, что VBA — несмотря на настройки локали — всегда (?) Интерпретирует даты в американском формате.

Можете ли вы проверить это:

Если это не работает, попробуйте:

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

Если это работает, попробуйте:

Одно значение даты извлекается из листа и имеет форму"24-ЯНВ-17". Другие данные объявлены в сценарии из "2017-12-31".

Для сравнения двух переменных лучше всего убедиться, что они одного типа. Таким образом, попробуйте разобрать их как даты. Затем сравните:

В вашем коде > DateSerial(2016, 12, 31) во многом совпадает с Year(dt1) , но взять год кажется немного проще.

Ссылка на основную публикацию
Sony nec optiarc ad 5200a
Тип : DVD RW DL Запись на двухслойные диски Blu-ray : Нет Интерфейс : IDE Размещение : внутренний Предназначение :...
Just cause 3 как управлять вингсьютом
Some Just Cause 3 purchase options (such as Just Cause 3 XL) include a promise of exclusive day one Flame...
Katawa shoujo схема на русском
Katawa Shoujo ЛоготипРазработчикFour Leaf StudiosИздательFour Leaf Studios[d]Дата выпуска4 января 2012 [1]ЛицензияCreative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported (CC BY-NC-ND 3.0)Последняя версия1.3.1Жанрвизуальный роман,...
Sony nec optiarc ad 7203s
Товар под заказ с удаленного склада (1-2 дня) Для запроса наличия у поставщика оформите заказ. Отгрузка возможна: 1-2 дня Рекомендуем...
Adblock detector