Использование Countif при поиске частичных строк в ячейках - PullRequest
0 голосов
/ 28 сентября 2018

Требуется некоторая помощь с использованием COUNTIF и INSTR для определения количества отдельных вхождений строки в наборе данных.У меня есть операторы COUNTIF, работающие для значений ячеек, но сейчас я пытаюсь покопаться в ячейках и определить, сколько экземпляров конкретной строки встречается по всему столбцу.

У меня следующий код:

j = 2

Cells(2, 11) = "Active, non-corresp add"
Cells(3, 11) = "No start date of res"
Cells(4, 11) = "Invalid address"
Cells(5, 11) = "Active ID, no country"
Cells(6, 11) = "Invalid address format"
Cells(7, 11) = "Invalid characters in address"

While Cells(j, 11) <> vbNullString
    s = WorksheetFunction.CountIf(Worksheets("Addresses Master").Range("N:N"), Cells(j, 11))

    If s <> 0 Then
        Cells(j, 12) = s
    End If

    t = WorksheetFunction.CountIfs(Worksheets("Addresses Master").Range("N:N"), Cells(j, 11), Worksheets("Addresses Master").Range("I:I"), 1)

    If t <> 0 Then
        Cells(j, 13) = t
    End If

    u = WorksheetFunction.CountIfs(Worksheets("Addresses Master").Range("N:N"), Cells(j, 11), Worksheets("Addresses Master").Range("I:I"), 0)

    If u <> 0 Then
        Cells(j, 14) = u
    End If

    k = 15

    If Cells(j, 11) = "Review address" Then
        p = 0
    Else
        p = 1
    End If

    While k <= 19
        v = WorksheetFunction.CountIfs(Worksheets("Addresses Master").Range("N:N"), Cells(j, 1), Worksheets("Addresses Master").Range("I:I"), p, Worksheets("Addresses Master").Range("C:C"), Cells(1, k))
        If v <> 0 Then
            Cells(j, k) = v
            v = 0
        End If
        k = k + 1
    Wend

    j = j + 1
    s = 0
    t = 0
    u = 0
Wend

В искомых ячейках может быть комбинация из 6 искомых строк (ячейки 2 - 7).

Редактировать: уточненный заголовок

1 Ответ

0 голосов
/ 28 сентября 2018

Устранена проблема с использованием подстановочных знаков.

Вместо того, чтобы пытаться использовать что-то вроде InStr, использование звездочки до и после поиска ячейки позволяет функции Countif осуществлять поиск внутриячейка.

т.е. "*" & cells(j,11) & "*"

Код становится:

j = 2

Cells(2, 11) = "Active, non-corresp add"
Cells(3, 11) = "No start date of res"
Cells(4, 11) = "Invalid address"
Cells(5, 11) = "Active ID, no country"
Cells(6, 11) = "Invalid address format"
Cells(7, 11) = "Invalid characters in address"

While Cells(j, 11) <> vbNullString
    s = WorksheetFunction.CountIf(Worksheets("Addresses Master").Range("N:N"), "*" & Cells(j, 11) & "*")

    If s <> 0 Then
        Cells(j, 12) = s
    End If

    k = 13

    p = 1

    While k <= 19
        v = WorksheetFunction.CountIfs(Worksheets("Addresses Master").Range("N:N"), "*" & Cells(j, 11) & "*", Worksheets("Addresses Master").Range("I:I"), p, Worksheets("Addresses Master").Range("C:C"), Cells(1, k))
        If v <> 0 Then
            Cells(j, k) = v
            v = 0
        End If
        k = k + 1
    Wend

    j = j + 1
    s = 0
    t = 0
    u = 0
Wend
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...