Как посчитать уникальное количество значений в Excel: от простых формул до Power Query

Подсчёт уникальных значений в Microsoft Excel — задача, с которой сталкивается каждый аналитик, бухгалтер или менеджер. Казалось бы, что может быть проще: выбрать столбец и узнать, сколько в нём неповторяющихся элементов? Но на практике даже опытные пользователи допускают ошибки, когда речь идёт о больших массивах данных, пробелах или регистрозависимых значениях.

В этой статье мы разберём 5 проверенных методов — от элементарных формул до продвинутых инструментов вроде Power Query. Вы узнаете, как избежать типичных ловушек (например, когда функция COUNTIF игнорирует пустые ячейки), как обработать данные с учётом регистра, и почему сводные таблицы иногда показывают неверные результаты. А в конце — бонус: сравнительная таблица скорости работы каждого метода на 100 000 строк.

Если вы работаете с отчётами, базами клиентов или инвентаризацией, умение быстро выделять уникальные записи сэкономит часы ручной работы. Но прежде чем переходить к формулам, давайте чётко определим, что такое «уникальное значение» в контексте Excel. Это не просто «неповторяющийся текст» — здесь важны нюансы: учитываются ли пробелы, регистр, скрытые символы? Ответы на эти вопросы изменят результат на 20–30%.

Например, для Excel строки «Иванов» и « иванов» (с пробелом в начале) — это два разных значения. А если в ячейке есть невидимый символ переноса строки (CHAR(10)), то даже функция TRIM не поможет его удалить. Мы научимся обрабатывать такие случаи без потери данных.

1. Базовый метод: функция COUNTIF для небольших таблиц

Самый простой способ посчитать уникальные значения — использовать комбинацию функций COUNTIF и SUMPRODUCT. Этот метод подходит для таблиц до 10 000 строк и не требует дополнительных столбцов.

Формула выглядит так:

=SUMPRODUCT(1/COUNTIF(диапазон; диапазон))

Где диапазон — это столбец с данными, например A2:A100.

Разберём, как это работает:

  1. COUNTIF(диапазон; диапазон) возвращает массив, где для каждого значения указано, сколько раз оно встречается.
  2. 1/COUNTIF(...) заменяет каждое число на дробь 1/n, где n — количество повторений.
  3. SUMPRODUCT суммирует все дроби, и в итоге остаются только единицы (уникальные значения).

Пример: если в столбце значения «Яблоко» (3 раза), «Груша» (2 раза), «Банан» (1 раз), формула вернёт 1/3 + 1/3 + 1/3 + 1/2 + 1/2 + 1/1 = 3 (три уникальных значения).

⚠️ Внимание: Этот метод не учитывает регистр! Слова «Текст» и «текст» будут считаться одинаковыми. Для регистрозависимого подсчёта используйте Power Query (раздел 5).

2. Функция UNIQUE в Excel 365 и 2021: революция или маркетинг?

В новых версиях Excel (начиная с 2021 и Microsoft 365) появилась функция UNIQUE, которая радикально упрощает задачу. Она не просто считает уникальные значения, а возвращает их список — это удобно для дальнейшей обработки.

Синтаксис:

=ROWS(UNIQUE(диапазон))

Где ROWS подсчитывает количество строк в массиве, возвращённом UNIQUE.

Преимущества метода:

  • 🔹 Работает с динамическими массивами (результат обновляется автоматически при изменении данных).
  • 🔹 Учитывает пустые ячейки (в отличие от COUNTIF).
  • 🔹 Можно комбинировать с SORT для упорядочивания: =SORT(UNIQUE(A2:A100)).

Но есть и подводные камни:

  • 🚫 Не работает в Excel 2019 и старше.
  • 🚫 Тормозит на больших диапазонах (>50 000 строк).
  • 🚫 Не различает регистр (как и COUNTIF).
📊 Какую версию Excel вы используете?
Excel 2010-2016
Excel 2019
Excel 2021/365
Mac-версия Excel
Другая

3. Сводные таблицы: универсальный инструмент с подвохом

