Excel удалить дубликаты с учетом регистра

excel как удалить дубликаты ячеек с учетом регистра?

GuitarFan

Дата: Вторник, 05.11.2013, 05:45 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 11


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

excel как удалить дубликаты ячеек с учетом регистра?
Сейчас если есть 2 строки
Hello
hello

После удаления дубликатов остается одна строка. Мне нужно, чтобы эти строки считались разными, так как регистр разный.

 

Ответить

AlexM

Дата: Вторник, 05.11.2013, 08:16 |
Сообщение № 2

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

GuitarFan

Дата: Вторник, 05.11.2013, 08:40 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 11


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Тем, что он не подходит.
Если я напишу в одном столбце
Hello
hello
Выделю столбец, нажму Данные — Дополнительно (появится окно Расширенный фильтр), затем выберу скопировать результат в другое место, жму Только уникальные записи и вуаля..
Остается только 1 запись Hello

 

Ответить

AlexM

Дата: Вторник, 05.11.2013, 08:51 |
Сообщение № 4

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

Очень странно.
Единственное о чем не написали это указать «Поместить результат в диапазон», например $E$1



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

GuitarFan

Дата: Среда, 06.11.2013, 01:14 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 11


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Так как быть? Неужели excel не может такого сделать?

 

Ответить

GuitarFan

Дата: Среда, 06.11.2013, 09:17 |
Сообщение № 6

Группа: Пользователи

Ранг: Новичок

Сообщений: 11


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

 

Ответить

_Boroda_

Дата: Среда, 06.11.2013, 09:29 |
Сообщение № 7

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Видео Ваше посмотреть не могу (ограничения на работе стоят), поэтому просто опишу последовательность действий:
1. Выделяете диапазон с заголовком;
2. Вкладка «Данные» — рядом с кнопкой «Фильтр» есть кнопочка поменьше «Дополнительно». Жмете на нее;
3. Если будет задавать вопросы, отвечаете «ОК»;
4. В появившемся окошке ставите галку «Только уникальные записи» и, по желанию, точку «Скопировать результат в другое место» (тогда указываете в третьем белом поле это самое место). Жмете ОК.


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Pelena

Дата: Среда, 06.11.2013, 09:45 |
Сообщение № 8

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Ребята, у меня тоже этот способ не чувствителен к регистру girl_sad


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

AndreTM

Дата: Среда, 06.11.2013, 11:00 |
Сообщение № 9

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

Да, тогда только макросы. Поскольку с учетом регистра работает только =НАЙТИ(), а ей диапазон параметром не передашь :)
Ну, или хитровывернуться (макрос — имя — формула+формула) — и получим данные для фильтра:


Skype: andre.tm.007
Donate: Qiwi: 9517375010

 

Ответить

Pelena

Дата: Среда, 06.11.2013, 11:15 |
Сообщение № 10

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

У меня вот такой вариант получился с функцией СОВПАД() и доп. столбцом

К сообщению приложен файл:

1756831.xls
(28.0 Kb)


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

AndreTM

Дата: Среда, 06.11.2013, 11:59 |
Сообщение № 11

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

Pelena, я тоже про СОВПАД() подумал сначала. Потом понял, что формулы там придётся наворачивать и наворачивать…

Вот если честно — задания такого типа одноразовые. В том плане, что над исходным списком выполняются один раз, и затем уже работа продолжается с результирующим списком. Ибо «удалить» а не «сравнить-дополнить».
Для меня вообще проще пяток строк кода нарисовать (и без всяких имён и формул), запустить, получить результат — и не ломать дальше голову :) Ну, можно код процедурой оформить, на будущее, и вызовы нарисовать — мало ли, потребуется ещё…


Skype: andre.tm.007
Donate: Qiwi: 9517375010

 

Ответить

Pelena

Дата: Среда, 06.11.2013, 12:09 |
Сообщение № 12

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Для меня вообще проще пяток строк кода нарисовать

Завидую girl_smile


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Hugo

Дата: Среда, 06.11.2013, 12:36 |
Сообщение № 13

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

Как вариант — получить в соседней ячейке строку из кодов символов (куча формул или одна UDF), или например что думаю проще из 1/0 (110101=сспспс), затем её через разделитель сцепить с проверяемой строкой.
Затем удалить дубликаты.
Затем по разделителю обрезать лишнее (текст по столбцам).
Ну а проще конечно макрос на словаре — словарь различает регистр.


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

