Подсчет различных значений в Excel - функция частоты - PullRequest
2 голосов
/ 15 сентября 2009

Мне было поручено подсчитать количество отдельных строк в столбце в Excel. Быстрый поиск в Google позже дал следующую формулу здесь :

= СУММА (ЕСЛИ (ЧАСТОТА (МАТЧ (B2: B10, B2: B10,0), МАТЧ (B2: B10, B2: B10,0))> 0,1))

Рассмотрим данные:

A В С D В Е C

Теперь функция соответствия возвращает массив (так как первый аргумент является массивом):

1 2 3 4 1 2 7 3

Пока все хорошо. Что я не понимаю, так это то, как здесь работает функция ЧАСТОТА, в частности, как она обрабатывает реплицируемые ячейки (например, ячейка 1 реплицируется в приведенных выше данных). Результат частотной функции:

2 2 2 1 0 0 1 0 0

Спасибо

Тарас

Ответы [ 2 ]

2 голосов
/ 15 сентября 2009

РЕДАКТИРОВАТЬ : Я понял, как работает ваше решение - поправил, чтобы отразить это.

ЧАСТОТА ищет записи из ваших корзин в массиве поиска. Вот как это работает:

Массив поиска: 1 2 3 4 1 2 7 3

Контейнеры: 1 2 3 4 1 2 7 3

Корзина 1 => есть две 1 => 2

Корзина 2 => есть две 2 = = 2

Корзина 3 => есть две 3 => 2

Корзина 4 => есть одна 4 => 1

Корзина 1 повторена => 1 уже посчитана => 0

Корзина 2 повторена => 2 уже учтено => 0

Корзина 7 => есть одна 7 => 1

Корзина 3 повторяется => 3 уже учтено => 0

Почти кажется, что решение использует причуду ЧАСТОТЫ, то есть он не будет считать один и тот же бин дважды, потому что вы могли бы ожидать, что второй бин со значением 1 будет ненулевым как Что ж. Но вот как это работает - поскольку он будет подсчитывать только количество вхождений для первого бина, а не для дублированного бина, количество строк со значением больше нуля даст вам количество отдельных записей.

Вот альтернативный подход, который может оказаться полезным. его можно использовать для вычисления количества различных значений:

Предположим, ваш диапазон строк B2: B10. Заполните другой столбец

=(MATCH(B2,B$2:B2,1)-(ROW(B2)-ROW(B$2)))>0

Строка должна меняться при копировании, поэтому вторая строка должна быть, например:

=(MATCH(B3,B$2:B3,1)-(ROW(B3)-ROW(B$2)))>0

Это сигнал ИСТИНА, если текущая строка содержит первый экземпляр строки (если вы дадите ей пару минут, вы сможете понять, что она делает). Поэтому, если вы посчитаете количество TRUE с помощью COUNTIF (), вы должны получить количество различных строк.

0 голосов
/ 15 сентября 2009

Вы можете использовать подпрограмму vba:

Sub Uniques()

    Dim rng As Range
    Dim c As Range
    Dim clnUnique As New Collection

    Set rng = Range("A1:A8")

    On Error Resume Next
    For Each c In rng
        clnUnique.Add c.Value, CStr(c.Value)
    Next c
    On Error GoTo 0

    MsgBox "Number of unique values = " & clnUnique.Count

End Sub

Если вам нужно отобразить уникальные результаты, вы можете просто просмотреть коллекцию и записать значения в свой лист.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...