Приветствую всех. Нужно определить тип данных в ячейке.
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 , чтобы сравнения работали?
Лучше использовать функцию 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
Что в Excel существует функция листа "ТИП", с помощью которой можно определить тип данных ячейки. Что можно попытаться применить её, а не сочинять макрос.
Ну и посмотрите теперь - что получилось. Нормально? Всё всем понятно? Удалил человек свой вопрос - удалите/отредактируйте и Вы свой ответ. А так - к чему эта цитата?
Я сначала не понял о чем речь, а через некоторое время после создания поста с цитатой и своим вопросом я смекнул что к чему. А т.к. я не знаю как удалить весь пост, через редактирование удалил свой вопрос. Извиняюсь , что так получилось.