Страницы: 1
RSS
определить тип данных в ячейке
 
Приветствую всех.
Нужно определить тип данных в ячейке.

If (TypeName(Range(Cells(stroka_aktiv, N).Address).Value) = Date) Then ' (1) если тип Date
Range(Cells(stroka_aktiv, N).Address).Value = Empty
End If
If (TypeName(Range(Cells(stroka_aktiv, N).Address).Value) = String) Then ' (2) если тип String
Range(Cells(stroka_aktiv, N).Address).Value = ""
End If
If (TypeName(Range(Cells(stroka_aktiv, N).Address).Value) = Empty) Then ' (3) если тип Empty
Range(Cells(stroka_aktiv, N).Address).Value = Empty
End If
If (TypeName(Range(Cells(stroka_aktiv, N).Address).Value) = Double) Then ' (4) если тип Double
Range(Cells(stroka_aktiv, N).Address).Value = 0
End If

Сравнения (1) (2) (4) не получаются.
Если сравнение (4) переделать:
Range("B22".Value = TypeName(Range("A22".Value) ' (*)
If (TypeName(Range(Cells(stroka_aktiv, N).Address).Value) = Range("B22".Value) Then ' если тип Double
Range(Cells(stroka_aktiv, N).Address).Value = 0
End If
(*) - это в отдельную ячейку "A22" записать , например, 152, то в ячейке "B22" сохранится Double и сравнение (4) начинает работать. Но мне так не нравится.
Что нужно писать вместо Date , String, Double , чтобы сравнения работали?
Изменено: ArtemonX - 13.03.2013 19:35:25
 
замените
Код
TypeName(Range(Cells(stroka_aktiv, N).Address).Value) = Date

на
Код
TypeName(Range(Cells(stroka_aktiv, N).Address).Value) = "Date"


остальные сравнения соответственно тоже, фнукция TypeName возвращает результат типа string  ;)
 
Спасибо.
 
Лучше использовать функцию VarType. После ввода If VarType(...)= VBA предлагает выбрать из списка значений. Эта функция быстрее, т.к. она просто извлекает 1 или 2 байта из структуры Variant, и числа сравниваются быстрее, чем строки.
 
Спасибо. Нужно подумать.
Хотя в моем случае скорость не сильно важно.
 
Из Уокенбаха

Ниже описана функция CellType. которая принимает аргумент-диапазон и возвращает
строку (Пусто, Текст, Булево выражение. Ошибка, Дата, Время и Значение), описывающую
тип данных левой верхней ячейки этого диапазона. Такую функцию можно использовать в
формуле рабочего листа или вызвать из другой процедуры VBA.
Function CellType(Rng)
' Возвращает тип верхней левой ячейки
' в диапазоне
Application.Volatile
Set Rng = Rng.Range("A1")  
Select Case True
Case IsEmpty(Rng)
CellType = "Пусто"
Case WorksheetFunction.IsText(Rng)
CellType = "Текст"
Case WorksheetFunction.IsLogical(Rng)
CellType - "Булево выражение"
Case WorksheetFunction.IsErr(Rng!
CellType - "Ошибка"
Case IsDate(Rng)
CellType = "Дата"
Case InStr(1, Rng.Text, ":" ) <> 0
CellType = "Время"
Case IsNumeric(Rng)
CellType = "Значение"
End Select
End Function
Изменено: Kuzmich - 13.03.2013 21:21:10
 
Цитата
Нужно определить тип данных в ячейке.
Фукцией ТИП.
Excel 2013
 
ТИП - это функция листа.
 
Да листа, альтернатива макросу
Excel 2013
 
А она, вроде, дату не умеет?
 
Ну тогда к Уокенбаху...
Excel 2013
 
Цитата
Rustem Haziev пишет:
Да листа, альтернатива макросу

:)
Изменено: ArtemonX - 13.03.2013 20:36:07
 
Цитата
ТИП - это функция листа.
Excel 2013
 
ArtemonX и Rustem Haziev, что вы хотели сказать таким цитированием?
 
Что в Excel существует функция листа "ТИП", с помощью которой можно определить тип данных ячейки.
Что можно попытаться применить её, а не сочинять макрос.
Excel 2013
 
Рустем, я про пост #13.
 
В посте 12 был вопрос ArtemonX (удален):
Не понял про "Да листа, альтернатива макросу"
Я и ответил Вашей цитатой что ТИП, это функция листа
Excel 2013
 
Ну и посмотрите теперь - что получилось. Нормально? Всё всем понятно? Удалил человек свой вопрос - удалите/отредактируйте и Вы свой ответ. А так - к чему эта цитата?
 
Я сначала не понял о чем речь, а через некоторое время после создания поста с цитатой и своим вопросом я смекнул что к чему.
А т.к. я не знаю как удалить весь пост, через редактирование удалил свой вопрос.
Извиняюсь , что так получилось.
Страницы: 1
Читают тему
Наверх