Excel vba если в ячейке дата

Return to VBA Code Examples

IsDate Description

Returns True if the expression is a valid date. Otherwise, it returns False.

Simple IsDate Examples

Sub IsDate_Example()
    MsgBox IsDate("4/12/2019")
End Sub

This will return True.

MsgBox IsDate("4122019")

Result: False

IsDate Syntax

In the VBA Editor, you can type  “IsDate(” to see the syntax for the IsDate Function:

The IsDate function contains an argument:

Expression: An expression that will be evaluated.

Examples of Excel VBA IsDate Function

examples of various valid date:

MsgBox IsDate("8/22/2019")
MsgBox IsDate("8 22 19")
MsgBox IsDate("Aug 22 19")
MsgBox IsDate("8,22,2019")
MsgBox IsDate("8-22-19")
MsgBox IsDate("8/22")
MsgBox IsDate("8-22")

Result: True

examples of invalid date:

MsgBox IsDate("8.22.2019")
MsgBox IsDate("8222019")
MsgBox IsDate("Aug")
MsgBox IsDate("2019")

Result: False

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
vba save as

Learn More!

Проверка переменных и выражений с помощью встроенных функций VBA Excel: IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject.

Проверка переменных и выражений

Встроенные функции VBA Excel — IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject — проверяют значения переменных и выражений на соответствие определенному типу данных или специальному значению.

Синтаксис функций для проверки переменных и выражений:

Expression — выражение, переменная или необязательный аргумент для IsMissing.

Все функции VBA Excel для проверки переменных и выражений являются логическими и возвращают значение типа Boolean — True или False.

Функция IsArray

Описание функции

Функция IsArray возвращает значение типа Boolean, указывающее, является ли переменная массивом:

  • True — переменная является массивом;
  • False — переменная не является массивом.

Пример с IsArray

Sub Primer1()

Dim arr1(), arr2(1 To 10), arr3

    Debug.Print IsArray(arr1)  ‘Результат: True

    Debug.Print IsArray(arr2)  ‘Результат: True

    Debug.Print IsArray(arr3)  ‘Результат: False

arr3 = Array(1, 2, 3, 4, 5)

    Debug.Print IsArray(arr3)  ‘Результат: True

End Sub

Как показывает пример, функция IsArray возвращает True и в том случае, если переменная только объявлена как массив, но еще не содержит значений.

Функция IsDate

Описание функции

Функция IsDate возвращает логическое значение, указывающее, содержит ли переменная значение, которое можно интерпретировать как дату:

  • True — переменная содержит дату, выражение возвращает дату, переменная объявлена с типом As Date;
  • False — в иных случаях.

Пример с IsDate

Sub Primer2()

Dim d1 As String, d2 As Date

    Debug.Print IsDate(d1)  ‘Результат: False

    Debug.Print IsDate(d2)  ‘Результат: True

d1 = «14.01.2023»

    Debug.Print IsDate(d1)  ‘Результат: True

    Debug.Print IsDate(Now)  ‘Результат: True

End Sub

Функция IsEmpty

Описание функции

Функция IsEmpty возвращает значение типа Boolean, указывающее, содержит ли переменная общего типа (As Variant) значение Empty:

  • True — переменная содержит значение Empty;
  • False — переменной присвоено значение, отличное от Empty.

Пример с IsEmpty

Sub Primer3()

Dim s As String, v As Variant

    Debug.Print IsEmpty(s)  ‘Результат: False

    Debug.Print IsEmpty(v)  ‘Результат: True

v = 125

    Debug.Print IsEmpty(v)  ‘Результат: False

Range(«A1»).Clear

    Debug.Print IsEmpty(Range(«A1»))  ‘Результат: True

Range(«A1») = 123

    Debug.Print IsEmpty(Range(«A1»))  ‘Результат: False

End Sub

Как видно из примера, функцию IsEmpty можно использовать для проверки ячеек на содержание значения Empty (пустая ячейка общего формата).

Функция IsError

Описание функции

Функция IsError возвращает логическое значение, указывающее, является ли аргумент функции значением ошибки, определенной пользователем:

  • True — аргумент функции является значением ошибки, определенной пользователем;
  • False — в иных случаях.

Пользователь может определить одну или несколько ошибок для своей процедуры или функции с рекомендациями действий по ее (их) исправлению. Возвращается номер ошибки с помощью функции CVErr.

Пример с IsError

Допустим, пользователь определил, что ошибка №25 означает несоответствие аргумента функции Vkuba числовому формату:

Function Vkuba(x)

    If IsNumeric(x) Then

        Vkuba = x ^ 3

    Else

        Vkuba = CVErr(25)

    End If

End Function

Sub Primer4()

    Debug.Print Vkuba(5)  ‘Результат: 125

    Debug.Print IsError(Vkuba(5))  ‘Результат: False

    Debug.Print Vkuba(«пять»)  ‘Результат: Error 25

    Debug.Print IsError(Vkuba(«пять»))  ‘Результат: True

End Sub

Функция IsMissing

Описание функции

Функция IsMissing возвращает значение типа Boolean, указывающее, был ли необязательный аргумент типа данных Variant передан процедуре:

  • True — если в процедуру не было передано значение для необязательного аргумента;
  • False — значение для необязательного аргумента было передано в процедуру.

Пример с IsMissing

Function Scepka(x, Optional y)

    If Not IsMissing(y) Then

        Scepka = x & y

    Else

        Scepka = x & » (а необязательный аргумент не подставлен)»

    End If

End Function

Sub Primer5()

    Debug.Print Scepka(«Тропинка», » в лесу»)  ‘Результат: Тропинка в лесу

    Debug.Print Scepka(«Тропинка»)  ‘Результат: Тропинка (а необязательный аргумент не подставлен)

End Sub

Функция IsNull

Описание функции

Функция IsNull возвращает логическое значение, указывающее, является ли Null значением переменной или выражения:

  • True — значением переменной или выражения является Null;
  • False — в иных случаях.

Пример с IsNull

Функция IsNull особенно необходима из-за того, что любое условие с выражением, в которое входит ключевое слово Null, возвращает значение False:

Sub Primer6()

Dim Var

Var = Null

    If Var = Null Then Debug.Print Var  ‘Результат: «»

    If Var <> Null Then Debug.Print Var  ‘Результат: «»

    If IsNull(Var) Then Debug.Print Var  ‘Результат: Null

End Sub

Функция IsNumeric

Описание функции

Функция IsNumeric возвращает значение типа Boolean, указывающее, можно ли значение выражения или переменной рассматривать как число:

  • True — если аргумент функции может рассматриваться как число;
  • False — в иных случаях.

Пример с IsNumeric

Sub Primer7()

Debug.Print IsNumeric(«3,14»)  ‘Результат: True

Debug.Print IsNumeric(«четыре»)  ‘Результат: False

End Sub

Функция IsObject

Описание функции

Функция IsObject возвращает логическое значение, указывающее, является ли переменная объектной:

  • True — переменная содержит ссылку на объект или значение Nothing;
  • False — в иных случаях.

Функция IsObject актуальна для переменных типа Variant, которые могут содержать как ссылки на объекты, так и значения других типов данных.

Пример с IsObject

Sub Primer8()

Dim myObj As Object, myVar As Variant

    Debug.Print IsObject(myObj)  ‘Результат: True

    Debug.Print IsObject(myVar)  ‘Результат: False

Set myVar = ActiveSheet

    Debug.Print IsObject(myVar)  ‘Результат: True

End Sub


IsDate is the VBA function that tests whether the given value is the date or not. If the supplied value or range reference value is the date value, we will get the result as “TRUE.” On the other hand, if the value is not date, we will get the result as “FALSE.” So, the result is a BOOLEAN value, i.e., TRUE or FALSE.

Table of contents
  • Excel VBA IsDate Function
    • How to use VBA IsDate Function?
    • Things to Remember here
    • Recommended Articles

Below is the syntax of the IsDate function.

VBA IsDate Formula

The expression is nothing but the value we are trying to test, whether it is the date or not.

How to use the VBA IsDate Function?

You can download this VBA IsDate Excel Template here – VBA IsDate Excel Template

We will test whether the value “5.01.19” is a date value or not.

For this first start, the excel macroA macro in excel is a series of instructions in the form of code that helps automate manual tasks, thereby saving time. Excel executes those instructions in a step-by-step manner on the given data. For example, it can be used to automate repetitive tasks such as summation, cell formatting, information copying, etc. thereby rapidly replacing repetitious operations with a few clicks.
read more
procedure.

Code:

Sub IsDate_Example1()

End Sub

Example 1

Define the variable to store the date value, and since the value will be the date value, assign the data type as “Date” only.

Code:

Sub IsDate_Example1()

Dim MyDate As Date

End Sub

Example 1.1

Now assign the value of “5.1.19” to the variable “MyDate.”

Code:

Sub IsDate_Example1()

Dim MyDate As Date

MyDate = "5.1.19"

End Sub

VBA IsDate Example 1.2

Open the message box in VBA now.

Code:

Sub IsDate_Example1()

Dim MyDate As Date

MyDate = "5.1.19"

MsgBox(

End Sub

 Example 1.3

In this message box, we will test whether the supplied date value to the variable “MyDate” is the date or not by using the “IsDate” function. First, open the “IsDate” function.

Code:

Sub IsDate_Example1()

Dim MyDate As Date

MyDate = "5.1.19"

MsgBox IsDate(

End Sub

VBA IsDate Example 1.4

The expression is the value we are testing to find whether it is Date or not. Since we have already stored the value to the variable “MyDate,” supply the variable name only.

Code:

Sub IsDate_Example1()

Dim MyDate As Date

MyDate = "5.1.19"

MsgBox IsDate(MyDate)

End Sub

 Example 1.5

Now run the code and see what we get in the message box.

VBA IsDate Example 1.6

The result is TRUE.

You must wonder how it recognized the value “5.1.19” as the date.

It has returned the result as TRUE because when you look at the given value “5.1.19,” it is the short form of the date “05.01.2019,” so Excel is brilliant enough to recognize it as a date, so the result is TRUE.

 Example 1.7

Now here comes the tricky thing, for the same value, what we will do is we will change the short form of the year from 19 to 2019.

Code:

Sub IsDate_Example1()

Dim MyDate As String

MyDate = "5.1.2019"

MsgBox IsDate(MyDate)

End Sub

Example 2.0

Now, run the code and see the result.

VBA IsDate Example 2.1

This time it has returned the result as FALSE because the “day and month” portion of the date is in short form, but the year part is in full form of “YYYY,” so ISDATE cannot recognize it has a date, so the result is FALSE.

Now, look at the code below.

Code:

Sub IsDate_Example1()

Dim MyDate As String

MyDate = "05.01.2019"

MsgBox IsDate(MyDate)

End Sub

 Example 2.2

We have mentioned a full day and full month format by using 0. Let us run the code and see the result of the IsDate function.

This time also we go got the result as FALSE.

VBA IsDate Example 2.3

Now, change the code as follows.

Code:

Sub IsDate_Example1()

Dim MyDate As String

MyDate = "05/01/2019"

MsgBox IsDate(MyDate)

End Sub

 Example 2.4

Instead of the dot (.) as the separator, we have entered forward-slash (/) as the separator. Now run the code and see the result.

VBA IsDate Example 2.5

This time we got the result as TRUE.

We have told you at the beginning of the article that “Date” is a sensitive thing.

Now what we will do is we will merge the date and time.

Code:

Sub IsDate_Example1()

Dim MyDate As String

MyDate = "05/01/2019 15:26:24"

MsgBox IsDate(MyDate)

End Sub

 Example 2.6

We have added above the time portion of “15:26:24” in front of the date. Now, run the code and see the result.

VBA IsDate Example 2.7

This time, we also got the result TRUE because DATE and TIME in Excel are the same things and stored as serial numbers. The whole number represents the date portion, and decimal places represent the time portion.

Things to Remember here

  • The IsDate function returns the Boolean type result, i.e., TRUE or FALSE.
  • The IsDate function is available only as a VBA functionVBA functions serve the primary purpose to carry out specific calculations and to return a value. Therefore, in VBA, we use syntax to specify the parameters and data type while defining the function. Such functions are called user-defined functions.read more.
  • Only valid formatted dates one can treat as the date. Else, it will treat as text values and return the result as FALSE.

Recommended Articles

This article has been a guide to VBA IsDate. Here, we discuss how to use the VBA IsDate function to check whether a given value is a date or not, along with the example and downloadable Excel sheet. Below are some useful Excel articles related to VBA: –

  • VBA Randomize
  • Steps to Create Login Form in VBA
  • VBA Month
  • DatePart Function in VBA
  • VBA RegEx

CTAJIuH

1 / 1 / 2

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

Сообщений: 153

1

Проверить что в ячейке находится время

22.06.2015, 17:45. Показов 3678. Ответов 1

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


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

Здравствуйте!
Имеется таблица, допустим «программа передач» в которой имеется поле «начало программы»
Как программно проверить что в ячейке действительно время?
Вот допустим у меня содержимое ячеек столбца с датами проверяется таким образом на дату(пробовал тут, со временем так же делать-не работает)

Visual Basic
1
2
3
4
5
6
7
8
9
For Each q In Range(R)
        q.Select
        If Not IsDate(ActiveCell) Then
            Eflag = 1
            q.Interior.ColorIndex = 3
        Else
            q.Interior.ColorIndex = 0
        End If
    Next



0



Programming

Эксперт

94731 / 64177 / 26122

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

Сообщений: 116,782

22.06.2015, 17:45

1

Аксима

6076 / 1320 / 195

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

Сообщений: 1,023

22.06.2015, 18:36

2

Здравствуйте, CTAJIuH,

Может быть, так попробовать?

Visual Basic
1
2
3
4
5
6
7
8
    For Each q In Range(R)
        If IsNumeric(q) And q.NumberFormat = "h:mm:ss" Then Then
            q.Interior.ColorIndex = 0
        Else
            Eflag = 1
            q.Interior.ColorIndex = 3
        End If
    Next

IsNumeric(q) — проверяет, что в ячейке находится число (время — это на самом деле вещественное число от 0 до 1, где час = 1/24 суток, минута = 1/24/60 суток и секунда = 1/24/3600 суток).

q.NumberFormat = «h:mm:ss» — проверяет, что это число представлено в формате времени (час без ведущих нулей, минуты и секунды с ведущими нулями).

С уважением,

Аксима



1



 

N1K0

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

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

Имеется ячейка с формулой, которая может выдавать значения ошибок (#Н/Д и т.п)  
требуется если Ячейка не содержит ошибку Then выполнить код  

  или if Ячейка является числом Then выполнить код  

  помогите!

 

ytk5kyky

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

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

If IsNumeric(ячейка.Value) Then  

  Если известен вид ошибки, то можно проверить значение, например, для #Н/Д:  
If ячейка.Value <> «#N/A»  Then  

  Или так:  
If Not Application.WorksheetFunction.IsError(ячейка.Value) Then  
‘IsError = ЕОШИБКА, IsNA = ЕНД

 

ZVI

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

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

Или так: If Not IsError(ActiveCell) Then MsgBox «Нет ошибки»

 

N1K0

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

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

Перепробовал все способы, работает.  
Спасибо.

 

Здравствуйте. Решил не создавать новую тему а эту освежить, таким вопросом. Как в коде VBA проверить, что в ячейке находится дата ну например 01.01.2011. Знаю что ексель хранит дату и время в числовом формате, но может есть какой то способ? Спасибо!

 

{quote}{login=}{date=06.04.2011 06:40}{thema=Как проверить что в ячейке формат даты}{post}Как в коде VBA проверить, что в ячейке находится дата ну например 01.01.2011. {/post}{/quote}  

  If IsDate(ActiveCell) Then MsgBox «В активной ячейке находится дата!»  

    Вот только IsDate почему-то распознаёт дату даже в ячейке, где содержится текст 1,2,2011  
(Excel не распознаёт этот текст как дату)

 

KuklP

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

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

E-mail и реквизиты в профиле.

Игорь, я так понял из вопроса, надо на конкретную дату проверить, что-то вроде:  
If ActiveCell = #1/1/2011# Then MsgBox «В активной ячейке находится дата!»  
Но может я и ошибаюсь.

Я сам — дурнее всякого примера! …

 

Guest

Гость

#8

06.04.2011 07:29:07

Да Игорь все правильно вы поняли, надо именно на формат проверить, а не на конкретную дату, я думаю если к вашему методу добавить такую проверку:  

  If (IsDate(ActiveCell) And ActiveCell.Value Like «*.*.*» Then MsgBox «В активной ячейке находится дата!»  
Тогда исключится вариант с запятыми

Содержание

  1. Функция IsDate
  2. Примеры запросов
  3. Пример VBA
  4. How do I validate a YYYYMMDD string is a date in Excel VBA?
  5. 4 Answers 4
  6. VBA Excel. Проверка переменных и выражений
  7. Проверка переменных и выражений
  8. Функция IsArray
  9. Описание функции
  10. Пример с IsArray
  11. Функция IsDate
  12. Описание функции
  13. Пример с IsDate
  14. Функция IsEmpty
  15. Описание функции
  16. Пример с IsEmpty
  17. Функция IsError
  18. Описание функции
  19. Пример с IsError
  20. Определение типа данных в ячейке или переменной
  21. Способ 1. Использовать функцию TypeName для определения типа данных
  22. Способ 2. Проверка на возможность преобразования строки к нужному типу.
  23. Как проверить, является ли строка YYYYMMDD датой в Excel VBA?

Функция IsDate

Возвращает boolean value, указывающее, можно ли выражение быть преобразованы в дату.

Требуемым выражениемаргумент является Variant, содержащее выражение даты или строковое выражение распознается как дата или время.

IsDate возвращает «Истина», если выражение является датой или распознается как допустимая дата; в противном случае возвращается false. В Microsoft Windows допустимым диапазоном дат является 1 января 100 г. до 31 декабря 9999 г. н. д.; Диапазоны зависят от операционных систем.

Примеры запросов

SELECT IsDate([UnitPrice]) AS Expr1 FROM ProductSales;

Функция оценивает, является ли значение «UnitPrice» допустимой датой, и возвращает результат «-1» для значения «Истина» и «0» для значения «Ложь» в столбце «Вырасть1». Результат — 0 (ложь).

SELECT IsDate([DateofSale]) AS ValidDate, IsDate(#31/10/2019#) AS DateTest FROM ProductSales;

Функция оценивает, является ли «DateofSale» и «#31/10/2019#» допустимой датой, и возвращает результат «-1» для «Истина» и «0» для ложь в столбцах ValidDate и DateTest соответственно. Результат в обоих столбцах — -1 (Истина).

Пример VBA

Примечание: В примерах ниже показано, как использовать эту функцию в модуле Visual Basic для приложений (VBA). Чтобы получить дополнительные сведения о работе с VBA, выберите Справочник разработчика в раскрывающемся списке рядом с полем Поиск и введите одно или несколько слов в поле поиска.

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

Источник

How do I validate a YYYYMMDD string is a date in Excel VBA?

The date is supplied as a string in the form: 20180503

The function is supposed to validate that the entry is:

  1. in the form YYYYMMDD
  2. a valid date

The following code does not do the trick:

4 Answers 4

edit: original UDF changed as it would not flag certain invalid format dates.

The On Error will pick up invalid dates that otherwise meet the format criteria: eg Sep 31, Feb 30

Interesting idea for a function. I’ve rewritten your code below to do exactly what you said. Function returns «Not a date» for 2018101a, 20181033, 201810300, otherwise returns date in formatted string. Note that you need to provide a valid string format and I did not handle that error. I assume there are no spaces at the end?

I fiddled with the code getting some directions from the guy’s suggestion and it works now. Thanks, guys for all your input.

This is what I did

If the input date is always in this format(YYYYMMDD), you can write a custom code to convert it into a string that can be converted to date using CDATE.

Remember to convert month to name of the month, and year to four digit year. In this way you are explicitly defining the month, year and the remaining one as date, if you keep them as two digit numbers they may be interpreted differently on difference systems (when you convert them using CDATE)

I recommend this format DD-MMM-YYYY

In your code instead of

You have to write a custom function

And in place of

formatDateYYYYMMDD= format(dateStr, dateFormat)

Return just the dateStr and set the format of the cell where it is returned to YYYYMMDD

Источник

VBA Excel. Проверка переменных и выражений

Проверка переменных и выражений с помощью встроенных функций VBA Excel: IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject.

Проверка переменных и выражений

Встроенные функции VBA Excel — IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject — проверяют значения переменных и выражений на соответствие определенному типу данных или специальному значению.

Синтаксис функций для проверки переменных и выражений:

Expression — выражение, переменная или необязательный аргумент для IsMissing.

Все функции VBA Excel для проверки переменных и выражений являются логическими и возвращают значение типа Boolean — True или False.

Функция IsArray

Описание функции

Функция IsArray возвращает значение типа Boolean, указывающее, является ли переменная массивом:

  • True — переменная является массивом;
  • False — переменная не является массивом.

Пример с IsArray

Как показывает пример, функция IsArray возвращает True и в том случае, если переменная только объявлена как массив, но еще не содержит значений.

Функция IsDate

Описание функции

Функция IsDate возвращает логическое значение, указывающее, содержит ли переменная значение, которое можно интерпретировать как дату:

  • True — переменная содержит дату, выражение возвращает дату, переменная объявлена с типом As Date;
  • False — в иных случаях.

Пример с IsDate

Функция IsEmpty

Описание функции

Функция IsEmpty возвращает значение типа Boolean, указывающее, содержит ли переменная общего типа (As Variant) значение Empty:

  • True — переменная содержит значение Empty;
  • False — переменной присвоено значение, отличное от Empty.

Пример с IsEmpty

Как видно из примера, функцию IsEmpty можно использовать для проверки ячеек на содержание значения Empty (пустая ячейка общего формата).

Функция IsError

Описание функции

Функция IsError возвращает логическое значение, указывающее, является ли аргумент функции значением ошибки, определенной пользователем:

  • True — аргумент функции является значением ошибки, определенной пользователем;
  • False — в иных случаях.

Пользователь может определить одну или несколько ошибок для своей процедуры или функции с рекомендациями действий по ее (их) исправлению. Возвращается номер ошибки с помощью функции CVErr.

Пример с IsError

Допустим, пользователь определил, что ошибка №25 означает несоответствие аргумента функции Vkuba числовому формату:

Источник

Определение типа данных в ячейке или переменной

В языке VBA есть универсальные типы данных, т.е. способные хранить как число, так и строку, дату и любой другой тип информации. Например, ячейка в таблице может содержать что угодно и изначально, программа не знает какой в ней тип данных хранится. Кроме того, в самой программе может использоваться тип данных Variant, который так же может содержать любое значение любого типа.

Чтобы определить какой тип данных в ячейке или в переменной типа Variant, можно воспользоваться несколькими способами.

Способ 1. Использовать функцию TypeName для определения типа данных

Эта функция возвращает строку с названием типа данных на английском. В качестве аргумента принимает переменную, значение ячейки.
Обратите внимание: Функция определяет только стандартные типы данных и не может определить пользовательский тип (определенный с помощью Type).

Возможные возвращаемые функцией значения:

Byte Число типа Byte
Integer Целое число
Long Длинное целое число
Single Число одиночной точности с плавающей запятой
Double Число двойной точности с плавающей запятой
Currency Валюта
Decimal Число с плавающей запятой
Date Дата
String Строка
Boolean Логическое
Error Ошибка
Empty Не проинициализировано (т.е. переменная не была объявлена)
Null Неверные данные (в переменной нет корректных данных)
Object Объект (класс)
Unknown Тип данных не известен
Nothing Объект, никуда не ссылающийся

Приведу несколько примеров по использованию TypeName.

Пример 1. Определение типа переменной.

Обратите внимание: если вы используете результат TypeName в условии, т.е. проверяете, соответствует ли тип данных определенному, например, Integer, то регистр символов возвращаемого типа имеет значение. Т.е. нужно писать Integer с заглавной буквы, либо использовать приведение всех символов к одному регистру.

Пример 2. Использование TypeName в условии.

Пример 3. Определение типа данных в ячейке.

Если функции была передана переменная массив, она вернет тип данных в массиве с добавлением скобок.

Пример 4. Определение типа массива.

Способ 2. Проверка на возможность преобразования строки к нужному типу.

Бывает ситуация, когда значение, например, число или дата, содержится в строке. В этом случае TypeName вернет String, а не Integer или Date. Чтобы узнать, что содержится в строке, можно воспользоваться одной из функций IsNumeric, IsDate, IsObject, IsArray, IsNull, IsError.

IsNumeric Проверяет может ли выражение быть преобразовано в число
IsDate Проверяет может ли выражение быть преобразовано в дату
IsObject Проверяет, является ли переменная объектом
IsArray Проверяет, является ли переменная массивом
IsNull Проверка на пустое значение
IsError Проверка выражения на ошибку

Пример 4. Определение может ли переменная быть преобразована в число.

К сожалению, как видим из примера, нет возможности проверить, содержится ли в строке число с плавающей точкой.

Пример 5. Определение содержит ли переменная дату (может быть преобразована в дату).

Проверка, содержится ли число или дата в ячейке листа делается аналогично, как и с переменными.

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

Источник

Как проверить, является ли строка YYYYMMDD датой в Excel VBA?

Дата предоставляется в виде строки в форме: 20180503.

Предполагается, что функция проверяет, что запись:

  1. в виде YYYYMMDD
  2. действительная дата

Следующий код не помогает:

Технически говоря, 20181013 — это нет действительной даты в Excel. . . .Если это для ввода данных в Excel,, я бы хотел настоятельно рекомендую, чтобы вы на самом деле делать использовали форматы ввода даты действительный, иначе вы будете постоянно сюда возвращаться с проблемами, связанными с вашим нестандартным форматом даты. Лучше всего использовать международный стандарт ISO-8601. yyyy-mm-dd, что имеет смысл по нескольким причинам.

К сожалению, данные поступают из фида. Я должен подтвердить, что запись в формате ГГГГММДД.

@ashleedawg — Насколько я понимаю, ISO 8601 позволяет удалять разделители, но это не является предпочтительным использованием, и поэтому 20181013 является частью спецификации.

Редактировать: исходный UDF изменен, так как он не будет отмечать определенные даты недопустимого формата.

On Error выберет недопустимые даты, которые в противном случае соответствуют критериям формата: например, 31 сентября, 30 февраля.

Спасибо, Рон. Работает для моей цели!

@ibexy Извините, что я недостаточно постарался устранить неполадки. Оригинал недостаточно проверял формат. Я отредактировал свой пост, чтобы предоставить более надежное решение. Пожалуйста, проверьте его и отправьте ответ, если возникнут проблемы.

Предыдущая версия также могла обрабатывать недопустимую дату, например, 19902323. Я реализовал новую версию, которая тоже отлично работает. Спасибо за вашу помощь!

@ibexy но не 120808

Если дата ввода всегда находится в этом формате (ГГГГММДД), вы можете написать собственный код, чтобы преобразовать ее в строку, которая может быть преобразована на дату с помощью CDATE.

Не забудьте преобразовать месяц в название месяца, а год в четырехзначный год. Таким образом, вы явно определяете месяц, год и оставшуюся часть как дату, если вы сохраните их как двухзначные числа, они могут интерпретироваться по-разному в разностных системах (когда вы конвертируете их с помощью CDATE)

Я рекомендую этот формат ДД-МММ-ГГГГ

В вашем коде вместо

Вы должны написать собственную функцию

FormatDateYYYYMMDD= format(dateStr, dateFormat)

Верните только dateStr и установите формат ячейки, в которой он возвращается, в YYYYMMDD

Источник

Понравилась статья? Поделить с друзьями:
  • Excel vba добавление в массиве
  • Excel vba закомментировать строки
  • Excel vba добавить элемент в массиве
  • Excel vba закомментировать блок
  • Excel vba добавить строки умной таблицы