Подсчет уникальных строк в электронной таблице Excel, соответствующих определенным критериям - PullRequest
2 голосов
/ 08 сентября 2010

Я хочу подсчитать все уникальные значения в столбце Excel, которые содержат определенную строку. Например, скажите, у меня есть это в моей колонке:

Стр
STRB
Стра
StRC
Diffa
diffB
strC

Если я передам этой теоретической функции, что я пишу значение "str", он будет считать уникальные значения, содержащие "str", и вернет мне число 3.

Есть предложения? В Интернете полно половинных ответов на эту проблему, но я потратил час, пытаясь найти четкое решение, поэтому я подумал, что StackOverflow может извлечь пользу из этого вопроса.

Ответы [ 3 ]

1 голос
/ 08 сентября 2010
Option Explicit

Sub Test()
    GetCount 1, "str"
End Sub

Sub GetCount(colNum As Integer, str As String)
    Dim row As Integer
    Dim dict
    Set dict = CreateObject("Scripting.Dictionary")

    row = 1

    Dim key As String
    While Cells(row, colNum) <> ""
        key = Cells(row, colNum)
        If InStr(key, str) And Not dict.Exists(key) Then
            dict.Add key, key
        End If

        row = row + 1
    Wend

    MsgBox ("the count is " & dict.Count)

End Sub

При запуске с входной выборкой это дает 3. Условие завершения цикла - первая пустая ячейка, найденная в столбце.Вы можете настроить это, если логика не соответствует вашей.

Вам нужно добавить ссылку на Microsoft Scripting Runtime в разделе VBA, чтобы этот макрос компилировался и выполнялся.

0 голосов
/ 09 сентября 2010

Я был слишком медленным, но я нашел другое решение:

Поместите строку для поиска в B1, затем введите как формулу массива:

=SUM(NOT(ISERROR(SEARCH(B1;A1:A7)))*(1/COUNTIF(A1:A7,A1:A7))
0 голосов
/ 09 сентября 2010
=SUM(1/COUNTIF(A1:A7,A1:A7)*(LEFT(A1:A7,3)="str"))

Ввод с помощью Control + Shift + Enter, а не просто Enter, потому что это формула массива.Обычно для подсчета количества уникальных элементов в списке вы должны ввести массив

=SUM(1/COUNTIF(A1:A7,A1:A7))

Я умножил часть COUNTIF на другой критерий (начинается с str), чтобы те, которые не начинаются со строки, былирассматривается как ноль.Если вы новичок в формулах массива, см.

http://www.dailydoseofexcel.com/archives/2004/04/05/anatomy-of-an-array-formula/

...