Как выбрать уникальные значения из списка excel
Перейти к содержимому

Как выбрать уникальные значения из списка excel

  • автор:

Фильтрация или удаление повторяющихся значений

Фильтрация уникальных значений и удаление повторяющихся — это две тесно связанные друг с другом задачи, поскольку в результате их выполнения отображается список уникальных значений. Однако между этими двумя задачами существует важное различие. При фильтрации уникальных значений повторяющиеся значения временно скрываются, тогда как в ходе удаления повторяющихся значений они удаляются без возможности восстановления. Значение считается повторяющимся, если все значения в одной строке полностью совпадают со значениями в другой. Повторяющиеся значения определяются значением, которое отображается в ячейке, а не тем, которое в ней хранится. Например, если в различных ячейках содержатся одинаковые значения даты в разных форматах («08.12.2010» и «8 дек 2010»), они считаются уникальными. Рекомендуется сначала отфильтровать уникальные значения или применить к ним условное форматирование, чтобы перед удалением повторяющихся значений убедиться в том, что будет получен ожидаемый результат.

Примечание: Если формулы в ячейках разные, а значения одинаковые, такие значения считаются повторяющимися. Например, если в ячейке A1 содержится формула =2-1, а в ячейке A2 — формула =3-2 и к ячейкам применено одинаковое форматирование, такие значения считаются повторяющимися. Одинаковые значения, к которым применены различные числовые форматы, не считаются повторяющимися. Например, если значение в ячейке A1 имеет формат 1,00, а в ячейке A2 — формат 1, эти значения не являются повторяющимися.

Фильтрация уникальных значений

Кнопка

  1. Выделите диапазон ячеек или убедитесь в том, что активная ячейка находится в таблице.
  2. На вкладке Данные в группе Сортировка и фильтр нажмите кнопку Дополнительно.
Задача Необходимые действия
Фильтрация диапазона ячеек или таблицы на месте Выделите диапазон ячеек и щелкните Фильтровать список на месте.
Копирование результатов фильтрации в другое место Выделите диапазон ячеек, щелкните Скопировать результат в другое место, а затем в поле Копировать в введите ссылку на ячейку.

Примечание: При копировании результатов фильтрации в другое место будут скопированы уникальные значения из выбранного диапазона. Исходные данные при этом не изменятся.

Дополнительные параметры

Удаление повторяющихся значений

При удалении повторяющихся значений данные удаляются только из выделенного диапазона ячеек или таблицы. Любые другие значения, которые находятся за пределами этого диапазона ячеек или таблицы, не изменяются и не перемещаются. Так как данные удаляются без возможности восстановления, перед удалением повторяющихся записей рекомендуется скопировать исходный диапазон ячеек или таблицу на другой лист или в другую книгу.

Примечание: Нельзя удалить повторяющиеся значения, если выделенные фрагмент содержит структурированные данные или промежуточные итоги. Перед удалением повторяющихся значений нужно удалить структуру и промежуточные итоги.

Кнопка

  1. Выделите диапазон ячеек или убедитесь в том, что активная ячейка находится в таблице.
  2. На вкладке Данные в разделе Работа с данными нажмите кнопку Удалить дубликаты.

Совет: Если в диапазоне ячеек или таблице содержится много столбцов, а нужно выбрать только несколько из них, снимите флажок Выделить все и выделите только нужные столбцы.

Применение условного форматирования к уникальным или повторяющимся значениям

Для наглядного отображения уникальных или повторяющихся значений к ним можно применить условное форматирование. Например, выделение повторяющихся данных определенным цветом помогает найти и (при необходимости) удалить их.

  1. Выделите одну или несколько ячеек в диапазоне, таблице или отчете сводной таблицы.
  2. На вкладке Главная в группе Стили щелкните Условное форматирование, наведите указатель на пункт Правила выделения ячеек и выберите Повторяющиеся значения.
  3. В диалоговом окне Создать правило форматирования выберите нужные параметры и нажмите кнопку ОК.

Применение правил расширенного условного форматирования к уникальным или повторяющимся значениям

