Excel vba cdate
Функции преобразования типа
Каждая функция приводит выражение к определенному тип данных.
Обязательный аргумент выражениеАргумент — это любое строковое выражение или числовое выражение.
Тип возвращаемого значения определяется по имени функции в соответствии со следующей таблицей:
Тип возвращаемого значения
Диапазон аргумента выражение
Любое допустимое строковое или числовое выражение.
От -922 337 203 685 477,5808 до 922 337 203 685 477,5807.
Любое допустимое выражение даты.
От -1,79769313486231E308 до
-4,94065645841247E-324 для отрицательных значений и от 4,94065645841247E-324 до 1,79769313486232E308 для положительных.
+/-79 228 162 514 264 337 593 543 950 335 для чисел без дробной части. Для чисел с 28 десятичными знаками допустимый диапазон составляет
+/-7,9228162514264337593543950335. Наименьшее допустимое ненулевое число — 0,0000000000000000000000000001.
От -32 768 до 32 767, дробная часть округляется.
От -2 147 483 648 до 2 147 483 647, дробная часть округляется.
От -3,402823E38 до -1,401298E-45 для отрицательных значений и от 1,401298E-45 до 3,402823E38 для положительных.
Результат, возвращаемый функцией CStr, зависит от аргумента выражение.
Тот же диапазон, что и Double для чисел. Тот же диапазон, что и в качестве строки для нечисловых значений.
Если передаваемое функции выражение находится за пределами диапазона типа данных, в который оно преобразуется, возникает ошибка.
Как правило, функции преобразования типов используются в тексте программ для того, чтобы указать, что результатом той или иной операции должны стать данные определенного типа, а не типа, заданного по умолчанию. Например, с помощью функции CCur можно принудительно перейти к вычислениям в денежном формате в тех случаях, в которых обычно используются действия с числами с обычной точностью, двойной точностью или с целыми числами.
Функции преобразования типа данных следует использовать вместо функции Val для преобразования типов данных в приложениях, поддерживающих различные региональные стандарты. Например, при использовании функции CCur десятичные разделители, разделители групп разрядов и параметры денежных единиц распознаются в соответствии с языковыми и региональными параметрами компьютера.
Если дробная часть целого числа строго равна 0,5, функции CInt и CLng всегда округляют результат до ближайшего четного числа. Например, 0,5 округляется до 0, а 1,5 — до 2. В отличие от функций CInt и CLng, в функциях Fix и Int дробная часть не округляется, а отбрасывается. Кроме того, функции Fix и Int всегда возвращают значение того же типа, что и переданное им выражение.
Для определения возможности преобразования даты в дату или время используется функция IsDate. Функция CDate распознает литералы даты и времени, а также некоторые числа, которые находятся в диапазоне допустимых дат. При преобразовании числа в дату преобразуется целая часть числа. Дробная часть преобразуется во время суток, начиная с полуночи.
Функция CDate распознает форматы даты в соответствии с параметрами языковые стандарты системы. Правильное определение дня, месяца и года может быть недоступно, если оно предоставляется в формате, отличном от одного из распознаваемых параметров даты. Кроме того, не удается распознать длинный формат даты, если он содержит строку дня недели.
Функция CVDate предназначена для обеспечения совместимости с предыдущими версиями Visual Basic. Синтаксис функции CVDate идентичен синтаксису функции CDate, однако функция CVDate возвращает не результат типа Date, а результат типа Variant с подтипом Date. Поскольку теперь реализован встроенный тип Date, необходимость в функции CVDate отпадает. Того же результата можно добиться, преобразовав выражение в тип Date и присвоив это значение переменной типа Variant. Этот способ позволяет преобразовать все прочие встроенные типы в эквивалентные им подтипы Variant.
Примечание: Функция CDec не возвращает отдельный тип данных. Вместо этого она всегда возвращает результат типа Variant, значение которого преобразовано в подтип Decimal.
Урок 16 по VBA — функции для работы с типами данных
Описанные ниже функции позволяют преобразовать переданный параметр, который может быть или числом или строкой к заданному типу данных vba. Отличительная особенность данных функций vba преобразования типов от остальных – префикс C (от слова Convert), после которого следует краткое имя типа данных, к которому происходит преобразование (например, Bool – Boolean, Cur – Currency, и так далее).
CBool (par) – Преобразование к типу Boolean. Если параметр par будет отличаться от 0, то функция вернет значение true, в противном случае – false.
CByte (par) – Преобразование к типу Byte. Параметр par должен содержать числовое значение или строку, которые являются числом без знака в диапазоне значений от 0 до 255. Условия преобразования:
- Если значение дробной части меньше 0.5, то она будет отброшена. В случае, если дробная часть больше 0.5 – к целой части добавится единица. Если же дробная часть ровна 0.5, то произойдет округление до ближайшего четного числа.
- Если переданный параметр является строкой, то он должен содержать только цифры, в противном случае произойдет генерация ошибки.
- В случае, если параметр содержит отрицательное число или число, которое больше 255, то также произойдет генерация ошибки. (vba преобразование типов)
CCur (par) – Преобразование к типу vba Currency. Передаваемый параметр должен содержать значение в диапазоне от -922 337 203 685 477.5808 до 922 337 203 685 477.5807.
- Если параметр содержит дробное число, содержащее больше 4 знаков в дробной части, то функция округляет его до четырех десятичных знаков.
- Если параметр не входит в допустимый диапазон, то произойдет генерация ошибки.
CDate (par) – Преобразует переданный параметр vba в тип дата.
CDbl (par) – Преобразование к типу vba Double. Переданный параметр должен содержать любое числовое значение или строку, которые входят в диапазон от -1.79769313486232E308 до -4.94065645841247E-324 для отрицательных значений, и от 4.94065645841247E-324 до 1.79769313486232E308 для положительных значений.
- Если значение переданного параметра не попадает в допустимый диапазон, то произойдет ошибка. (vba преобразование типов)
- Если параметр является строкой, содержащей не только цифры, то произойдет ошибка.
CDec (par) – Преобразование к типу vba Decimal. Параметр должен содержать любое числовое или строковое значение, входящее в диапазон представляющий целое число в диапазоне +/-79 228 162 514 264 337 593 543 950 335 или смешанное с не более чем 28 цифрами в дробной части в диапазоне +/-7.9228162514264337593543950335. Минимальным возможным ненулевым числом является 0.0000000000000000000000000001.
- Если значение параметра не входит в допустимый диапазон – произойдет генерация сообщения об ошибке.
- Если передаваемый параметр является строкой и содержит не только цифры, то произойдет генерация ошибки.
CInt (par) – Преобразование к типу vba Integer. Передаваемый параметр должен входить в диапазон чисел от -32768 до 32767.
- Если значение параметра не входит в допустимый диапазон – произойдет генерация сообщения об ошибке. (vba преобразование типов)
- Если передаваемый параметр является строкой и содержит не только цифры, то произойдет генерация ошибки.
- Если передаваемый параметр содержит дробную часть, которая равна 0.5, то произойдет округление до ближайшего четного числа.
CLng (par) – Преобразование к типу vba Long, допустимы диапазон передаваемого параметра числа от -2147483648 до 2147483647.
- Если значение параметра не входит в допустимый диапазон – произойдет генерация сообщения об ошибке.
- Если передаваемый параметр является строкой и содержит не только цифры, то произойдет генерация ошибки.
- Если передаваемый параметр содержит дробную часть, которая равна 0.5, то произойдет округление до ближайшего четного числа.
CSng (par) – Преобразование к типу vba Single. Допустимый диапазон — число от -3.402823E8 до -1.401298E-45 для отрицательных значений и от 1.401298E-45 до 3.402823E8 для положительных значений.
- Если передаваемый параметр содержит значение, которое меньше минимального допустимого значения, то функция вернет значение 0.
- Если параметр содержит значение, которое превышает максимально допустимое, то произойдет генерация ошибки. (vba преобразование типов)
- Если передаваемый параметр является строкой и содержит не только цифры, то произойдет генерация ошибки.
- Если число знаков дробной части в параметре выходит за пределы допустимого диапазона, то функция усекает ее (дробную часть).
CStr (par) – Преобразует переданный параметр в строковое значение.
Str (par) — Аналогично функции CStr, но перед положительными числами вставляется пробел.
CVar (par) – Преобразует переданы параметр в тип vba Varint.
CVDate (par) – Фактически, функция аналогична CDate, и используется только для совместимости.
Val (par) — Извлекает из переданного параметра только цифры.
TypeName (par) – Функция возвращает имя типа данных vba, для переданного параметра.
Следующие функции преобразования vba возвращают логические значения true или false, и предназначены для проверки переданного параметра на конкретный тип данных.
IsNumeric (par) — Число
IsDate (par) — Дата
IsArray (par) — Массив
IsEmpty (par) – Тип Empty
IsError (par) — Ошибка
IsMissing (par) – Необязательный параметр, переданный в процедуру
IsNull (par) – Пустое значение
IsObject (par) — Объект
Для преобразования числового значения к восьмеричному или шестнадцатеричному виду, применяются следующие функции:
Hex (par) – Шестнадцатеричный вид.
Oct (par) – Восьмеричный вид.
Помимо данных функций преобразования типов vba, для формирования восьмеричного или шестнадцатеричного вида числа, можно использовать следующий формат при записи:
&O – Буква O говорит, что мы хотим прописать восьмеричное значение, которое следует после символа O.
&HA — Буква H говорит, что мы хотим прописать шестнадцатеричное значение, которое следует после символа H.
Так как большая часть приведенных функций используется и в языке VBScript, то примеры с ними можно посмотреть в статьях «Урок 4 по VBScript: преобразование типов данных» и «Урок 10 по VBScript: Функции — математические и для работы с подтипами данных».
Спасибо за внимание. Автор блога Владимир Баталий
Convert String to Date with VBA CDate
The VBA Tutorials Blog
Introduction — CDate
This VBA tutorial shows you how to convert a data type from a string to a date with the VBA Type Conversion function CDate. Once converted to a date, you’ll be able to use date arithmetic and apply a variety of VBA functions to the dates.
This is Part 3 of a new tutorial series showing you how to convert between VBA data types.
Part 1: Convert string to integer
Part 2: Convert number to string
Example — CDate
Convert a String to a Date
Make powerful macros with our free VBA Developer Kit
It’s easy to copy and paste a macro like this, but it’s harder make one on your own. To help you make macros like this, we built a free VBA Developer Kit full of pre-built macros so you can master file I/O, arrays, strings and more — grab a copy below.
Tutorial — CDate
The function ConvertToDate does all the fun work in this VBA tutorial. You call the function and pass it a string or long integer data type representing the serial equivalent of the date. In the procedure DemoCDate, I chose to pass it a string but I could have passed a long. For example, I could have used the command vDate = ConvertToDate(41680) to yield a date in the format “2/10/2014.”
If the conversion to a date succeeds, your data type will be changed to a variant with subtype “Date” and you can use it however you please. You can add dates, subtract dates, check to see what day of the week the date is on and more!
The following Watch window illustrates the data type conversion.
Successful conversion from string to Variant/Date
Like my convert number to string demo, if the conversion fails, a message box will pop up letting you know it failed and your macro execution will abort.
Convert a String in yyyymmddhhmmss Format to a Date
It’s pretty common for people to embed DTS (date/time stamps) into strings, like file names. If you have a DTS in the format yymmddhhmmss or yyyymmddhhmmss, have no fear! You can convert a string in this format to a date date type with the following macro:
The dollar sign ($) in the Format operation just says to return the result of the Format operator as a string — it’s larger unnecessary in this context, but I included it anyway. This VBA macro successfull converts the string to a date:
Converting strings to dates in VBScript
The CDate function works perfectly fine in VBScript, but I’m going to go ahead and warn you. If you need to convert a string in the yyyymmddhhmmss date/time stamp format to a date using VBScript, the above macro will NOT work since VBScript has no Format() operation. Instead, you’ll need to pass your string to the following VBScript-compatible function:
I found myself having to do a VBScript string to date conversion the other day, and this function worked like a charm.
Application Ideas — CDate
If you’re reading a bunch of dates from a text file or CSV file, the ability to convert them to dates is nice. You can check the differences between the dates by subtracting them and you can apply worksheet functions like WEEKDAY() or WEEKNUM() to determine what day of the week or week of the year the date falls on.
Once converted to a date, use the dates in all kinds of conditional statements and mathematical expressions.
The CDate Function is just one of several VBA data type conversion functions. If you’re looking for more string conversion articles, check out my tutorials on
For more VBA tips, techniques, and tactics, subscribe to our VBA Insiders email series using the form below.
Oh, and if you have a question, post it in our VBA Q&A community.
The best free VBA training on the web
I see people struggling with Excel every day and I want to help. That’s why I’m giving away my 90-days to Master VBA eCourse and my entire personal macro library for free.
Over 2 million people use our VBA tutorials each year to help automate their work. Are you ready to reclaim your time, too? Grab our VBA Cheat Sheets and you’ll be writing macros like a professional. With over 180 tips and 135 macro examples, they include everything you need to know to become a great VBA programmer.
How to dou
Строки
Table of Contents:
Функция IsDate от VBA якобы говорит вам, можно ли интерпретировать текстовую строку как дату. Например, все следующие выражения оцениваются как True:
В двух последних примерах обратите внимание, что IsDate не придирчивы к порядку дня и месяца. Обе эти строки могут быть интерпретированы как дата, поэтому IsDate возвращает True (независимо от настроек формата вашей системной даты).
Ниже приведена информация из статьи поддержки Microsoft:
Функции даты VBA, IsDate, Format, CDate и CVDate используют функцию, найденную в OLE Automation (OleAut32. Dll). Эта функция выполняет поиск всех возможных форматов дат путем кратковременного выделения каждого из разделенных значений в строке, представляющей дату, и возвращает логическое значение, указывающее, может ли вход быть представлен как дата.
Это важно помнить при использовании функции для интерпретации даты, содержащей 2-значный год. В разных локалях используются разные форматы дат (т. Е. Мм / дд / гггг, гг / мм / дд, « ДД MMM YY « , « YY MMM DD « и т. Д.), И поэтому функция пробует цифры во всех позициях до тех пор, пока функция не найдет действительную дату или не исчерпает всех возможностей.
Только потому, что IsDate распознает строку как дату, это не означает, что строка может быть надежно преобразована в дату. В некоторых случаях результат неоднозначен. Например, как насчет этого выражения?
29 февраля 2001 года не является действительной датой. Однако это выражение возвращает True, поскольку 1 февраля 1929 года (и 2 января 1929 года) являются действительными датами. И те же даты в 2029 году.
Поиск документации IsDate оказался пустым. Исходя из тестирования, IsDate принимает любое из следующих символов разделителя: косую черту (/), дефис (-), запятую (,), точку (.) И пробел.
Следовательно, следующие выражения возвращают True:
Но то есть эта аномалия: Следующие выражения возвращают True:
Однако, это неявно, это выражение возвращает False:
Предположим, что вы создали UserForm с InputBox, где пользователь вводит дату. Должно быть ясно, что использование IsDate для проверки записи не очень надежное.
Вещи становятся еще более запутанными, когда вы понимаете, что IsDate также охватывает значения времени. (Нет соответствующей функции IsTime.) Таким образом, все выражения возвращаются True:
Эти выражения возвращают False:
Важно отметить, что IsDate не проявите все эти причуды, когда вы передаете аргумент Range. Например:
Кажется, что IsDate отлично надежно идентифицирует ячейки, содержащие дату или время. Например, он не идентифицирует ячейку, которая содержит 5. 1 в качестве даты. Если вашему коду необходимо определить, можно ли интерпретировать строку как дату, лучшим решением является поместить эту строку в ячейку, а затем написать код для проверки содержимого ячейки.
Разница между DateValue и CDate в VBA
Я новичок в VBA и работаю над модулем для чтения данных из электронной таблицы и вычисления значений на основе дат из электронной таблицы. Я читаю переменные как строку, а затем в данный момент изменяю значения на дату, используя CDate. Однако я только что наткнулся на DateValue, и мне было интересно, в чем разница между этими двумя функциями и какой из них лучше использовать.
3 Ответа
DateValue вернет только дату. CDate сохранит дату и время:
Аналогично вы можете использовать TimeValue для возврата только части времени:
Кроме того, как говорит guitarthrower, DateValue (и TimeValue ) будут принимать только параметры String , в то время как CDate также может обрабатывать числа. Чтобы эмулировать эти функции для числовых типов, используйте CDate(Int(num)) и CDate(num — Int(num)) .
CDate преобразует число или текст в дату.
DateValue преобразует дату в текстовом формате (только) в дату.
И CDate, и DateValue, при использовании в vba, преобразуют значение в дату (формат dd/mm/yyyy):
Один)
LstrDate = «July 24, 2014»
LDate = CDate(LstrDate)
Два)
LDate = DateValue(«July 24, 2014»)
Оба возвращают один и тот же результат.
Однако DateValue возвращает серийный номер даты, если он используется на уровне приложения (электронная таблица)
Похожие вопросы:
Функция формулы =DATEVALUE и VBA в DateValue() обеспечивают исключительные результаты. Как я могу отформатировать дату в VBA, чтобы получить ту же сериализацию, что и при использовании =DATEVALUE.
Я вычисляю с датами в MS Access, используя VBA. Это прекрасно работает, когда у меня есть две даты в одной и той же форме (например, 2016-01-21), но не тогда, когда мне сначала нужно изменить строку.
У меня есть часть моего кода: o = Workbooks(repfile).Worksheets(1).Range(b:b).Cells.SpecialCells(xlCellTypeConstants).Count For k = o To 2 Step -1 dte = CDate(Replace(Cells(k, 8), ., /)) Cells(k, 8).
Дата хранится в виде строки в Access. Я не могу применить предложенные решения, такие как DateValue и Cdate. Я попытался переформатировать, чтобы добавить разделитель, но это дает мне.
Мой код ниже возвращает 00:00:00, если переданное значение DateValue равно null vba: Public Function forDate(ByVal DateValue As String) As Date Dim DoDate As Date If Not IsNull(DateValue) And.
Я уже некоторое время работаю с Excel, но никогда не читал, в чем разница между этими двумя операторами (независимо от того, что я использовал оба) := и = в Excel VBA
Я использую Excel 2010 и пишу сценарий VBA, который должен что-то сделать, если значение ячейки находится между сейчас и через 24 часа. Я просмотрел десятки тем и не смог найти способ эффективно.
Я только начал изучать VBA три недели назад, так что не стесняйтесь критиковать мой код. Я хотел бы использовать оператор IIF , чтобы сделать то, что находится внутри оператора If: Dim.
Я просто хочу спросить, как VB.NET perform-это преобразование даты из строки. В настоящее время я разрабатываю представление базы данных и преобразую дату в формат MMddyyyy , но я беспокоюсь, что.
Когда я использую формулу datevalue (01/01/1900), я получаю 1 и форматирую как дату, которая отображается как 01/01/1900 Когда я использую VBA .Range(A1).Value = DateValue(01/01/1900) он.