RAN

Дата: Среда, 06.11.2013, 13:49 |
Сообщение № 14

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Могу даже UDF кинуть
[vba]

Код

Function КОДЫ_СИМВОЛОВ(ЯЧЕЙКА As Range, Optional Разделитель As String = «») As String
     Dim simv As Long
     On Error Resume Next
     For simv = 1 To Len(ЯЧЕЙКА)
         КОДЫ_СИМВОЛОВ = КОДЫ_СИМВОЛОВ & Asc(Mid(ЯЧЕЙКА, simv, 1)) & Разделитель
     Next
     КОДЫ_СИМВОЛОВ = Left(КОДЫ_СИМВОЛОВ, Len(КОДЫ_СИМВОЛОВ) — Len(Разделитель))
End Function

[/vba]


Быть или не быть, вот в чем загвоздка!

 

Ответить

Hugo

Дата: Среда, 06.11.2013, 14:07 |
Сообщение № 15

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

Кажется удалить дубликаты можно ведь по столбцу с этими кодами символов — удалится ведь вся строка, а не только в проверяемом столбце?
Не могу проверить — нет 2007.
Тогда достаточно только UDF от RAN и умелых рук, ничего сцеплять-делить не нужно.


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

AndreTM

Дата: Среда, 06.11.2013, 16:59 |
Сообщение № 16

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

Hugo, RAN, а я не понял… Чем вам вариант Лены не нравится?
Она просто уникальные значения стала выносить ещё в один диапазон — а для фильтра уникальных достаточно исходной формулы:

Код

=СУММПРОИЗВ((A1<>»»)*СОВПАД(A1;A$1:A1))=1

Фильтруем ЛОЖЬ, удаляем строки, удаляем фильтр… ну или наоборот — копируем строки с ИСТИНА.


Skype: andre.tm.007
Donate: Qiwi: 9517375010

 

Ответить

RAN

Дата: Среда, 06.11.2013, 21:08 |
Сообщение № 17

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Я и не смотрел. pray
Игорь про UDF упомянул, а я из загашника вытянул.


Быть или не быть, вот в чем загвоздка!

 

Ответить

GuitarFan

Дата: Четверг, 07.11.2013, 02:52 |
Сообщение № 18

Группа: Пользователи

Ранг: Новичок

Сообщений: 11


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Спасибо за ответы, попробовал разобрать способ с функцие совпад — конечно немного геморойно так каждый раз делать, странно что в Excel нет нормальной фильтрации без этих функций. Хотелось бы как-то автоматизировать.

http://office.microsoft.com/ru-ru/excel-help/HP010062564.aspx
Здесь описано только то, как функция работает с единичными значениями, то есть ячейками.
Но как она работает с диапазонами? Если есть несколько совпадений, то видимо возвращаемый результат является массивом, так как функция СУММПРОИЗВ(—СОВПАД(A2;$A$2:A10)) может вернуть и 2.
Я сразу проверил что вернет функция СОВПАД(A2;$A$2:A10). Результат — истина. Хотя совпадений есть несколько.
Но после СУММПРОИЗВ получается 2. 2 не может получиться из значения ИСТИНА, значит есть еще значение. Как мне увидеть все значение, которые возвращает СОВПАД? Они же в ячейку не поместятся :)
И еще, что за фигня с кнопками Ctrl+Shift+Enter? Где-то вычитал, что их нужно нажимать, если мы работаем с массивами. С массивами — значит с диапазонами, видимо. Когда нужно нажимать эти кнопки?

Сообщение отредактировал GuitarFanЧетверг, 07.11.2013, 02:59

 

Ответить

Pelena

Дата: Четверг, 07.11.2013, 08:49 |
Сообщение № 19

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Как мне увидеть все значение,

Если в строке формул выделить эту функцию (с аргументами) и нажать F9, то там же в строке формул увидите результат её выполнения в виде массива. Затем нажать ESC, чтобы вернуть формулу к первоначальному виду.

Нажатием Ctrl+Shift+Enter вводится формула массива. Можно почитать здесь http://www.planetaexcel.ru/techniques/2/91/


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

GuitarFan

Дата: Пятница, 08.11.2013, 13:01 |
Сообщение № 20

Группа: Пользователи

Ранг: Новичок

Сообщений: 11


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Проще говоря, каждый раз, когда я работаю с абсолютно любым диапазоном, нужно нажимать Ctrl+Shift+Enter? Почему это не делается автоматически? Что происходит, если я работаю с диапазоном (как например в формуле СОВПАД(A2;$A$2:A10) ) если я не нажимаю Ctrl+Shift+Enter?

 

Ответить

документ удалить с учетом регистра 1

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

Удалите дубликаты, но оставьте первые с учетом регистра с формулой

Удалите все дубликаты, чувствительные к регистру, с помощью вспомогательной формулы

Удалите дубликаты, чувствительные к регистру, с помощью Kutools for Excel


Удалите дубликаты, но оставьте первые с учетом регистра с формулой

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

1. Введите эту формулу = ЕСЛИ (СУММПРОИЗВ (- EXACT (A2; $ C $ 1: C1)); «»; A2) в пустую ячейку, куда вы хотите поместить результат, например C2, см. снимок экрана:

документ удалить с учетом регистра 2

Внимание: В приведенной выше формуле A2 это первая ячейка списка, за исключением заголовка, который вы хотите использовать, и C1 это ячейка над ячейкой, в которую вы поместили формулу.

2. Затем перетащите дескриптор заполнения вниз к ячейкам, к которым вы хотите применить эту формулу, и повторяющиеся значения, но первые чувствительные к регистру, были заменены пустыми ячейками. Смотрите скриншот

документ удалить с учетом регистра 3


Удалите все дубликаты, чувствительные к регистру, с помощью вспомогательной формулы

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

1. Введите следующую формулу в соседнюю ячейку ваших данных, например B2, =AND(A2<>»»,SUMPRODUCT(—(EXACT(A2,$A$2:$A$15)))>1), см. снимок экрана:

документ удалить с учетом регистра 4

Внимание: В приведенной выше формуле A2 — первая ячейка диапазона данных, исключая заголовок, и A2: A15 — это используемый диапазон столбцов, в котором вы хотите удалить дубликаты с учетом регистра.

2. Затем перетащите маркер заполнения вниз к ячейкам, которые вы хотите содержать эту формулу, и все дубликаты отобразятся как ИСТИНА, а уникальные значения отображаются как НЕПРАВДА в столбце помощника см. снимок экрана:

документ удалить с учетом регистра 5

3. А затем вы можете отфильтровать все повторяющиеся значения на основе вспомогательного столбца. Выберите вспомогательный столбец, затем щелкните Данные > Фильтр чтобы активировать функцию фильтра, и нажмите кнопку треугольника в правом углу ячейки B1, отметьте только ИСТИНА вариант в списке, см. снимок экрана:

документ удалить с учетом регистра 6

4. Затем нажмите OK, были отфильтрованы только повторяющиеся значения, чувствительные к регистру, выберите отфильтрованные данные, затем щелкните Главная > Удалить > Удалить строки листов, см. снимок экрана:

документ удалить с учетом регистра 7

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

документ удалить с учетом регистра 8

6. Наконец, вы можете удалить содержимое ячейки столбца B по мере необходимости.

Tips: Если вы хотите сохранить исходные данные, вы можете скопировать отфильтрованные данные и вставить их в другое место вместо их удаления.


Удалите дубликаты, чувствительные к регистру, с помощью Kutools for Excel

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

После установки Kutools for Excel, пожалуйста, сделайте следующее:

1. Выберите диапазон данных, в котором вы хотите удалить дубликаты с учетом регистра.

2. Затем нажмите Кутулс > Выберите > Выберите повторяющиеся и уникальные ячейки, см. снимок экрана:

3. В разделе Выберите повторяющиеся и уникальные ячейки диалоговое окно, выберите Дубликаты (кроме 1-го) or Все дубликаты (включая 1-й) вам нужно, а затем проверьте Деликатный случай вариант, см. снимок экрана:

документ удалить с учетом регистра 11

4. Затем нажмите Ok Кнопка:

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

документ удалить с учетом регистра 12