Сводные таблицы — классический способ анализа данных, но при подсчёте уникальных значений они часто вводят пользователей в заблуждение. Дело в том, что по умолчанию сводная таблица показывает количество записей, а не уникальных значений.

Чтобы получить правильный результат:

  1. Выделите исходный диапазон и создайте сводную таблицу (Вставка → Сводная таблица).
  2. Перетащите столбец с данными в область «Строки» и «Значения».
  3. Щёлкните по полю в области «Значения»«Параметры полей значений» → выберите «Число уникальных значений».

Пример на скриншоте ниже (данные — список городов):

ГородКоличество записейУникальные значения
Москва121
Санкт-Петербург81
Казань51
(пусто)31
Итого284
⚠️ Внимание: Если в данных есть скрытые символы (например, CHAR(160) — неразрывный пробел), сводная таблица посчитает «Москва» и «Москва​» (с невидимым символом) как два разных значения. Чтобы этого избежать, предварительно очистите данные функцией =CLEAN(TRIM(A2)).

Удалить лишние пробелы (TRIM)

Заменить неразрывные пробелы (=SUBSTITUTE(A2; CHAR(160); " "))

Проверить на скрытые символы (CLEAN)

Удалить дубликаты (Удаление дубликатов на вкладке Данные)

-->

4. Power Query: обработка миллионов строк без тормозов

Если вам нужно проанализировать более 100 000 строк, обычные формулы Excel будут работать слишком медленно или вообще выдадут ошибку. Здесь на помощь приходит Power Query — инструмент для извлечения, преобразования и загрузки данных (доступен в Excel 2016+).

Алгоритм действий:

  1. Выделите диапазон → вкладка «Данные»«Из таблицы/диапазона»Power Query).
  2. В открывшемся редакторе выделите столбец → «Главная»«Группировка».
  3. В настройках группировки выберите «Число уникальных строк» и укажите столбец для подсчёта.
  4. Нажмите «Закрыть и загрузить».

Преимущества Power Query:

  • 🔹 Обрабатывает миллионы строк без зависаний.
  • 🔹 Учитывает регистр (в отличие от формул!).
  • 🔹 Можно сохранять шаги обработки и обновлять данные одним кликом.

Пример кода на языке M (для ручного ввода в Power Query):


let

Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],

Группировка = Table.Group(Источник, {"Столбец1"}, {{"Уникальные", each Table.RowCount(Table.Distinct(_)), type number}})

in

Группировка

Как ускорить Power Query в 2 раза?

Используйте Table.Buffer для кэширования данных в памяти:


let

Источник = Table.Buffer(Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content]),

...

Это особенно актуально при многоступенчатых преобразованиях.

5. VBA-макрос: автоматизация для повторяющихся задач

Если вам приходится считать уникальные значения ежедневно (например, в отчётах), имеет смысл написать простой макрос на VBA. Он будет работать в любых версиях Excel и позволит обрабатывать данные по расписанию.

Пример макроса для подсчёта уникальных значений в выделенном диапазоне:


Sub CountUniqueValues()

Dim rng As Range

Dim dict As Object

Set dict = CreateObject("Scripting.Dictionary")

On Error Resume Next

Set rng = Selection.SpecialCells(xlCellTypeConstants)

On Error GoTo 0

If rng Is Nothing Then

MsgBox "Выделите диапазон с данными!", vbExclamation

Exit Sub

End If

Dim cell As Range

For Each cell In rng

dict(cell.Value) = 1

Next cell

MsgBox "Уникальных значений: " & dict.Count, vbInformation

End Sub

Как использовать:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Выделите диапазон в Excel и запустите макрос (Alt + F8).
⚠️ Внимание: Макрос различает регистр! Если нужно игнорировать регистр, замените dict(cell.Value) на dict(UCase(cell.Value)).

6. Сравнение методов: что выбрать для вашей задачи?

Чтобы вам было проще ориентироваться, мы собрали ключевые характеристики каждого способа в одной таблице:

Метод Макс. строк Учитывает регистр Скорость Сложность Версии Excel
COUNTIF + SUMPRODUCT 10 000 ❌ Нет ⚡ Быстро ⭐⭐ 2007+
UNIQUE + ROWS 50 000 ❌ Нет ⚡⚡ Средне 2021/365
Сводная таблица 100 000 ❌ Нет ⚡⚡ Средне ⭐⭐ 2007+
Power Query 1 000 000+ ✅ Да ⚡⚡⚡ Медленно ⭐⭐⭐ 2016+
VBA Неограничено ✅ Да ⚡⚡⚡⚡ Очень быстро ⭐⭐⭐⭐ 2003+

Критическая ошибка большинства пользователей: выбор метода без учёта размера данных. Например, применение SUMPRODUCT к таблице с 500 000 строк заставит Excel «зависнуть» на часы, тогда как Power Query справится за минуты.

Рекомендации по выбору:

  • 📊 Для отчётов до 10 000 строкCOUNTIF + SUMPRODUCT.
  • 📈 Для Excel 365 и небольших таблицUNIQUE + ROWS.
  • 📂 Для больших данных (100K+ строк)Power Query или VBA.
  • 🔍 Если важен регистр → только Power Query или VBA.

FAQ: Ответы на частые вопросы

Почему функция UNIQUE не работает в моём Excel?

Функция UNIQUE доступна только в Excel 2021 и Microsoft 365. Если у вас более старая версия, используйте альтернативные методы из этой статьи (например, COUNTIF + SUMPRODUCT или сводные таблицы).

Чтобы проверить версию Excel, перейдите в Файл → Учётная запись → О программе Excel.

Как посчитать уникальные значения по нескольким столбцам?

Для подсчёта уникальных комбинаций по нескольким столбцам (например, «Город + Продавец») используйте:

  1. В Power Query: объедините столбцы перед группировкой (Table.AddColumn с оператором &).
  2. В формулах: создайте вспомогательный столбец с конкатенацией (=A2 & "|" & B2), затем примените COUNTIF к нему.

Пример для Power Query:


= Table.Group(

Таблица,

{"Столбец1", "Столбец2"},

{{"Уникальные комбинации", each Table.RowCount(Table.Distinct(_)), type number}}

)

Можно ли посчитать уникальные значения с учётом условия (например, только для строк, где «Сумма > 1000»)?

Да, для этого комбинируйте методы с функцией FILTER (в Excel 365) или IF (в старых версиях).

Пример для Excel 365:

=ROWS(UNIQUE(FILTER(A2:A100; B2:B100 > 1000)))

Пример для Excel 2016:

=SUMPRODUCT(--(B2:B100>1000); 1/COUNTIFS(A2:A100; A2:A100; B2:B100; ">1000"))
Почему сводная таблица показывает неверное количество уникальных значений?

Наиболее частые причины:

  • 🔸 В данных есть скрытые символы (пробелы, переносы строк). Используйте =CLEAN(TRIM(A2)) для очистки.
  • 🔸 Столбец содержит ошибки (#N/A, #VALUE!). Сводная таблица учитывает их как уникальные значения.
  • 🔸 В настройках группировки выбрано «Количество», а не «Число уникальных значений».

Проверьте данные с помощью функции =LEN(A2) — если длина строки не совпадает с видимым количеством символов, значит, есть скрытые знаки.

Как автоматически обновлять подсчёт уникальных значений при изменении данных?

Способы автоматизации:

  • 🔄 Для формул: используйте таблицы Excel ( Ctrl + T ). Формулы внутри таблицы обновляются автоматически.
  • 🔄 Для Power Query: нажмите «Обновить все» на вкладке «Данные» или настройте автоматическое обновление (Свойства соединения → Обновить каждые N минут).
  • 🔄 Для VBA: добавьте макрос в событие Worksheet_Change, чтобы он запускался при редактировании листа:
    
    

    Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Me.Range("A2:A100")) Is Nothing Then

    CountUniqueValues

    End If

    End Sub