Вы можете создать правило для выделения уникальных или повторяющихся значений на листе определенным цветом. Это особенно полезно, когда в данных содержится несколько наборов повторяющихся значений.

  1. Выделите одну или несколько ячеек в диапазоне, таблице или отчете сводной таблицы.
  2. На вкладке Главная в группе Стили щелкните Условное форматирование и выберите пункт Создать правило.
  3. В списке Стиль выберите пункт Классический, а затем в списке Форматировать только первые или последние значения выберите пункт Форматировать только уникальные или повторяющиеся значения.
  4. В списке значения в выбранном диапазоне выберите пункт уникальные или повторяющиеся.
  5. В списке Форматировать с помощью выберите нужный вариант форматирования уникальных или повторяющихся значений.

Изменение правил расширенного условного форматирования

Вы можете отредактировать существующее правило, чтобы изменить условное форматирование, применяемое к уникальным или повторяющимся данным.

  1. Выделите одну или несколько ячеек в диапазоне, таблице или отчете сводной таблицы.
  2. На вкладке Главная в группе Стили щелкните Условное форматирование и выберите пункт Управление правилами.
  3. Убедитесь, что в списке Показать правила форматирования для выбран соответствующий лист или таблица.
  4. Выберите правило и нажмите кнопку Изменить правило.
  5. Выберите нужные параметры и нажмите кнопку ОК.

Фильтр уникальных значений или удаление повторяющихся значений

В Excel существует несколько способов фильтрации уникальных значений или удаления повторяющихся значений:

Фильтр

    Чтобы отфильтровать уникальные значения, щелкните Данные >Сортировка & Фильтр >Дополнительно.

Удаление дубликатов

Чтобы удалить повторяющиеся значения, щелкните Data > Data Tools>Remove Duplicates (Удалить дубликаты).

Сведения о фильтрации уникальных значений или удалении повторяющихся значений

Фильтрация уникальных значений и удаление повторяющихся значений — это две схожие задачи, так как цель состоит в том, чтобы представить список уникальных значений. Однако существует критическое различие: при фильтрации уникальных значений повторяющиеся значения скрыты только временно. Однако удаление повторяющихся значений означает, что вы окончательно удаляете повторяющиеся значения.

Повторяющееся значение — это значение, в котором все значения по крайней мере в одной строке идентичны всем значениям в другой строке. Сравнение повторяющихся значений зависит от того, что отображается в ячейке, а не от базового значения, хранящегося в ячейке. Например, если у вас одно и то же значение даты в разных ячейках, одна из которых имеет формат «08.03.2006», а вторая — «8 марта 2006 г.», значения будут уникальными.

Перед удалением дубликатов проверьте: Перед удалением повторяющихся значений рекомендуется сначала попытаться отфильтровать (или условно отформатировать) уникальные значения, чтобы убедиться, что вы достигли ожидаемых результатов.

Фильтрация уникальных значений

  1. Выберите диапазон ячеек или убедитесь, что активная ячейка находится в таблице.
  2. Щелкните Данные > Дополнительно (в группе Фильтр & сортировки ).

Важно: Вставьте текст оповещения здесь.

Фильтр

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

  • Щелкните Фильтровать список на месте.

Чтобы скопировать результаты фильтра в другое расположение, выполните следующие действия:

Кнопка

  • Установите переключатель скопировать результат в другое место.
  • В поле Копировать введите ссылку на ячейку.
  • Кроме того, нажмите кнопку Свернуть диалоговое окно

Разверните

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

Уникальные значения из диапазона будут скопированы в новое расположение.

Удаление повторяющихся значений

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

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

Удаление двойников

  1. Выберите диапазон ячеек или убедитесь, что активная ячейка находится в таблице.
  2. На вкладке Данные щелкните Удалить дубликаты (в группе Инструменты для работы с данными ).

  • В разделе Столбцы выберите один или несколько столбцов.
  • Чтобы быстро выбрать все столбцы, нажмите кнопку Выбрать все.
  • Чтобы быстро очистить все столбцы, щелкните Отменить выбор всех. Если диапазон ячеек или таблицы содержит много столбцов и требуется выбрать только несколько столбцов, может оказаться проще нажать кнопку Отменить выбор всех, а затем в разделе Столбцы выберите эти столбцы.