(2.) Если вы выберете Все дубликаты (включая 1-й) вариант, выбираются все дубликаты, чувствительные к регистру, а затем нажмите Удалить ключ, чтобы удалить их сразу, см. снимок экрана:

документ удалить с учетом регистра 13

Скачать и бесплатную пробную версию Kutools for Excel Сейчас !


Демонстрация: удаление дубликатов, чувствительных к регистру, с помощью Kutools for Excel


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Необходимость учитывать регистр (регистрочувствительность) — одно из первых заметных принципиальных отличий, с которыми сталкиваются те, кто начинают работать в Power Query. В отличие от Excel, который прописные и строчные буквы в подавляющем большинстве случаев не различает, Power Query в этом вопросе строг. При любых операциях с данными (фильтрации, сортировке, удалении дубликатов, в исходном М-коде запросов и т.д.) Query воспринимает большие и маленькие буквы как совершенно разные.

Конечно, рано или поздно, к этому привыкаешь и начинаешь относиться как к данности и учитывать в работе. Так, например, многие пользователи перед фильтрацией, чтобы она была регистроНечувствительной, сначала делают дубликат столбца, в котором затем преобразуют весь текст к одному регистру и только потом фильтруют. Вполне себе способ.

На самом деле, решить эту проблему можно гораздо изящнее, если использовать встроенную в языке М в Power Query функцию с громоздким названием Comparer.OrdinalIgnoreCase. 

Её синтаксис прост:

=Comparer.OrdinalIgnoreCase(Текст1, Текст2)

Она сравнивает два текста, заданные в качестве аргументов, причём делает это без учёта регистра. Если тексты равны друг другу (одинаковы), то функция выдаёт ноль. Если не равны, то выдаёт 1 или -1 в зависимости от того, какой текст «больше» (с точки зрения кодов символов, т.е. расположения букв в алфавите) — первый или второй. 

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

Пример 1. Фильтр по значению без учёта регистра

Предположим, что у нас есть вот такая загруженная в редактор Power Query таблица, в которой мы хотим отфильтровать все джемперы Lacoste вне зависимости от их регистра:

Пример данных

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

Простая фильтрация

Обратите внимание на выражение в скобках после слова each — это, по факту, и есть условие, которое проверяется для каждого (each!) значения из столбца Товар, чтобы решить — фильтровать эту строку её или нет. 

Заменим это выражение на нашу функцию регистронечувствительного сравнения Comparer.OrdinalIgnoreCase. Если она возвращает 0, то очередное проверяемое значение равно (без учета регистра) искомому джемперу Lacost, то мы хотим показать эту строку в результатах фильтрации:

Фильтрация без учета регистра

Получаем в результате наши джемперы Lacoste в любом варианте регистра. Всех делов :)

Пример 2. Фильтр по частичному совпадению без учёта регистра

Интересный и не совсем очевидный момент заключается в том, что иногда нашу функцию Comparer.OrdinalIgnoreCase можно использовать без аргументов и даже без скобок — в качестве дополнительного необязательного аргумента для других функций в Power Query.

Предположим, что в той же таблице мы хотим отфильтровать все строки, где название товара содержит слово «джинсы«. Как и в прошлый раз,  давайте сначала отфильтруем джинсы привычным образом, используя опцию Текстовые фильтры — Содержит (Text filters — Contains):

Обычная фильтрация по подстроке

Получаем в строке формул конструкцию с уже знакомой функцией Table.SelectRows:

Функция фильтрации

Здесь, как легко сообразить, условием на отбор строк будет результат М-функции Text.Contains, проверяющей содержится ли в очередном (each) названии товара слово «джинсы».

Фишка в том, что у функции Text.Contains, на самом деле, не два, а три аргумента — третий (необязательный) отвечает за метод сравнения и тут как раз можно указать нашу функцию (без аргументов и даже без скобок):

Частичный текстовый поиск без учета регистра

Совершенно аналогично, кстати, можно реализовать регистроНЕчувствительность и при фильтрации текста в режиме «начинается с», «заканчивается на» и т.п. — просто дописываем нашу функцию третьим аргументом и всё.

Пример 3. Удаление дубликатов без учёта регистра

Ещё одна классическая задача, где мы можем столкнуться со сложностями из-за регистра — это поиск и удаление дубликатов. 

Предположим, что всё в той же таблице мы хотим оставить только уникальный набор покупателей. Сначала делаем это обычным образом — щёлкнув по шапке столбца Покупатель, выбираем команду Удалить дубликаты (Remove Duplicates). Получаем покупателей в разном регистре и в строке формул выражение с функцией Table.Distinct, которая в языке М отвечает за удаление повторов:

Удаление дубликатов с регистром

Обратите внимание, что вторым аргументом функции Table.Distinct указывается список (в фигурных скобках через запятую) имён столбцов, по которым идёт проверка уникальности.

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

Удаление дубликатов без учета регистра

Если вы удаляете дубликаты не по одному, а сразу по нескольким столбцам (например по связке столбцов Товар — Покупатель, выделив их предварительно с Ctrl), то для каждого столбца функцию нужно прописать отдельно, заключив дополнительно каждую пару «столбец-функция» в фигурные скобки:

РегистроНЕчувствительное удаление дубликатов по 2 столбцам

Пример 4. Объединение (merge) таблиц без учёта регистра

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

Если, например, нам нужно подтянуть к той же самой таблице статусы покупателей из отдельного справочника (уже загруженного в Power Query заранее), то используем команду Главная — Объединить (Home — Merge). В открывшемся окне внизу выбираем таблицу-справочник, выделяем пару столбцов для связи в обеих таблицах, а затем включаем флаг Использовать нечеткие соответствия для слияния (Use fuzzy matching):

Объединение без учета регистра

В параметрах нечёткого соответствия задаём Порог подобия = 1 (чтобы поиск был точным и на «Иван» у нас не нашёлся, например, «Иванов» или «Иванович») и включаем флажок Игнорировать регистр (Ignore case), ради которого тут всё и задумано.

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

Формула нечеткого слияния

Здесь первый аргумент — таблица (обычно с предыдущего шага), а затем идут две пары «имя столбца — таблица» (куда и откуда подтягиваем данные). Последний аргумент — это запись (record) в квадратных скобках, описывающая все параметры слияния.

Вот и все премудрости. Надеюсь, что теперь регистрочувствительность Power Query не будет составлять для вас большой проблемы — её можно обойти, если нужно, не создавая при этом лишних шагов.

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

  • Нечёткий текстовый поиск в Power Query
  • Поиск точных совпадений с учётом регистра
  • Поиск ключевых слов в тексте

 

For a general solution the VBA approach already suggested is probably to prefer. But for something that works only once, you can probably make it work the way you intended with only a little bit of adaptation in how you apply =IF(SUMPRODUCT(--EXACT(A2,$B$1:B1)),"",A2). I also tried to use a COUNTIF algorithm, which is much faster than SUMPRODUCT, but that’s not case sensitive.

Since I am also running 32-bit Excel with 8GB memory I was curious to see if I could replicate the memory issue. I generated a list of 100,000 random 5-letter strings in column A. Only 10 letters were used (ABCDEFGHJK), so in 100,000 strings some would occur more than once. I then applied the formula suggested by the OP in column B to filter out only unique values. It did indeed work, but it took quite some time. But I never ran into the memory issue that the OP did.

Proposed solution:
Based on these observations, one possible solution to you particular problem might be to copy column A to a new, temporary workbok and run your SUMPRODUCT formula there while all other workbooks are closed. Once it has finished you could just paste the result back to the original column in the original file. Actually removing the duplicates could be done by simply filtering on that column so that all dublicates (empty cells) are grouped together and then remove those rows. Details of my attempt to replicate can be found below.

SUMPRODUCT: Approximately 1 hour
First I tried the same formula as in the OP, =IF(SUMPRODUCT(--EXACT(A2,$B$1:B1)),"",A2), but doing only 10,000 rows at a time (by inserting empty rows at row 10,000, 20,000 etc. and copying down ten thousand rows at a time.) Each set of 10,000 rows took a couple of minutes to complete. When I did the whole shebang as one giant copy operation for all 100,000 cells at once, the operation took around one hour to complete and Excel was unresponsive in the meantime. Memory usage was 1,4 GB and the CPU averaged over 50% capacity (monitored with the Windows Task Manager). I also tried to run the formula when I had already manipulated the data in various ways (thus consuming more memory), which pushed CPU capacity to 100% and caused a couple of crashes. I managed to avoid that by simply closing Excel to clear the memory and running the operation again from a fresh restart with no other workbooks open.

As you can see in the following screenshots the formula worked and the unique entries become rarer further down the list (as expected since they are random). I assigned 1 to cells contaning duplicates so I could count them easily. There were 36,843 such instances.

First rows, no duplicates:
First rows

Last rows, mostly duplicates (cells with 1):
100,000th row

COUNTIF: 8.5 minutes
Compared to the SUMPRODUCT algorithm which took around one hour to complete, the following COUNTIF formula completed the same job in only 8,5 minutes, but it would not distinguish between lower and upper case. This approach requires the use of a help column. COUNTIF returns the number of instances that a particular string has been used in the range above the current cell, so every time a string is encountered for the first time, it will return 1. Cell B2 contains =COUNTIF($A$2:$A2,A2), and copying this down for all 100,000 rows took around eight and a half minutes. Then, in a separate colum I just used a simple IF formula to filter out the unique values from column A; cell C2 contains =IF(B2=1,A2,1), which returns the string in column A if it is unique; otherwise 1 is returned (to allow easy comparison with SUMPRODUCT). Copying this IF formula down for all 100,000 rows is practically instantaneous. The sum of 1s in column C after this operation was, reassuringly, the same as in the case of SUMPRODUCT, 36,843.

INDEX: Failure
I also played around with an array formula using the INDEX and MATCH functions. This formula that does the same job as COUNTIF, but also filters out the empty rows:
=INDEX($A$2:$A$100001,MATCH(0,COUNTIF($E$1:E1,$A$2:$A$100001),0)). This should be entered in cell B2 as an array formula (Ctrl + Shift + Enter) and then copied down. Copying individual cells one at a time worked fine for a few dozen rows, but anything more than that caused Excel to crash. I even tried running this overnight, but the operation never finished. (The formula could be extended to become case sensitive, but I didn’t bother to try.)

One thing to note, however, with the failed INDEX formula was that the behavior described above occured when the formula was applied in a separate workbook. I also tried to run this formula in column D in the same workbook as the COUNTIF formula. Then I did actually run into the memory issue described in the OP, which, unsurprisingly, suggests that the problem with memory depends on the rest of the data in the workbook.

By definition, Microsoft Excel 2007 considers a duplicate to be a row of data that matches another row in your worksheet exactly. When you evaluate a single column of data, Excel finds single-cell duplicates. When you look for duplicates in data spanning two columns, a two-column pair of cells must match another pair, and so on. If one of the rows in a one-column data set contains «cat» and the other contains «Cat» in the same column, Excel considers the values to be unique. Likewise, if one row contains a date formatted with a two-digit year and another row contains the same date formatted with a four-digit year, Excel considers them unique. As a result, the process of removing duplicates always considers case when evaluating a record for uniqueness.

  1. Click on the heading of the column you want to evaluate for duplicates. Click and drag from one heading to the next to select more than one column. Hold down the «Ctrl» key and click to select columns that aren’t next to each other.

  2. Press «Ctrl-C» to copy the data. Click in an empty column and press «Ctrl-V» to paste the data you copied. Select the column or columns that contain the pasted data.

  3. Click the «Data» tab in the Microsoft Excel 2007 ribbon and locate the Data Tools group. Click on the «Remove Duplicates» item to bring up the Remove Duplicates dialog box.

  4. Click on the check box in front of the column name or names you want to evaluate for duplicates. These names draw from the headers typed in the first cell of each column you select for evaluation. Click on the «OK» button at the bottom right of the Remove Duplicates dialog box to process your data.

  5. Evaluate the results dialog box that shows how many duplicates Excel found and removed. The dialog box also tells you how many unique values remain. Removing duplicates from more than one column of data may produce results that appear counterintuitive. If you process rows 1 through 10 of columns A and B, row 1 and row 2 are duplicates if and only if A1 matches B1 and A2 matches B2.

Понравилась статья? Поделить с друзьями:
  • Excel удалить дубликаты оставить одно значение
  • Excel увеличить число на процент в excel формула
  • Excel удалить дубликаты оставить один
  • Excel увеличить строку с формулой
  • Excel удалить дубликаты не активна