Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
О сравнении текста и числа в VBA
 
Привет всем.

В ячейке R3C5 живёт "" (пустая строка). Выбираем ее.
Selection > 0 будет true, т.е.условие выполнилось, а вот Worksheetfunction.countif(selection, ">0") будет 0, т.е. условие не выполнилось.
Вопрос "почему так?".
 
MsgBox Selection > 0 - будет Type Mismatch. Runtime Error: 13
Код
 MsgBox WorksheetFunction.CountIf(Selection, ">0") 
будет 0 - всё верно
 
Цитата
kefirko написал:
В ячейке R3C5 живёт "" (пустая строка)
не-а, формула там живёт, а не пустая строка
Каждому For свой Next
 
Нет, при сравнении берется не формула, а значение ячейки. А значение там именно "".

Ну и ошибки нет. Приведение типов, что в первом что во втором случае отрабатывает, но видимо как-то по-разному.
 
Нет, при сравнении берется не формула, а значение ячейки. А значение там именно "".
Ну и ошибки нет. Приведение типов, что в первом что во втором случае отрабатывает, но видимо как-то по-разному.

true
Screenshot_1.jpg (22.39 КБ)
 
kefirko, предложите новое название темы, из которого будет понятна задача - модераторы поменяют.
И прекратите писать через строку.
 
Цитата
kefirko написал:
при сравнении берется не формула, а значение ячейки
если бы WorksheetFunction.CountIf брала значения, тоже была бы фигня, просто функции листа делают автоматическое преобразование типов
Каждому For свой Next
 
В теме сопоставляются разные вещи.

1. Сравнение в VBA переменной типа Variant c числом в случае, если переменная содержит текст.
VBA в этом случае перед сравнением пытается преобразовать текст в число. Если это невозможно, то считается что текст больше (как и в формулах Excel).
Код
Sub test()
  Dim v As Variant
  v = ""
  Debug.Print v > 9999
End Sub

Выдает True.

Если в примере тип переменной v описать как String, то возникнет ошибка преобразования типа.

2. Алгоритм работы функции рабочего листа CountIf.

Для модераторов тема: о сравнении текста и числа в VBA
Изменено: sokol92 - 26 сен 2020 14:13:10
Владимир
 
Недавно похожее было, но там сам скорее всего я сам накосячил.  
Изменено: _Igor_61 - 26 сен 2020 14:45:45
 
Цитата
sokol92 написал:
Алгоритм работы функции рабочего листа CountIf
Ок. Про 1 понятно. Спасибо.

Почему 2 возвращает false тогда?
Код
worksheetfunction.countif(selection, ">0")

Внутри скобок выражение возвращает false, поэтому countif возвращает 0.
Почему false то? По логике первого примера должно быть true. Перечитал справку, не нашел там ничего похожего.
Код
? selection > 0
True ' понятно (спасибо sokol92)

? selection > "0"
False ' понятно

? selection > ""
False ' понятно

? WorksheetFunction.CountIf(Selection, ">""""")
 0 ' понятно

? WorksheetFunction.CountIf(Selection, ">0")
 0 ' непонятно
 
WorksheetFunction.CountIf ведет себя так же, как и функция СЧЁТЕСЛИ (за исключением моментов, связанных с локализаций). Второй параметр ">0" для этой функции определяет подсчет в заданном диапазоне ячеек с числовым значением, большим нуля. При этом пустые ячейки, ячейки содержащие текст, логические или ошибочные значения при "числовом" подсчете игнорируются.
Владимир
 
Гранд мерси
Страницы: 1
Читают тему (гостей: 1)
Наверх