Примечание: Данные будут удалены из всех столбцов, даже если на этом шаге не выбраны все столбцы. Например, если выбрать Столбец1 и Столбец2, но не Столбец3, то ключ, используемый для поиска дубликатов, будет значением ОБА столбца & Column2. Если в этих столбцах найден дубликат, будет удалена вся строка, включая другие столбцы в таблице или диапазоне.

Проблемы при удалении дубликатов из контурных или промежуточных данных

Невозможно удалить повторяющиеся значения из контурных данных, которые выделены или имеют промежуточные итоги. Чтобы удалить дубликаты, необходимо удалить как контур, так и промежуточные итоги. Дополнительные сведения см. в разделах Структура списка данных на листе и Удаление промежуточных итогов.

Условное форматирование уникальных или повторяющихся значений

Примечание: Поля в области «Значения» отчета сводной таблицы нельзя условно форматировать по уникальным или повторяющимся значениям.

Быстрое форматирование

  1. Выделите одну или несколько ячеек в диапазоне, таблице или отчете сводной таблицы.
  2. На вкладке Главная в группе Стиль щелкните небольшую стрелку для параметра Условное форматирование, а затем выберите пункт Правила выделения ячеек и выберите Повторяющиеся значения.

Важно: Вставьте текст оповещения здесь.

Быстрое форматирование

Расширенное форматирование

  1. Выделите одну или несколько ячеек в диапазоне, таблице или отчете сводной таблицы.
  2. На вкладке Главная в группе Стили щелкните стрелку условного форматирования, а затем щелкните Управление правилами , чтобы открыть всплывающее окно Диспетчер правил условного форматирования .

Важно: Вставьте текст оповещения здесь.

Управление правилами

