Application.WorksheetFunction.CountIf не работает для чисел - PullRequest
0 голосов
/ 22 января 2019

Сценарий

У меня есть следующий код, чтобы проверить, сколько раз определенное значение появляется в столбце.Здесь poRange - это диапазон, определенный ранее, а poValueCheck - это значение, определенное ранее программой.

iVal = Application.WorksheetFunction.CountIf(Range(poRange), Trim(poValueCheck) & "*")

Проблема

Все работает нормально, кромеесли мне нужно искать вхождение числа в этом диапазоне.Если мне нужно найти чистое число, которое существует в poRange, iVal получает 0, даже если существует похожее число.

Кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Проблема была связана с использованием подстановочного поиска чисел, которые в конечном итоге изменяют значение поиска с числового формата на строковый формат, и, таким образом, числа в диапазоне не будут учитываться. Другими словами, когда я выполняю поиск по номеру 1234 с помощью поиска по шаблону Trim(1234) & "*", число 1234 больше не будет учитываться.

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

Do While ActiveCell.Value <> ""
    If IsNumeric(ActiveCell.Value) Then
        ActiveCell.Value = "'" & ActiveCell.Value
    Else
        ActiveCell.Value = ActiveCell.Value
    End If
    ActiveCell.Offset(1, 0).Select
Loop

Теперь я могу считать даже числа, используя Application.WorksheetFunction.CountIf

0 голосов
/ 22 января 2019

выражение Trim(poValueCheck) & "*" возвращает строку.Таким образом, при поиске «1234 *» число 1234 не будет найдено.Вы можете попробовать что-то вроде этого: -

Dim Crit as variant

Crit = Trim(poValueCheck)
If IsNumeric Crit Then
    iVal = Application.WorksheetFunction.CountIf(Range(poRange), Crit)
Else
    iVal = Application.WorksheetFunction.CountIf(Range(poRange), Crit & "*")
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...