Профессиональные приемы работы в Microsoft Excel

Обмен опытом => Microsoft Excel => Тема начата: Jurass от 07.06.2019, 05:52

Название: Подсчет уникальных значений с учетом фильтра
Отправлено: Jurass от 07.06.2019, 05:52
Доброго времени суток, уважаемые профессионалы!
Нужна помощь в создании формулы для подсчета уникальных значений  столбца [Line number] с учетом фильтра. Т.е. чтобы считать уникальные значения при изменении условий фильтра в любом из столбцов. Исходник во вложении. Заранее благодарен
Название: Re: Подсчет уникальных значений с учетом фильтра
Отправлено: boa от 07.06.2019, 09:06
Здравствуйте, Jurass
я бы использовал UDF
Function Unique_Values_Under_Filter&(rng As Range)
'' Author:  boa
'' Written: 07.06.2019
'  Description: возвращает количество уникальных видимых значений в массиве

    Application.Volatile True
    Dim col As New Collection
    On Error Resume Next
    Dim a: For Each a In rng
      If a.Rows.Hidden = False And Not IsNull(a) Then col.Add CStr(a.Value), CStr(a.Value)
    Next a
    Unique_Values_Under_Filter = col.Count
End Function
Название: Re: Подсчет уникальных значений с учетом фильтра
Отправлено: Jurass от 07.06.2019, 09:48
Большое спасибо!
Для создания данной функции в аналогичных файлах куда необходимо загружать данный код?
Название: Re: Подсчет уникальных значений с учетом фильтра
Отправлено: boa от 07.06.2019, 10:13
да
но можно функцию зашить в надстройку, а надстройку запускать при открытии аналогичных файлов
на сапорте (https://support.office.com/ru-ru/article/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D1%85-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9-%D0%B2-excel-2f06c10b-3622-40d6-a1b2-b6748ae8231f) почитайте.
Название: Re: Подсчет уникальных значений с учетом фильтра
Отправлено: Jurass от 07.06.2019, 10:24
Ещё раз спасибо!
Название: Re: Подсчет уникальных значений с учетом фильтра
Отправлено: _Boroda_ от 07.06.2019, 13:11
Вариант формулой

=СЧЁТ(1/(ПОИСКПОЗ(Таблица3[Line Number
Номер линии];ЕСЛИ(ПРОМЕЖУТОЧНЫЕ.ИТОГИ(103;ДВССЫЛ("g"&СТРОКА(Таблица3[Ag/Ug])));Таблица3[Line Number
Номер линии]);)=СТРОКА(Таблица3[Ag/Ug])-1))