Кнопка

  • Выполните одно из следующих действий:
    • Чтобы добавить условный формат, щелкните Создать правило , чтобы открыть всплывающее окно Новое правило форматирования .
    • Чтобы изменить условный формат, сначала убедитесь, что в разделе Показать правила форматирования для списка выбран соответствующий лист или таблица. При необходимости выберите другой диапазон ячеек, нажав кнопку Свернуть

    Разверните

    во всплывающем окне Применяется к временно скрыть его. Выберите новый диапазон ячеек на листе, а затем снова разверните всплывающее окно

    В Excel в Интернете можно удалить повторяющиеся значения.

    Удаление повторяющихся значений

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

    Важно: Вы всегда можете нажать кнопку Отменить, чтобы вернуть данные после удаления дубликатов. При этом рекомендуется скопировать исходный диапазон ячеек или таблицу на другой лист или книгу перед удалением повторяющихся значений.

    1. Выберите диапазон ячеек или убедитесь, что активная ячейка находится в таблице.
    2. На вкладке Данные щелкните Удалить дубликаты .
    3. В диалоговом окне Удаление дубликатов снимите флажки столбцов, в которых не нужно удалять повторяющиеся значения.

    Примечание: Данные будут удалены из всех столбцов, даже если на этом шаге не выбраны все столбцы. Например, если выбрать Столбец1 и Столбец2, но не Столбец3, то ключ, используемый для поиска дубликатов, будет значением ОБА столбца & Column2. При обнаружении дубликата в столбцах Column1 и Column2 будет удалена вся строка, включая данные из Столбца 3.

    Примечание: Если вы хотите вернуть данные, просто нажмите кнопку Отменить (или нажмите клавиши CTRL+Z на клавиатуре).

    Дополнительные сведения

    Вы всегда можете задать вопрос эксперту в Excel Tech Community или получить поддержку в сообществах.

    Как получить список уникальных(не повторяющихся) значений?

    Представим себе большой список различных наименований, ФИО, табельных номеров и т.п. А необходимо из этого списка оставить список все тех же наименований, но чтобы они не повторялись — т.е. удалить из этого списка все дублирующие записи. Как это иначе называют: создать список уникальных элементов, список неповторяющихся, без дубликатов. Для этого существует несколько способов: встроенными средствами Excel, встроенными формулами и, наконец, при помощи кода Visual Basic for Application(VBA) и сводных таблиц. В этой статье рассмотрим каждый из вариантов.

    • При помощи встроенных возможностей Excel 2007 и выше
    • При помощи Расширенного фильтра
    • При помощи формул
    • При помощи кодов Visual Basic for Application(VBA) — макросы, включая универсальный код выборки из произвольного диапазона
    • При помощи сводных таблиц

    при помощи встроенных возможностей Excel 2007 и выше
    В Excel 2007 и 2010 это сделать проще простого — есть специальная команда, которая так и называется — Удалить дубликаты (Remove Duplicates) . Расположена она на вкладке Данные (Data) подраздел Работа с данными (Data tools)

    Как использовать данную команду. Выделяете столбец(или несколько) с теми данными, в которых надо удалить дублирующие записи. Идете на вкладку Данные (Data)Удалить дубликаты (Remove Duplicates) .

    Если выделить один столбец, но рядом с ним будут еще столбцы с данными(или хотя бы один столбец), то Excel предложит выбрать: расширить диапазон выборки этим столбцом или оставить выделение как есть и удалить данные только в выделенном диапазоне. Важно помнить, что если не расширить диапазон, то данные будут изменены лишь в одном столбце, а данные в прилегающем столбце останутся без малейших изменений.

    Появится окно с параметрами удаления дубликатов

    Ставите галочки напротив тех столбцов, дубликаты в которых надо удалить и жмете Ок. Если в выделенном диапазоне так же расположены заголовки данных, то лучше поставить флаг Мои данные содержат заголовки, чтобы случайно не удалить данные в таблице(если они вдруг полностью совпадают со значением в заголовке).

    Способ 1: Расширенный фильтр
    В случае с Excel 2003 все посложнее. Там нет такого инструмента, как Удалить дубликаты. Но зато есть такой замечательный инструмент, как Расширенный фильтр. В 2003 этот инструмент можно найти в ДанныеФильтрРасширенный фильтр. Прелесть этого метода в том, с его помощью можно не портить исходные данные, а создать список в другом диапазоне. В 2007-2010 Excel, он тоже есть, но немного запрятан. Расположен на вкладке Данные (Data) , группа Сортировка и фильтр (Sort & Filter)Дополнительно (Advanced)
    Как его использовать: запускаем указанный инструмент — появляется диалоговое окно:

    • Обработка: Выбираем Скопировать результат в другое место (Copy to another location) .
    • Исходный диапазон (List range) : Выбираем диапазон с данными(в нашем случае это А1:А51 ).
    • Диапазон критериев (Criteria range) : в данном случае оставляем пустым.
    • Поместить результат в диапазон (Copy to) : указываем первую ячейку для вывода данных — любую пустую(на картинке — E2 ).
    • Ставим галочку Только уникальные записи (Unique records only) .
    • Жмем Ок.

    Примечание: если вы хотите поместить результат на другой лист, то просто так указать другой лист не получится. Вы сможете указать ячейку на другом листе, но. Увы и ах. Excel выдаст сообщение, что не может скопировать данные на другие листы. Но и это можно обойти, причем довольно просто. Надо всего лишь запустить Расширенный фильтр с того листа, на который хотим поместить результат. А в качестве исходных данных выбираем данные с любого листа — это дозволено.

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

    Для этого надо просто в пункте Обработка выбрать Фильтровать список на месте (Filter the list, in-place) .

    Способ 2: Формулы
    Этот способ сложнее в понимании для неопытных пользователей, но зато он создает список уникальных значений, не изменяя при этом исходные данные. Ну и он более динамичен: если изменить данные в исходной таблице, то изменится и результат. Иногда это бывает полезно. Попытаюсь объяснить на пальцах что и к чему: допустим, список с данными у Вас расположен в столбце А ( А1:А51 , где А1 — заголовок). Выводить список мы будем в столбец С , начиная с ячейки С2 . Формула в C2 будет следующая:
    <=ИНДЕКС( $A$2:$A$51 ;НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ( $C$1:C1 ; $A$2:$A$51 )=0;СТРОКА( $A$1:$A$50 ));1))>
    <=INDEX( $A$2:$A$51 ;SMALL(IF(COUNTIF( $C$1:C1 ; $A$2:$A$51 )=0;ROW( $A$1:$A$50 ));1))>
    Детальный разбор работы данной формулы приведен в статье: Как просмотреть этапы вычисления формул
    Надо отметить, что эта формула является формулой массива. Об этом могут сказать фигурные скобки, в которые заключена данная формула. А вводится такая формула в ячейку сочетанием клавиш — Ctrl + Shift + Enter (при этом сами скобки вводить не надо — они появятся сами после ввода формулы тремя клавишами Ctrl + Shift + Enter ). После того, как мы ввели эту формулу в C2 мы её должны скопировать и вставить в несколько строк так, чтобы точно отобразить все уникальные элементы. Как только формула в нижних ячейках вернет #ЧИСЛО! (#NUM!) — это значит все элементы отображены и ниже протягивать формулу нет смысла. Чтобы ошибку избежать и сделать формулу более универсальной(не протягивая каждый раз до появления ошибки) можно использовать нехитрую проверку:
    для Excel 2007 и выше:
    <=ЕСЛИОШИБКА(ИНДЕКС( $A$2:$A$51 ;НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ( $C$1:C1 ; $A$2:$A$51 )=0;СТРОКА( $A$1:$A$50 ));1));"")>
    <=IFERROR(INDEX( $A$2:$A$51 ;SMALL(IF(COUNTIF( $C$1:C1 ; $A$2:$A$51 )=0;ROW( $A$1:$A$50 ));1));"")>
    для Excel 2003:
    <=ЕСЛИ(ЕОШ(НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ( $C$1:C1 ; $A$2:$A$51 )=0;СТРОКА( $A$1:$A$50 ));1));"";ИНДЕКС( $A$2:$A$51 ;НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ( $C$1:C1 ; $A$2:$A$51 )=0;СТРОКА( $A$1:$A$50 ));1)))>
    <=IF(ISERR(SMALL(IF(COUNTIF( $C$1:C1 ; $A$2:$A$51 )=0;ROW( $A$1:$A$50 ));1));"";INDEX( $A$2:$A$51 ;SMALL(IF(COUNTIF( $C$1:C1 ; $A$2:$A$51 )=0;ROW( $A$1:$A$50 ));1)))>
    Тогда вместо ошибки #ЧИСЛО! (#NUM!) у вас будут пустые ячейки(не совсем пустые, конечно — с формулами :-)).
    Чуть подробнее про отличия и нюансы формул ЕСЛИОШИБКА и ЕСЛИ(ЕОШ можно прочесть в этой статье: Как в ячейке с формулой вместо ошибки показать 0

    Для пользователей Excel 2021 выше, а так же пользователей Excel 365(с активной подпиской) — использовать формулы для извлечения уникальных элементов проще простого. В этих версиях появилась функция УНИК (UNIQUE) , которая как раз получает список уникальных значений на основании переданного диапазона:
    =УНИК( $A$2:$A$51 )
    =UNIQUE($A$2:$A$51)
    Что самое важное в данном случае — это функция динамического массива и вводить её надо только в одну ячейку C2, а результат она поместит сама в нужное количество ячеек.

    Способ 3: код VBA
    Данный подход потребует разрешения макросов и базовых знаний о работе с ними. Если не уверены в своих знаниях для начала рекомендую прочитать эти статьи:

    • Что такое макрос и где его искать? к статье приложен видеоурок
    • Что такое модуль? Какие бывают модули? потребуется, чтобы понять куда вставлять приведенные ниже коды

    Оба приведенных ниже кода следует помещать в стандартный модуль. Макросы должны быть разрешены.

    Исходные данные оставим в том же порядке — список с данными расположен в столбце » А «( А1:А51 , где А1 — заголовок). Только выводить список мы будем не в столбец С , а в столбец Е , начиная с ячейки Е2 :

    Sub Extract_Unique() Dim vItem, avArr, li As Long ReDim avArr(1 To Rows.Count, 1 To 1) With New Collection On Error Resume Next For Each vItem In Range("A2", Cells(Rows.Count, 1).End(xlUp)).Value 'Cells(Rows.Count, 1).End(xlUp) – определяет последнюю заполненную ячейку в столбце А .Add vItem, CStr(vItem) If Err = 0 Then li = li + 1: avArr(li, 1) = vItem Else: Err.Clear End If Next End With If li Then [E2].Resize(li).Value = avArr End Sub

    Sub Extract_Unique() Dim vItem, avArr, li As Long ReDim avArr(1 To Rows.Count, 1 To 1) With New Collection On Error Resume Next For Each vItem In Range(«A2», Cells(Rows.Count, 1).End(xlUp)).Value ‘Cells(Rows.Count, 1).End(xlUp) – определяет последнюю заполненную ячейку в столбце А .Add vItem, CStr(vItem) If Err = 0 Then li = li + 1: avArr(li, 1) = vItem Else: Err.Clear End If Next End With If li Then [E2].Resize(li).Value = avArr End Sub

    С помощью данного кода можно извлечь уникальные не только из одного столбца, но и из любого диапазона столбцов и строк. Если вместо строки
    Range(«A2», Cells(Rows.Count, 1).End(xlUp)).Value
    указать Selection.Value , то результатом работы кода будет список уникальных элементов из выделенного на активном листе диапазона. Только тогда неплохо бы и ячейку вывода значений изменить — вместо [E2] поставить ту, в которой данных нет.
    Так же можно указать конкретный диапазон:

    Range("A2:C30").Value

    Или другой столбец:

    Range("C2", Cells(Rows.Count, 3).End(xlUp)).Value

    Range(«C2», Cells(Rows.Count, 3).End(xlUp)).Value

    здесь отдельно стоит обратить внимание то, что в данном случае помимо изменения А2 на С2 изменилась и цифра 1 на 3. Это указание на номер столбца, в котором необходимо определить последнюю заполненную ячейку, чтобы код не просматривал лишние ячейки. Подробнее про это можно прочитать в статье: Как определить последнюю ячейку на листе через VBA?

    Универсальный код выбора уникальных значений
    Код ниже можно применять для любых диапазонов. Достаточно запустить его, указать диапазон со значениями для отбора только неповторяющихся(допускается выделение более одного столбца) и ячейку для вывода результата. Указанные ячейки будут просмотрены, из них будут отобраны только уникальные значения(пустые ячейки при этом пропускаются) и результирующий список будет записан, начиная с указанной ячейки.

    Sub Extract_Unique() Dim x, avArr, li As Long Dim avVals Dim rVals As Range, rResultCell As Range On Error Resume Next 'запрашиваем адрес ячеек для выбора уникальных значений Set rVals = Application.InputBox("Укажите диапазон ячеек для выборки уникальных значений", "Запрос данных", "A2:A51", Type:=8) If rVals Is Nothing Then 'если нажата кнопка Отмена Exit Sub End If 'если указана только одна ячейка - нет смысла выбирать If rVals.Count = 1 Then MsgBox "Для отбора уникальных значений требуется указать более одной ячейки", vbInformation, "www.excel-vba.ru" Exit Sub End If 'отсекаем пустые строки и столбцы вне рабочего диапазона Set rVals = Intersect(rVals, rVals.Parent.UsedRange) 'если указаны только пустые ячейки вне рабочего диапазона If rVals Is Nothing Then MsgBox "Недостаточно данных для выбора значений", vbInformation, "www.excel-vba.ru" Exit Sub End If avVals = rVals.Value 'запрашиваем ячейку для вывода результата Set rResultCell = Application.InputBox("Укажите ячейку для вставки отобранных уникальных значений", "Запрос данных", "E2", Type:=8) If rResultCell Is Nothing Then 'если нажата кнопка Отмена Exit Sub End If 'определяем максимально возможную размерность массива для результата ReDim avArr(1 To Rows.Count, 1 To 1) 'при помощи объекта Коллекции(Collection) 'отбираем только уникальные записи, 'т.к. Коллекции не могут содержать повторяющиеся значения With New Collection On Error Resume Next For Each x In avVals If Len(CStr(x)) Then 'пропускаем пустые ячейки .Add x, CStr(x) 'если добавляемый элемент уже есть в Коллекции - возникнет ошибка 'если же ошибки нет - такое значение еще не внесено, 'добавляем в результирующий массив If Err = 0 Then li = li + 1 avArr(li, 1) = x Else 'обязательно очищаем объект Ошибки Err.Clear End If End If Next End With 'записываем результат на лист, начиная с указанной ячейки If li Then rResultCell.Cells(1, 1).Resize(li).Value = avArr End Sub

    Sub Extract_Unique() Dim x, avArr, li As Long Dim avVals Dim rVals As Range, rResultCell As Range On Error Resume Next ‘запрашиваем адрес ячеек для выбора уникальных значений Set rVals = Application.InputBox(«Укажите диапазон ячеек для выборки уникальных значений», «Запрос данных», «A2:A51», Type:=8) If rVals Is Nothing Then ‘если нажата кнопка Отмена Exit Sub End If ‘если указана только одна ячейка — нет смысла выбирать If rVals.Count = 1 Then MsgBox «Для отбора уникальных значений требуется указать более одной ячейки», vbInformation, «www.excel-vba.ru» Exit Sub End If ‘отсекаем пустые строки и столбцы вне рабочего диапазона Set rVals = Intersect(rVals, rVals.Parent.UsedRange) ‘если указаны только пустые ячейки вне рабочего диапазона If rVals Is Nothing Then MsgBox «Недостаточно данных для выбора значений», vbInformation, «www.excel-vba.ru» Exit Sub End If avVals = rVals.Value ‘запрашиваем ячейку для вывода результата Set rResultCell = Application.InputBox(«Укажите ячейку для вставки отобранных уникальных значений», «Запрос данных», «E2», Type:=8) If rResultCell Is Nothing Then ‘если нажата кнопка Отмена Exit Sub End If ‘определяем максимально возможную размерность массива для результата ReDim avArr(1 To Rows.Count, 1 To 1) ‘при помощи объекта Коллекции(Collection) ‘отбираем только уникальные записи, ‘т.к. Коллекции не могут содержать повторяющиеся значения With New Collection On Error Resume Next For Each x In avVals If Len(CStr(x)) Then ‘пропускаем пустые ячейки .Add x, CStr(x) ‘если добавляемый элемент уже есть в Коллекции — возникнет ошибка ‘если же ошибки нет — такое значение еще не внесено, ‘добавляем в результирующий массив If Err = 0 Then li = li + 1 avArr(li, 1) = x Else ‘обязательно очищаем объект Ошибки Err.Clear End If End If Next End With ‘записываем результат на лист, начиная с указанной ячейки If li Then rResultCell.Cells(1, 1).Resize(li).Value = avArr End Sub

    Способ 4: Сводные таблицы
    Несколько нестандартный способ извлечения уникальных значений.

    • Выделяем один или несколько столбцов в таблице, переходим на вкладку Вставка (Insert) -группа Таблица (Table)Сводная таблица (PivotTable)
    • В диалоговом окне Создание сводной таблицы (Create PivotTable) проверяем правильность выделения диапазона данных (или установить новый источник данных)
    • указываем место размещения Сводной таблицы:
      • На новый лист (New Worksheet)
      • На существующий лист (Existing Worksheet)

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

      Отбор уникальных сводной таблицей

      • выделил диапазон A1:B51 на листе Извлечение по критерию
      • вызвал меню вставки сводной таблицы: вкладка Вставка (Insert) -группа Таблица (Table)Сводная таблица (PivotTable)
        выбрал вставить на новый лист (New Worksheet)
      • назвал этот лист Уникальные сводной таблицей
      • поле Данные поместил в область строк
      • поле ФИО в область фильтра. Почему? Чтобы удобно было выбирать одно или несколько ФИО и в сводной отображался бы список уникальных месяцев только для выбранных фамилий

      В чем неудобство работы со сводными в данном случае: при изменении в исходных данных сводную таблицу придется обновлять вручную: Выделить любую ячейку сводной таблицы -Правая кнопка мыши —Обновить (Refresh) или вкладка Данные (Data)Обновить все (Refresh all)Обновить (Refresh) . А если исходные данные пополняются динамически и того хуже — надо будет заново указывать диапазон исходных данных. И еще один минус — данные внутри сводной таблицы нельзя менять. Поэтому если с полученным списком необходимо будет работать в дальнейшем, то после создания нужного списка при помощи сводной его надо скопировать и вставить на нужный лист.

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

      В приложенном примере помимо описанных приемов, записана чуть более сложная вариация извлечения уникальных элементов формулой и кодом, а именно: извлечение уникальных элементов по критерию. О чем речь: если в одном столбце фамилии, а во втором( В ) некие данные(в файле это месяцы) и требуется извлечь уникальные значения столбца В только для выбранной фамилии. Примеры подобных извлечений уникальных расположены на листе Извлечение по критерию.

      Tips_All_ExtractUnique.xls (108,0 KiB, 19 070 скачиваний)

      Статья помогла? Поделись ссылкой с друзьями!

      Извлечение уникальных элементов из диапазона

      remove-duplicates1.png

      Начиная с 2007-й версии функция удаления дубликатов является стандартной — найти ее можно на вкладке Данные — Удаление дубликатов (Data — Remove Duplicates) : В открывшемся окне нужно с помощью флажков задать те столбцы, по которым необходимо обеспечивать уникальность. Т.е. если включить все флажки, то будут удалены только полностью совпадающие строки. Если включить только флажок заказчик, то останется только по одной строке для каждого заказчика и т.д.

      Способ 2. Расширенный фильтр

      • Выделяем наш список компаний в Исходный диапазон (List Range) .
      • Ставим переключатель в положение Скопировать результат в другое место (Copy to another location) и указываем пустую ячейку.
      • Включаем (самое главное!) флажок Только уникальные записи(Uniqe records only) и жмем ОК.

      Получите список без дубликатов:

      Если требуется искать дубликаты не по одному, а по нескольким столбцам, то можно предварительно склеить их в один, сделав, своего рода, составной ключ с помощью функции СЦЕПИТЬ (CONCATENATE) :

      remove-duplicates2.png

      Тогда дальнейшая задача будет сводиться к поиску дубликатов уже в одном столбце.

      Способ 3. Выборка уникальных записей формулой

      Чуть более сложный способ, чем первые два, но зато — динамический, т.е. с автоматическим пересчетом, т.е. если список редактируется или в него дописываются еще элементы, то они автоматически проверяются на уникальность и отбираются. В предыдущих способах при изменении исходного списка нужно будет заново запускать Расширенный фильтр или жать на кнопку Удаление дубликатов.

      Итак, снова имеем список беспорядочно повторяющихся элементов. Например, такой:

      Первая задача — пронумеровать всех уникальных представителей списка, дав каждому свой номер (столбец А на рисунке). Для этого вставляем в ячейку А2 и копируем затем вниз до упора следующую формулу:

      =ЕСЛИ(СЧЁТЕСЛИ(B$1:B2;B2)=1;МАКС(A$1:A1)+1;»»)

      В английской версии это будет:

      =IF(COUNTIF(B$1:B2;B2)=1;MAX(A$1:A1)+1;»»)

      Эта формула проверяет сколько раз текущее наименование уже встречалось в списке (считая с начала), и если это количество =1, т.е. элемент встретился первый раз — дает ему последовательно возрастающий номер.

      Для упрощения адресации дадим нашим диапазонам (например, исходя из того, что в списке может быть до 100 элементов) имена. Это можно сделать в новых версиях Excel на вкладке Формулы — Диспетчер имен (Formulas — Name manager) или в старых версиях — через меню Вставка — Имя — Присвоить (Insert — Name — Define) :

      • диапазону номеров (A1:A100) — имя NameCount
      • всему списку с номерами (A1:B100) — имя NameList

      Теперь осталось выбрать из списка NameList все элементы имеющие номер — это и будут наши уникальные представители. Сделать это можно в любой пустой ячейке соседних столбцов, введя туда вот такую формулу с известной функцией ВПР (VLOOKUP) и скопировав ее вниз на весь столбец:

      или в английской версии Excel:

      =IF(MAX(NameCount)

      Эта формула проходит сверху вниз по столбцу NameCount и выводит все позиции списка с номерами в отдельную таблицу:

      Ссылки по теме

      • Выделение дубликатов по одному или нескольким столбцам в списке цветом
      • Запрет ввода повторяющихся значений
      • Извлечение уникальных значений при помощи надстройки PLEX
  • Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *