Excel сортировка по количеству повторений
В этой статье я хочу рассказать, как можно подсчитать количество повторений какого-либо значения в таблице или в ячейке. Начнем по порядку. Имеется таблица:
И необходимо подсчитать количество повторений каждого наименования:
Самый простой способ - создать сводную таблицу, поместив в область строк и в область значений данные столбца А. Сводная сделает все сама. Подробнее про создание и использование сводных таблиц можно узнать в этой статье с видеоуроком: Общие сведения о сводных таблицах
Но если по каким-то причинам сводная не Ваш вариант - в Excel имеется функция СЧЁТЕСЛИ (COUNTIF) , при помощи которой все это можно сделать тоже буквально за секунды. Если количество повторений каждого наименования необходимо вывести в столбец В таблицы, а сами наименования расположены в столбце А:
=СЧЁТЕСЛИ( $A$2:$A$30 ; A2 )
=COUNTIF( $A$2:$A$30 , A2 )
Диапазон ( $A$2:$A$30 ) - указываются ячейки диапазона, в которых записаны значения, количество которых необходимо подсчитать. Главная особенность: данный аргумент может быть исключительно ссылкой на ячейку или диапазон ячеек. Недопустимо указывать произвольный массив значений.
Критерий ( A2 ) - указывается ссылка на ячейку или непосредственно значение для подсчета. Т.е. можно указать и так: =СЧЁТЕСЛИ( $A$2:$A$30 ;"Яблоко") . Помимо этого можно применять символы подстановки: ? и *. Т.е. указав в качестве Критерия "*банан*" можно подсчитать количество ячеек, в которых встречается слово "банан" (банановый, банан, бананы, банановый сок, сто бананов, три банана и орех и т.п.). А указав "банан*" — значения, начинающиеся на "банан" (бананы, банановый сок, банановая роща и т.п.). "?" — заменяет лишь один символ, т.е. указав "бан?н" можно подсчитать строки и со значением "банан" и со значением "банон" и т.д. Если в качестве критерия указать =СЧЁТЕСЛИ( $A$2:$A$30 ;"*") , то будут подсчитаны все текстовые значения. Числовые значения при этом игнорируются. Данные подстановочные символы (* и ?) не получится применить к числовым значениям - исключительно к тексту. Т.е. если если указать в качестве критерия "12*", то числа 1234, 123, 120 и т.п. не будут подсчитаны. Для подсчета числовых значений следует применять операторы сравнения: =СЧЁТЕСЛИ( $A$2:$A$30 ;">12")
Подсчитать числа, которые больше нуля: =СЧЁТЕСЛИ( $A$2:$A$30 ;">0")
Подсчитать количество непустых ячеек: =СЧЁТЕСЛИ( $A$2:$A$30 ;"<>")
Как видно из второго рисунка - там наименования не повторяются, хотя в таблице они все записаны вперемешку. Я не буду заострять на этом внимание - я уже описывал это в статье Как получить список уникальных(не повторяющихся) значений? и при необходимости можно воспользоваться любым описанным в ней методом.
Если необходимо подсчитать количество повторений на основании нескольких условий(значений), то начиная с 2007 Excel это легко можно сделать при помощи функции СЧЁТЕСЛИМН(COUNTIFS). Синтаксис функции почти такой же, как у СЧЁТЕСЛИ(COUNTIF), только условий и диапазонов больше:
=СЧЁТЕСЛИМН( $A$2:$A$30 ; A2 ; $B$2:$B$30 ; B2 )
предполагается, что условия записаны в столбце В
По сути идет просто перечисление:
=СЧЁТЕСЛИМН(Диапазон_условий1;Условие1; Диапазон_условий2;Условие2; Диапазон_условий3;Условие3; и т.д.)
Так же не могу не написать про небольшую особенность функции СЧЁТЕСЛИ (а так же СЧЁТЕСЛИМН , СУММЕСЛИ , СУММЕСЛИМН и им подобных) - данные функции всегда стремятся преобразовать все значения аргументов к типам(в отличии от той же ВПР , которая к типам относится очень бережно и ничего не преобразует). Что это значит. Если у нас в ячейке записано число 23 - оно будет воспринято как число. Если тоже число будет записано как текст - "23" , то функция преобразует его сначала в число, а потом уже будет работать с ним. Т.е. и 23 и "23" у нас будут считаться одинаковым значением. С одной стороны это хорошо, но иногда такое поведение может сыграть злую шутку. Например, у Вас в ячейках расположены некие номера счетов, длина которых более 15-ти символов и могут иметь ведущие нули:
000 34889913131323455
00 34889913131323455
000 34889913131323477
как видно, первые два числа почти одинаковые, но у первого числа три ведущих нуля спереди, а второго - два. И это разные счета. А третий счет вообще отличается на последние цифры. Но СЧЁТЕСЛИ после преобразования все три этих значения будет считать как число 348899131313234 00 и если записать функцию так: =СЧЁТЕСЛИ( $A$1:$A$3 ; A1 ) , то она вернет значение 3. Особо обращаю внимание на тот факт, что все числа после 15-го знака будут преобразованы в нули. Эти особенности всегда необходимо учитывать при использовании данных функций, чтобы не попасть в неловкую ситуацию, когда подсчет будет некорректным.
Еще один вариант подсчета значений. Бывают случаи, когда список расположен вовсе не в таблице, а в одной ячейке( $D$1 ):
Дыня Киви Груша Яблоко Дыня Груша Груша Арбуз Яблоко Банан Яблоко Яблоко Банан Яблоко Яблоко Дыня Дыня Киви Банан Дыня Арбуз Дыня Киви Яблоко Дыня Груша Яблоко Киви Арбуз
Здесь СЧЁТЕСЛИ точно не поможет. Но в Excel полно других функций и все можно сделать так же достаточно просто:
=(ДЛСТР( $D$1 )-ДЛСТР(ПОДСТАВИТЬ( $D$1 ; D3 ;"")))/ДЛСТР( D3 )
ДЛСТР - подсчитывает количество символов в указанной ячейке/строке( $D$1 , D3 )
ПОДСТАВИТЬ (текст; старый_текст; новый_текст) - заменяет в указанном тексте заданный символ на любое другое заданное значение. По умолчанию заменяет все повторы указанного символа. Именно это и положено в основу алгоритма. На примере значения Банан( D3 ) пошаговый разбор формулы:
- при помощи функции ДЛСТР получаем количество символов в строке с исходным текстом( $D$1 ) =(170-ДЛСТР(ПОДСТАВИТЬ( $D$1 ; D3 ;"")))/ДЛСТР( D3 ) ;
- при помощи функции ПОДСТАВИТЬ заменяем в строке с исходным текстом( $D$1 ) все значения Банан( D3 ) на пусто и при помощи ДЛСТР получаем количество символов строки после этой замены =(170-155)/ДЛСТР( D3 ) ;
- вычитаем из общего количества символов количество символов в строке после замены и делим результат на количество символов в критерии =(170-155)/5 .
Получаем число 3. Что нам и требовалось.
Но тут есть и более каверзная ситуация - когда у нас диапазон ячеек, в каждой из которых наше слово может встречаться более одного раза. И подсчитать надо ВСЕ повторения. Диапазон для подсчета повторений у нас будет в ячейках A1:A10 . Слово для подсчета повторений запишем в ячейку B1 (там будет все тоже слово " банан "):
Базируясь на формуле выше можно написать такую:
=СУММПРОИЗВ((ДЛСТР( A1:A10 )-ДЛСТР(ПОДСТАВИТЬ( A1:A10 ; B1 ;"")))/ДЛСТР( B1 ))
И простая функция пользователя, которая так же подсчитывает повторения внутри ячейки:
Function GetRepeat(sTxt As String, sCntWord As String) GetRepeat = (Len(sTxt) - Len(Replace(sTxt, sCntWord, ""))) / Len(sCntWord) End Function
Чтобы правильно использовать приведенный код, необходимо сначала ознакомиться со статьей Что такое функция пользователя(UDF)?. Вкратце: скопировать текст кода выше, перейти в редактор VBA( Alt + F11 ) -создать стандартный модуль(Insert -Module) и в него вставить скопированный текст. После чего функцию можно будет вызвать из Диспетчера функций( Ctrl + F3 ), отыскав её в категории Определенные пользователем (User Defined Functions) .
Синтаксис функции:
=GetRepeat( $D$1 ; D3 )
sTxt - текст, в котором подсчитываем кол-во вхождения.
sCntWord - текст для подсчета. Может быть символом или словом.
Пример Подсчета повторений.xls (70,5 KiB, 12 804 скачиваний)
В примере:
Лист1 - необходимо посчитать количество повторов значений и вывести их рядом в виде убывающего списка.
Лист2 - то же самое, но в качестве повторяющихся значений уже выступает строчный диапазон ячеек.
В примере:
Лист1 - необходимо посчитать количество повторов значений и вывести их рядом в виде убывающего списка.
Лист2 - то же самое, но в качестве повторяющихся значений уже выступает строчный диапазон ячеек. Kaktus8
В примере:
Лист1 - необходимо посчитать количество повторов значений и вывести их рядом в виде убывающего списка.
Лист2 - то же самое, но в качестве повторяющихся значений уже выступает строчный диапазон ячеек. Автор - Kaktus8
Дата добавления - 02.04.2019 в 18:40
Большое спасибо за отклик!
Хотелось бы, однако, с помощью формул это решить и, желательно, без промежуточных ячеек.
Если, конечно, это возможно.
Большое спасибо за отклик!
Хотелось бы, однако, с помощью формул это решить и, желательно, без промежуточных ячеек.
Если, конечно, это возможно. Kaktus8
Обе первые формулы массивные, вводятся одновременным нажатием Контрл Шифт Ентер
Обе первые формулы массивные, вводятся одновременным нажатием Контрл Шифт Ентер _Boroda_
Обе первые формулы массивные, вводятся одновременным нажатием Контрл Шифт Ентер Автор - _Boroda_
Дата добавления - 02.04.2019 в 20:24
Только два момента, если можно, поправьте пожалуйтста!
1. Число.
При добавлении в столбец А новых чисел после 24 строки не происходит обновления.
2. Цифры.
В диапазоне M-W, - 3,4,8,9 строчках, последние цифры исчезли.
По пункту 1: я так понял, нужно вместо A$24 (в диапазонах) ввести А$900, например?
На всякий случай спрашиваю, вдруг ещё какая-то тонкость есть.
По пункту 2: по поводу последних цифр, - не могу предположить. Пока не смог разобраться.
По пункту 2: чтобы введённые после 17 строки, также обрабатывались, достаточно вместо $K$17 ввести $K$900, например, и всё?
Только два момента, если можно, поправьте пожалуйтста!
1. Число.
При добавлении в столбец А новых чисел после 24 строки не происходит обновления.
2. Цифры.
В диапазоне M-W, - 3,4,8,9 строчках, последние цифры исчезли.
По пункту 1: я так понял, нужно вместо A$24 (в диапазонах) ввести А$900, например?
На всякий случай спрашиваю, вдруг ещё какая-то тонкость есть.
По пункту 2: по поводу последних цифр, - не могу предположить. Пока не смог разобраться.
По пункту 2: чтобы введённые после 17 строки, также обрабатывались, достаточно вместо $K$17 ввести $K$900, например, и всё? Kaktus8
Только два момента, если можно, поправьте пожалуйтста!
1. Число.
При добавлении в столбец А новых чисел после 24 строки не происходит обновления.
2. Цифры.
В диапазоне M-W, - 3,4,8,9 строчках, последние цифры исчезли.
По пункту 1: я так понял, нужно вместо A$24 (в диапазонах) ввести А$900, например?
На всякий случай спрашиваю, вдруг ещё какая-то тонкость есть.
По пункту 2: по поводу последних цифр, - не могу предположить. Пока не смог разобраться.
По пункту 2: чтобы введённые после 17 строки, также обрабатывались, достаточно вместо $K$17 ввести $K$900, например, и всё? Автор - Kaktus8
Дата добавления - 02.04.2019 в 22:08
Здравствуйте! Есть перечень с повторяющимися значениями. Необходимо выбрать дубликаты и отсортировать их с помощью формулы массива. Помогите, пожалуйста, доработать формулу, чтобы работала сортировка.
Здравствуйте! Есть перечень с повторяющимися значениями. Необходимо выбрать дубликаты и отсортировать их с помощью формулы массива. Помогите, пожалуйста, доработать формулу, чтобы работала сортировка. barina
=ЕСЛИОШИБКА(ИНДЕКС(список; ПОИСКПОЗ(НАИМЕНЬШИЙ(СЧЁТЕСЛИ(список; "<"&список); СТРОКА(1:1)); СЧЁТЕСЛИ(список; "<"&список); 0));"")
Диапазон "список" см в диспетчере имен (ctrl+f3)
=ЕСЛИОШИБКА(ИНДЕКС(список; ПОИСКПОЗ(НАИМЕНЬШИЙ(СЧЁТЕСЛИ(список; "<"&список); СТРОКА(1:1)); СЧЁТЕСЛИ(список; "<"&список); 0));"")
Диапазон "список" см в диспетчере имен (ctrl+f3) Manyasha
ЯД: 410013299366744 WM: R193491431804
=ЕСЛИОШИБКА(ИНДЕКС(список; ПОИСКПОЗ(НАИМЕНЬШИЙ(СЧЁТЕСЛИ(список; "<"&список); СТРОКА(1:1)); СЧЁТЕСЛИ(список; "<"&список); 0));"")
Диапазон "список" см в диспетчере имен (ctrl+f3) Автор - Manyasha
Дата добавления - 24.06.2015 в 12:51
Пример в файле.
Формула допстолбца:
Если мало сортировки по двум буквам, можно добавить проверку третьей, четвертой.
Формула, формирующая список:
Формулы быстрые, облегченные, вычисления сведены к минимуму.
Единственная проблема - я составил формулы извлечения уникальных, а нужен список дублей.
Минимальная правка. Пишем вместо сравнения неравенство - получаем список дублей:
Неточность. Швыдков. В примере фамилия повторяется несколько раз, автор в списке показывает фамилию только один раз. Правильно? Ведь не один - два дубля фамилии.
Опять же плюсовый камешек в огород доп. столбца - формулу можно легко изменить и для этого случая - добавить проверку количества вхождений в диапазоне выше проверяемой строки - СЧЕТЕСЛИ
Пример в файле.
Формула допстолбца:
Если мало сортировки по двум буквам, можно добавить проверку третьей, четвертой.
Формула, формирующая список:
Формулы быстрые, облегченные, вычисления сведены к минимуму.
Единственная проблема - я составил формулы извлечения уникальных, а нужен список дублей.
Минимальная правка. Пишем вместо сравнения неравенство - получаем список дублей:
Неточность. Швыдков. В примере фамилия повторяется несколько раз, автор в списке показывает фамилию только один раз. Правильно? Ведь не один - два дубля фамилии.
Опять же плюсовый камешек в огород доп. столбца - формулу можно легко изменить и для этого случая - добавить проверку количества вхождений в диапазоне выше проверяемой строки - СЧЕТЕСЛИ vikttur
Пример в файле.
Формула допстолбца:
Если мало сортировки по двум буквам, можно добавить проверку третьей, четвертой.
Формула, формирующая список:
Формулы быстрые, облегченные, вычисления сведены к минимуму.
Единственная проблема - я составил формулы извлечения уникальных, а нужен список дублей.
Минимальная правка. Пишем вместо сравнения неравенство - получаем список дублей:
Неточность. Швыдков. В примере фамилия повторяется несколько раз, автор в списке показывает фамилию только один раз. Правильно? Ведь не один - два дубля фамилии.
Опять же плюсовый камешек в огород доп. столбца - формулу можно легко изменить и для этого случая - добавить проверку количества вхождений в диапазоне выше проверяемой строки - СЧЕТЕСЛИ Автор - vikttur
Дата добавления - 24.06.2015 в 13:09
Про поиск и подсветку дубликатов в разных ячейках и диапазонах я уже не раз писал, но что делать если нужно найти и, возможно, удалить повторяющиеся слова внутри ячейки? Например, мы имеем вот такую таблицу с данными (разделителями могут быть не обязательно пробелы):
Хорошо видно, что некоторые имена в списках внутри ячеек повторяются. Давайте посмотрим, что можно с этим сделать.
Способ 1. Ищем повторения: текст по столбцам и формула массива
Это не самый удобный и быстрый, но зато самый простой вариант решения задачи "на коленке". Выделим исходный список и разобъем его на столбцы по пробелам с помощью команды Данные - Текст по столбцам (Data - Text to columns) . В открывшемся окне трёхшагового Мастера выберем формат По разделителю (By delimiter) на первом шаге и поставим флажок Пробел (Space) на втором:
Если в исходных данных могут быть лишние пробелы, то лучше включить и опцию Считать последовательные разделители одним (Treat consecutive delimiters as one) - это избавит нас от лишних столбцов.
На третьем шаге в поле Поместить в зададим пустую ячейку рядом с таблицей, чтобы результаты не затёрли нам исходные данные и нажмём на Готово (Finish) :
Наши данные разделятся по ячейкам. Останется подсчитать количество повторов в каждой строке с помощью небольшой, но хитрой формулы массива:
В английской версии это будет =SUMPRODUCT(N(COUNTIF(B2:G2,B2:G2)>1))
Давайте разберём логику её работы на примере первой строки.
- Сначала мы с помощью формулы СЧЁТЕСЛИ( B2:G2 ; B2:G2 ) вычисляем по очереди количество вхождений каждого имени в диапазон B2:G2 и получаем на выходе массив 2,1,2,1>, т.к. Иван встречается в первой строке 1 раз, Елена - 2 раза, Сергей - 1 и т.д.
- Проверяем с помощью СЧЁТЕСЛИ(B2:G2;B2:G2) >1 какие из полученных чисел больше единицы, т.е. где у нас повторы. На выходе эта формула выдаст нам массив результатов проверки в виде .
- Переводим логические значения ЛОЖЬ и ИСТИНА в более удобные для подсчета 0 и 1, соответственно, с помощью функции Ч. На выходе получаем массив >.
- Суммируем все элементы получившегося массива функцией СУММПРОИЗВ. Можно было бы использовать и обычную функцию СУММ, но тогда пришлось бы жать вместо привычного Enter сочетание клавиш Ctrl + Shift + Enter , чтобы ввести формулу как формулу массива.
По получившемуся столбцу можно легко отфильтровать строки с повторами и работать потом с ними дальше уже вручную.
Минусы такого способа, впрочем, весьма очевидны: при изменении в исходных данных придётся повторять всю процедуру заново, дубликаты не очень заметны и удалять их тоже надо врукопашную. Поэтому идём дальше.
Способ 2. Выделение цветом повторов внутри ячейки макросом
Если дубликаты нужно именно наглядно показать, то удобнее будет использовать для этого специальный макрос. Откроем редактор Visual Basic одноимённой кнопкой на вкладке Разработчик (Developer - Visual Basic) или сочетанием клавиш Alt + F11 . Вставим в книгу новый пустой модуль через меню Insert - Module и скопируем туда вот такой код:
Теперь можно вернуться в главное окно Excel, выделить ячейки с текстом и запустить созданный макрос через кнопку Макросы на вкладке Разработчик (Developer - Macros) или сочетанием клавиш Alt + F8 . Этот макрос проходит по всем выделенным ячейкам и помечает повторения красным цветом шрифта прямо внутри ячейки:
Если нужно, чтобы цветом выделялись только клоны, но не первые вхождения (т.е. только вторая и третья, но не первая Алиса, например), то достаточно будет просто убрать из кода строку 20.
Способ 3. Выводим повторы в соседний столбец
Если повторы внутри ячеек нужно не просто подсветить, а явным образом вывести, например, в соседний столбец, то удобнее будет использовать для этого макрофункцию, созданную по образу предыдущего макроса. Добавим в редакторе Visual Basic новый модуль и вставим туда код нашей функции GetDuplicates:
Эта функция, как легко догадаться, принимает в качестве единственного аргумента ячейку с текстом и выводит в качестве результата все повторы, которые там найдет:
Способ 4. Удаление повторов внутри ячейки макросом
Если нужно просто удалить дубликаты внутри ячейки, чтобы все оставшиеся там слова не повторялись, то макрос будет похож на предыдущий, но попроще:
Способ 5. Удаление повторов внутри ячейки через Power Query
Этот способ использует бесплатную надстройку Excel для обработки данных под названием Power Query. Для Excel 2010-2013 скачать её можно с сайта Microsoft, а в Excel 2016-2019 она уже встроена по умолчанию. Огромным плюсом этого варианта является возможность автоматического обновления - если в будущем исходные данные изменятся, то нам не придется заново проделывать всю обработку (как в Способе 1) или запускать макрос (как в Способе 4) - достаточно будет просто обновить созданный запрос.
Сначала наши данные нужно загрузить в Power Query. Проще всего для этого превратить нашу таблицу в "умную" сочетанием клавиш Ctrl + T или кнопкой Форматировать как таблицу на вкладке Главная (Home - Format as Table) , а затем нажать кнопку Из таблицы/диапазона (From table/range) на вкладке Power Query (если у вас Excel 2010-2013) или на вкладке Данные (если у вас Excel 2016 или новее):
Поверх окна Excel откроется окно редактора запросов Power Query с загруженными туда нашими данными:
Дальше делаем следующую цепочку действий:
Удаляем ненужный пока шаг Измененный тип (Changed Type) справа в панели применённых шагов с помощью крестика слева от шага.
Чтобы можно было потом идентифицировать принадлежность каждого имени к исходной строке - добавляем столбец с нумерацией строк на вкладке Добавление столбца - Столбец индекса - От 1 (Add Column - Index Column - From 1) :
Выделяем столбец с именами и жмём на вкладке Преобразование - Разделить столбец - По разделителю (Transform - Split Column - By delimiter) , а в открывшемся окне выбираем деление по каждому пробелу и - главное - деление на строки, а не на столбцы в расширенных параметрах:
После нажатия на ОК увидим следующее:
Теперь выделяем оба столбца (удерживая клавишу Ctrl или Shift ) и удаляем дубликаты через Главная - Удалить строки - Удалить дубликаты (Home - Remove Rows - Remove Duplicates) .
Осталось собрать всё обратно в ячейки :) Для этого выделим столбец Индекс и используем команду Группировать по на вкладке Преобразование (Transform - Group By) со следующими параметрами:
После нажатия на ОК наши имена сгруппируются во вложенные таблицы, имитирующие начальные ячейки - только уже без повторов. Увидеть содержимое свёрнутых таблиц можно, если щёлкнуть мышью в фон ячейки рядом со словом Table (но не в слово Table!):
Осталось вытащить все имена из первой колонки каждой таблицы и склеить их через пробел. Это можно сделать с помощью небольшой формулы на встроенном в Power Query языке М. Выберем на вкладке Добавление столбца команду Настраиваемый столбец (Add Column - Custom Column) и введём в открывшееся окно имя нового столбца и формулу (с соблюдением регистра!):
Осталось удалить ненужные более столбцы Индекс и Ячейки, щелкнув по их заголовкам правой кнопкой мыши и выбрав команду Удалить столбцы (Remove Columns) и выгрузить результаты на лист через Главная - Закрыть и загрузить - Закрыть и загрузить в (Home - Close & Load - Close & Load to..) :
Задача решена! Если в будущем данные в исходной "умной" таблице изменятся или к ней будут дописаны новые строки, то достаточно будет просто обновить запрос, щёлкнув по результирующей зелёной таблице правой кнопкой мыши и выбрав команду Обновить или нажав сочетание клавиш Ctrl + Alt + F5 .
Начиная с 2007-й версии функция удаления дубликатов является стандартной - найти ее можно на вкладке Данные - Удаление дубликатов (Data - Remove Duplicates) :
В открывшемся окне нужно с помощью флажков задать те столбцы, по которым необходимо обеспечивать уникальность. Т.е. если включить все флажки, то будут удалены только полностью совпадающие строки. Если включить только флажок заказчик, то останется только по одной строке для каждого заказчика и т.д.
Способ 2. Расширенный фильтр
Если у вас Excel 2003 или старше, то для удаления дубликатов и вытаскивания из списка уникальных (неповторяющихся) элементов можно использовать Расширенный фильтр (Advanced Filter) из меню (вкладки) Данные (Data) .
Предположим, что у нас имеется вот такой список беспорядочно повторяющихся названий компаний:
Выбираем в меню Данные - Фильтр - Расширенный фильтр (Data - Filter - Advanced Filter) . Получаем окно:
- Выделяем наш список компаний в Исходный диапазон (List Range) .
- Ставим переключатель в положение Скопировать результат в другое место (Copy to another location) и указываем пустую ячейку.
- Включаем (самое главное!) флажок Только уникальные записи(Uniqe records only) и жмем ОК.
Получите список без дубликатов:
Если требуется искать дубликаты не по одному, а по нескольким столбцам, то можно предварительно склеить их в один, сделав, своего рода, составной ключ с помощью функции СЦЕПИТЬ (CONCATENATE) :
Тогда дальнейшая задача будет сводиться к поиску дубликатов уже в одном столбце.
Способ 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 и выводит все позиции списка с номерами в отдельную таблицу:
Читайте также: