Sanja, нужным результатом был подсчёт количества значений с диапазоне, образованном фильтром/фильтрами. Да и Вы вроде всё правильно поняли, если судить по формуле - иначе зачем было вводить параметр
Цитата
'vis - отбирать только в видимых ячейках, не обязательный, 0(False) - во всех (по умолчанию), 1(True) - только в видимых
Так или иначе, нашёл подходящее решение, делюсь им. Вот ссылка на автора, от себя добавил одну строку (на игнорирование пустых ячеек). Код:
Код
Function CountUnicalVisible (ByVal RangeArea As Range) As Long
Dim objDict As Variant
Set objDict = CreateObject("Scripting.Dictionary")
For Each TheCell In RangeArea
If Not TheCell.Parent.Rows(TheCell.Row).Hidden And _
Not TheCell.Parent.Columns(TheCell.Column).Hidden And _
Not IsEmpty(TheCell) And _
Not objDict.exists(TheCell.Value) Then _
objDict.Add TheCell.Value, ""
Next
CountUnicalVisible = objDict.Count
objDict = Empty
End Function
Sanja, огромное спасибо за совет и код. Но, возможно, я недостаточно явно выразил цель в первом посте: необходим подсчёт уникальных значений в видимом с учётом фильтрации диапазоне, с фильтрацией по любому количеству критериев. Но предложенный Вами код считает по всему диапазону, без учёта фильтрации, по заранее заданному критерию. Нашёл вариант, который, судя по описанию, выглядит подходящим. У функции два аргумента - "ДИАПАЗОН" и "ТолькоВидимые". Первый задаёт диапазон отбора уникальных значений, второй принимает значения "0" или "1" и, соответственно, учитывает или не учитывает скрытые ячейки диапазона. Выглядит это так: Но работает не совсем так, как сказано в описании - у функции нет аргумента "ТолькоВидимые". Или я что-то делаю не так, или автор из коммерческих соображений опубликовал только часть кода. Посмотрите, пожалуйста, и подтвердите/опровергните мою догадку. P.S.: указание на работоспособность кода видел в этом сообщении,
Цель: подсчитать количество уникальных значений в ячейках, отобранных с помощью фильтра (или нескольких). Пример во вложении, поиск уникальных значений осуществляется в столбце "В". Для подсчёта используется следующая формула: =СУММПРОИЗВ((ЧАСТОТА(ПОИСКПОЗ(B2:B10&"";B2:B10&"";0);ПОИСКПОЗ(B2:B10&"";B2:B10&"";0))>0)*ПРОМЕЖУТОЧНЫЕ.ИТОГИ(3;СМЕЩ(A2;СТРОКА(A2:A11)-СТРОКА(A2);))) Работает хорошо, за исключением одной детали: при отдельных условиях фильтрации в столбце "D" выдаёт ложный результат. Во вложенном файле попробуйте в этом столбце отфильтровать ячейки по критерию "сдан" - результат будет 2 (вместо 3). Насколько понял, эта ошибка связана с тем, что формула работает следующим образом: - ячейки просматриваются сверху вниз - в качестве уникального учитывается первое найденное среди повторяющихся значений - если ячейка, содержащая такое значение, скрывается в результате фильтрации, формула выдаёт 0 - в том числе, и в случаях, когда остаются видимыми остальные повторяющиеся значения На примере из вложения: - значение "5А" встречается в ячейках "В3", "В7", "В10" - в качестве уникального учитывается значение в ячейке "В3" - если в столбце "D" фильтровать по критерию "не сдан", формула выдаст верный результат, т. к. ячейка "В3" осталась видимой - если в столбце "D" фильтровать по критерию "сдан", формула выдаст неверный результат, т. к. ячейка "В3" перестала быть видимой
Можно ли как-то исправить недостаток имеющейся формулы? Если да, что именно следует изменить. Если нет, подскажите, пожалуйста, какую формулу можно использовать для решения вопроса..
Посчитать количество групп по критерию, Подсчёт заранее не известного количества групп, все элементы каждой из которых удовлетворяют определённому критерию
Огромное спасибо, это именно то, что нужно. Не затруднит ли Вас описать ход мыслей, благодаря которому появилась эта формула, и принцип её действия (в целом понятен, но причина использования отдельных переменных остаётся загадкой)?
Посчитать количество групп по критерию, Подсчёт заранее не известного количества групп, все элементы каждой из которых удовлетворяют определённому критерию
Спасибо, интересный вариант. Если не получится с формулами, пожалуй, воспользуюсь им.
Можно ли реализовать через формулы следующую последовательность действий? 1. в столбце "класс" посчитать количество уникальных значений, тем самым получив общее количество классов (в примере их 3) 2. в столбце "класс" ещё раз посчитать количество уникальных значений, но уже по критерию "ячейка в столбце "D" должна быть пустой", получив количество классов, где хотя бы один человек не сдал тест (в примере такое значение одно - это 5А класс) 3. вычесть из значения, получившегося в п. 1, значение, получившееся в п. 2 (в примере это будет 3-1). В итоге получится искомое значение.
Посчитать количество групп по критерию, Подсчёт заранее не известного количества групп, все элементы каждой из которых удовлетворяют определённому критерию
Приветствую. Есть список учащихся, состоящий из колонок "ФИО", "класс", "тест" (куда вписывается название учебной дисциплины) и "статус" (которая заполняется по факту сдачи работ на проверку). Названия классов заранее неизвестны. Вернее, на самом деле известны, конечно, но таблица предназначены для заполнения людьми, далёкими от использования формул. Поэтому включение в неё конкретных значений из столбца "класс" нежелательно (т. к. вызовет необходимость пусть и примитивного, но редактирования формулы, когда в списке будут фигурировать другие классы). Необходимо посчитать количество классов, все ученики которых сдали назначенные им тесты (в примере таких классов два - 5Б и 5В; если в колонке "D" проставить статус "сдан" в каждой строке, станет три - 5А, 5Б, 5В; если добавить строку вида "Иван Иванов 5Г математика сдан", будет четыре; если добавить к этой строке ещё и строку "Пётр Петров русский язык 5Г", снова станет три). Выполнима ли данная задача с помощью формул? Если да, прошу помочь.