- Як отримати список унікальних (не повторюються) значень?
- Пошук по мітках
- Як отримати список унікальних (не повторюються) значень?
- Пошук по мітках
- Як отримати список унікальних (не повторюються) значень?
- Пошук по мітках
- Як отримати список унікальних (не повторюються) значень?
- Пошук по мітках
- Як отримати список унікальних (не повторюються) значень?
- Пошук по мітках
Як отримати список унікальних (не повторюються) значень?
хитрощі »1. Май 2011 Дмитро 374311 переглядівУявімо собі великий список різних найменувань, ПІБ, табельних номерів і т.п. А необхідно з цього списку залишити список все тих же найменувань, але щоб вони не повторювалися - тобто видалити з цього списку все дублюючі записи. Як це інакше називають: створити список унікальних елементів, список неповторяющихся, без дублікатів. Для цього існує кілька способів: вбудованими засобами Excel, вбудованими формулами і, нарешті, за допомогою коду 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. Після того, як ми ввели цю формулу в C2 ми її повинні скопіювати і вставити в кілька рядків так, щоб точно відобразити всі унікальні елементи. Як тільки формула в нижніх осередках поверне # ЧИСЛО! - це значить все елементи відображені і нижче протягувати формулу немає сенсу. Щоб помилку уникнути і зробити формулу більш універсальною (НЕ простягаючи кожен раз до появи помилки) можна використовувати нехитру перевірку:
для 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
Спосіб 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 SubSub 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 ( "C2", Cells (Rows.Count, 3). End (xlUp)). ValueRange ( "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
Спосіб 4: Зведені таблиці
Кілька нестандартний спосіб вилучення унікальних значень.
- Виділяємо один або декілька стовпців в таблиці, переходимо на вкладку Вставка (Insert) -група Таблиця (Table) - Зведена таблиця (PivotTable)
- У діалоговому вікні Створення зведеної таблиці (Create PivotTable) перевіряємо правильність виділення діапазону даних (або встановити нове джерело даних)
- вказуємо місце розміщення Зведеної таблиці:
- На новий лист (New Worksheet)
- На існуючий лист (Existing Worksheet)
- підтверджуємо створення натисканням кнопки OK
Оскільки зведені таблиці при обробці даних, що містяться в область рядків або стовпців, відбирають з них тільки унікальні значення для подальшого аналізу, то від нас зовсім нічого не потрібно, крім як створити зведену таблицю і помістити в область рядків або стовпців дані потрібного стовпчика.
На прикладі прикладеного до статті файлу я:
У чому незручність роботи зі зведеними в даному випадку: при зміні в вихідних даних зведену таблицю доведеться оновлювати вручну: Виділити будь-яку клітинку зведеної таблиці -Права кнопка миші - Відновити (Refresh) або вкладка Дані (Data) - Оновити все (Refresh all) - Оновити (Refresh). А якщо вихідні дані поповнюються динамічно і того гірше - треба буде заново вказувати діапазон вихідних даних. І ще один мінус - дані всередині зведеної таблиці можна змінювати. Тому якщо з отриманим списком необхідно буде працювати надалі, то після створення потрібного списку за допомогою зведеної його треба скопіювати і вставити на потрібний лист.
Щоб краще розуміти всі дії і навчитися поводитися зі зведеними таблицями настійно рекомендую ознайомитися зі статтею Загальні відомості про зведених таблицях - до неї додається відеоурок, в якому я наочно демонструють простоту і зручність роботи з основними можливостями зведених таблиць.
У доданому прикладі крім описаних прийомів, записана трохи складніша варіація вилучення унікальних елементів формулою і кодом, а саме: вилучення унікальних елементів за критерієм. Про що мова: якщо в одному стовпці прізвища, а в другому (В) деякі дані (у файлі це місяці) і потрібно витягти унікальні значення стовпця В тільки для обраної прізвища. Приклади подібних витягів унікальних розташовані на аркуші Витяг за критерієм.
Завантажити приклад:
Tips_All_ExtractUnique.xls (108,0 KiB, 14 138 завантажень)
Також див .:
Робота з дублікатами
Як підрахувати кількість повторень
Загальні відомості про зведених таблицях
{ "Bottom bar": { "textstyle": "static", "textpositionstatic": "bottom", "textautohide": true, "textpositionmarginstatic": 0, "textpositiondynamic": "bottomleft", "textpositionmarginleft": 24, " textpositionmarginright ": 24," textpositionmargintop ": 24," textpositionmarginbottom ": 24," texteffect ":" slide "," texteffecteasing ":" easeOutCubic "," texteffectduration ": 600," texteffectslidedirection ":" left "," texteffectslidedistance " : 30, "texteffectdelay": 500, "texteffectseparate": false, "texteffect1": "slide", "texteffectslidedirection1": "right", "texteffectslidedistance1": 120, "texteffecteasing1": "easeOutCubic", "texteffectduration1": 600 , "texteffectdelay1" 1000, "texteffect2": "slide", "texteffectslidedirection2": "right", "texteffectslidedistance2": 120, "texteffecteasing2": "easeOutCubic", "texteffectduration2": 600, "texteffectdelay2": 1500, " textcss ":" display: block; padding: 12px; text-align: left; "," textbgcss ":" display: block; position: absolute; top: 0px; left: 0px; width: 100%; height: 100% ; background-color: # 333333; opacity: 0.6; filter: a lpha (opacity = 60); "," titlecss ":" display: block; position: relative; font: bold 14px \ "Lucida Sans Unicode \", \ "Lucida Grande \", sans-serif, Arial; color: #fff; "," descriptioncss ":" display: block; position: relative; font: 12px \ "Lucida Sans Unicode \", \ "Lucida Grande \", sans-serif, Arial; color: #fff; margin-top: 8px; "," buttoncss ":" display: block; position: relative; margin-top: 8px; "," texteffectresponsive ": true," texteffectresponsivesize ": 640," titlecssresponsive ":" font-size: 12px; "," descriptioncssresponsive ":" display: none! important; "," buttoncssresponsive ": "", "addgooglefonts": false, "googlefonts": "", "textleftrightpercentforstatic": 40}}
Пошук по мітках
Access apple watch Multex Outlook Power Query і Power BI VBA робота в редакторі VBA управління кодами Безкоштовні надбудови дата та час Діаграми і графіки записки захист даних Інтернет Картинки і об'єкти Листи і книги Макроси і VBA надбудови Налаштування печатка Пошук даних Політика конфіденційності Пошта програми Робота з додатками Робота з файлами Розробка додатків зведені таблиці списки Тренінги та вебінари фінансові форматування Формули і функції функції Excel функції VBA Осередки і діапазони акції MulTEx аналіз даних баги і глюки в Excel посиланняЯк отримати список унікальних (не повторюються) значень?
хитрощі »1. Май 2011 Дмитро 374311 переглядівУявімо собі великий список різних найменувань, ПІБ, табельних номерів і т.п. А необхідно з цього списку залишити список все тих же найменувань, але щоб вони не повторювалися - тобто видалити з цього списку все дублюючі записи. Як це інакше називають: створити список унікальних елементів, список неповторяющихся, без дублікатів. Для цього існує кілька способів: вбудованими засобами Excel, вбудованими формулами і, нарешті, за допомогою коду 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. Після того, як ми ввели цю формулу в C2 ми її повинні скопіювати і вставити в кілька рядків так, щоб точно відобразити всі унікальні елементи. Як тільки формула в нижніх осередках поверне # ЧИСЛО! - це значить все елементи відображені і нижче протягувати формулу немає сенсу. Щоб помилку уникнути і зробити формулу більш універсальною (НЕ простягаючи кожен раз до появи помилки) можна використовувати нехитру перевірку:
для 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
Спосіб 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 SubSub 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 ( "C2", Cells (Rows.Count, 3). End (xlUp)). ValueRange ( "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
Спосіб 4: Зведені таблиці
Кілька нестандартний спосіб вилучення унікальних значень.
- Виділяємо один або декілька стовпців в таблиці, переходимо на вкладку Вставка (Insert) -група Таблиця (Table) - Зведена таблиця (PivotTable)
- У діалоговому вікні Створення зведеної таблиці (Create PivotTable) перевіряємо правильність виділення діапазону даних (або встановити нове джерело даних)
- вказуємо місце розміщення Зведеної таблиці:
- На новий лист (New Worksheet)
- На існуючий лист (Existing Worksheet)
- підтверджуємо створення натисканням кнопки OK
Оскільки зведені таблиці при обробці даних, що містяться в область рядків або стовпців, відбирають з них тільки унікальні значення для подальшого аналізу, то від нас зовсім нічого не потрібно, крім як створити зведену таблицю і помістити в область рядків або стовпців дані потрібного стовпчика.
На прикладі прикладеного до статті файлу я:
У чому незручність роботи зі зведеними в даному випадку: при зміні в вихідних даних зведену таблицю доведеться оновлювати вручну: Виділити будь-яку клітинку зведеної таблиці -Права кнопка миші - Відновити (Refresh) або вкладка Дані (Data) - Оновити все (Refresh all) - Оновити (Refresh). А якщо вихідні дані поповнюються динамічно і того гірше - треба буде заново вказувати діапазон вихідних даних. І ще один мінус - дані всередині зведеної таблиці можна змінювати. Тому якщо з отриманим списком необхідно буде працювати надалі, то після створення потрібного списку за допомогою зведеної його треба скопіювати і вставити на потрібний лист.
Щоб краще розуміти всі дії і навчитися поводитися зі зведеними таблицями настійно рекомендую ознайомитися зі статтею Загальні відомості про зведених таблицях - до неї додається відеоурок, в якому я наочно демонструють простоту і зручність роботи з основними можливостями зведених таблиць.
У доданому прикладі крім описаних прийомів, записана трохи складніша варіація вилучення унікальних елементів формулою і кодом, а саме: вилучення унікальних елементів за критерієм. Про що мова: якщо в одному стовпці прізвища, а в другому (В) деякі дані (у файлі це місяці) і потрібно витягти унікальні значення стовпця В тільки для обраної прізвища. Приклади подібних витягів унікальних розташовані на аркуші Витяг за критерієм.
Завантажити приклад:
Tips_All_ExtractUnique.xls (108,0 KiB, 14 138 завантажень)
Також див .:
Робота з дублікатами
Як підрахувати кількість повторень
Загальні відомості про зведених таблицях
{ "Bottom bar": { "textstyle": "static", "textpositionstatic": "bottom", "textautohide": true, "textpositionmarginstatic": 0, "textpositiondynamic": "bottomleft", "textpositionmarginleft": 24, " textpositionmarginright ": 24," textpositionmargintop ": 24," textpositionmarginbottom ": 24," texteffect ":" slide "," texteffecteasing ":" easeOutCubic "," texteffectduration ": 600," texteffectslidedirection ":" left "," texteffectslidedistance " : 30, "texteffectdelay": 500, "texteffectseparate": false, "texteffect1": "slide", "texteffectslidedirection1": "right", "texteffectslidedistance1": 120, "texteffecteasing1": "easeOutCubic", "texteffectduration1": 600 , "texteffectdelay1" 1000, "texteffect2": "slide", "texteffectslidedirection2": "right", "texteffectslidedistance2": 120, "texteffecteasing2": "easeOutCubic", "texteffectduration2": 600, "texteffectdelay2": 1500, " textcss ":" display: block; padding: 12px; text-align: left; "," textbgcss ":" display: block; position: absolute; top: 0px; left: 0px; width: 100%; height: 100% ; background-color: # 333333; opacity: 0.6; filter: a lpha (opacity = 60); "," titlecss ":" display: block; position: relative; font: bold 14px \ "Lucida Sans Unicode \", \ "Lucida Grande \", sans-serif, Arial; color: #fff; "," descriptioncss ":" display: block; position: relative; font: 12px \ "Lucida Sans Unicode \", \ "Lucida Grande \", sans-serif, Arial; color: #fff; margin-top: 8px; "," buttoncss ":" display: block; position: relative; margin-top: 8px; "," texteffectresponsive ": true," texteffectresponsivesize ": 640," titlecssresponsive ":" font-size: 12px; "," descriptioncssresponsive ":" display: none! important; "," buttoncssresponsive ": "", "addgooglefonts": false, "googlefonts": "", "textleftrightpercentforstatic": 40}}
Пошук по мітках
Access apple watch Multex Outlook Power Query і Power BI VBA робота в редакторі VBA управління кодами Безкоштовні надбудови дата та час Діаграми і графіки записки захист даних Інтернет Картинки і об'єкти Листи і книги Макроси і VBA надбудови Налаштування печатка Пошук даних Політика конфіденційності Пошта програми Робота з додатками Робота з файлами Розробка додатків зведені таблиці списки Тренінги та вебінари фінансові форматування Формули і функції функції Excel функції VBA Осередки і діапазони акції MulTEx аналіз даних баги і глюки в Excel посиланняЯк отримати список унікальних (не повторюються) значень?
хитрощі »1. Май 2011 Дмитро 374311 переглядівУявімо собі великий список різних найменувань, ПІБ, табельних номерів і т.п. А необхідно з цього списку залишити список все тих же найменувань, але щоб вони не повторювалися - тобто видалити з цього списку все дублюючі записи. Як це інакше називають: створити список унікальних елементів, список неповторяющихся, без дублікатів. Для цього існує кілька способів: вбудованими засобами Excel, вбудованими формулами і, нарешті, за допомогою коду 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. Після того, як ми ввели цю формулу в C2 ми її повинні скопіювати і вставити в кілька рядків так, щоб точно відобразити всі унікальні елементи. Як тільки формула в нижніх осередках поверне # ЧИСЛО! - це значить все елементи відображені і нижче протягувати формулу немає сенсу. Щоб помилку уникнути і зробити формулу більш універсальною (НЕ простягаючи кожен раз до появи помилки) можна використовувати нехитру перевірку:
для 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
Спосіб 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 SubSub 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 ( "C2", Cells (Rows.Count, 3). End (xlUp)). ValueRange ( "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
Спосіб 4: Зведені таблиці
Кілька нестандартний спосіб вилучення унікальних значень.
- Виділяємо один або декілька стовпців в таблиці, переходимо на вкладку Вставка (Insert) -група Таблиця (Table) - Зведена таблиця (PivotTable)
- У діалоговому вікні Створення зведеної таблиці (Create PivotTable) перевіряємо правильність виділення діапазону даних (або встановити нове джерело даних)
- вказуємо місце розміщення Зведеної таблиці:
- На новий лист (New Worksheet)
- На існуючий лист (Existing Worksheet)
- підтверджуємо створення натисканням кнопки OK
Оскільки зведені таблиці при обробці даних, що містяться в область рядків або стовпців, відбирають з них тільки унікальні значення для подальшого аналізу, то від нас зовсім нічого не потрібно, крім як створити зведену таблицю і помістити в область рядків або стовпців дані потрібного стовпчика.
На прикладі прикладеного до статті файлу я:
У чому незручність роботи зі зведеними в даному випадку: при зміні в вихідних даних зведену таблицю доведеться оновлювати вручну: Виділити будь-яку клітинку зведеної таблиці -Права кнопка миші - Відновити (Refresh) або вкладка Дані (Data) - Оновити все (Refresh all) - Оновити (Refresh). А якщо вихідні дані поповнюються динамічно і того гірше - треба буде заново вказувати діапазон вихідних даних. І ще один мінус - дані всередині зведеної таблиці можна змінювати. Тому якщо з отриманим списком необхідно буде працювати надалі, то після створення потрібного списку за допомогою зведеної його треба скопіювати і вставити на потрібний лист.
Щоб краще розуміти всі дії і навчитися поводитися зі зведеними таблицями настійно рекомендую ознайомитися зі статтею Загальні відомості про зведених таблицях - до неї додається відеоурок, в якому я наочно демонструють простоту і зручність роботи з основними можливостями зведених таблиць.
У доданому прикладі крім описаних прийомів, записана трохи складніша варіація вилучення унікальних елементів формулою і кодом, а саме: вилучення унікальних елементів за критерієм. Про що мова: якщо в одному стовпці прізвища, а в другому (В) деякі дані (у файлі це місяці) і потрібно витягти унікальні значення стовпця В тільки для обраної прізвища. Приклади подібних витягів унікальних розташовані на аркуші Витяг за критерієм.
Завантажити приклад:
Tips_All_ExtractUnique.xls (108,0 KiB, 14 138 завантажень)
Також див .:
Робота з дублікатами
Як підрахувати кількість повторень
Загальні відомості про зведених таблицях
{ "Bottom bar": { "textstyle": "static", "textpositionstatic": "bottom", "textautohide": true, "textpositionmarginstatic": 0, "textpositiondynamic": "bottomleft", "textpositionmarginleft": 24, " textpositionmarginright ": 24," textpositionmargintop ": 24," textpositionmarginbottom ": 24," texteffect ":" slide "," texteffecteasing ":" easeOutCubic "," texteffectduration ": 600," texteffectslidedirection ":" left "," texteffectslidedistance " : 30, "texteffectdelay": 500, "texteffectseparate": false, "texteffect1": "slide", "texteffectslidedirection1": "right", "texteffectslidedistance1": 120, "texteffecteasing1": "easeOutCubic", "texteffectduration1": 600 , "texteffectdelay1" 1000, "texteffect2": "slide", "texteffectslidedirection2": "right", "texteffectslidedistance2": 120, "texteffecteasing2": "easeOutCubic", "texteffectduration2": 600, "texteffectdelay2": 1500, " textcss ":" display: block; padding: 12px; text-align: left; "," textbgcss ":" display: block; position: absolute; top: 0px; left: 0px; width: 100%; height: 100% ; background-color: # 333333; opacity: 0.6; filter: a lpha (opacity = 60); "," titlecss ":" display: block; position: relative; font: bold 14px \ "Lucida Sans Unicode \", \ "Lucida Grande \", sans-serif, Arial; color: #fff; "," descriptioncss ":" display: block; position: relative; font: 12px \ "Lucida Sans Unicode \", \ "Lucida Grande \", sans-serif, Arial; color: #fff; margin-top: 8px; "," buttoncss ":" display: block; position: relative; margin-top: 8px; "," texteffectresponsive ": true," texteffectresponsivesize ": 640," titlecssresponsive ":" font-size: 12px; "," descriptioncssresponsive ":" display: none! important; "," buttoncssresponsive ": "", "addgooglefonts": false, "googlefonts": "", "textleftrightpercentforstatic": 40}}
Пошук по мітках
Access apple watch Multex Outlook Power Query і Power BI VBA робота в редакторі VBA управління кодами Безкоштовні надбудови дата та час Діаграми і графіки записки захист даних Інтернет Картинки і об'єкти Листи і книги Макроси і VBA надбудови Налаштування печатка Пошук даних Політика конфіденційності Пошта програми Робота з додатками Робота з файлами Розробка додатків зведені таблиці списки Тренінги та вебінари фінансові форматування Формули і функції функції Excel функції VBA Осередки і діапазони акції MulTEx аналіз даних баги і глюки в Excel посиланняЯк отримати список унікальних (не повторюються) значень?
хитрощі »1. Май 2011 Дмитро 374311 переглядівУявімо собі великий список різних найменувань, ПІБ, табельних номерів і т.п. А необхідно з цього списку залишити список все тих же найменувань, але щоб вони не повторювалися - тобто видалити з цього списку все дублюючі записи. Як це інакше називають: створити список унікальних елементів, список неповторяющихся, без дублікатів. Для цього існує кілька способів: вбудованими засобами Excel, вбудованими формулами і, нарешті, за допомогою коду 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. Після того, як ми ввели цю формулу в C2 ми її повинні скопіювати і вставити в кілька рядків так, щоб точно відобразити всі унікальні елементи. Як тільки формула в нижніх осередках поверне # ЧИСЛО! - це значить все елементи відображені і нижче протягувати формулу немає сенсу. Щоб помилку уникнути і зробити формулу більш універсальною (НЕ простягаючи кожен раз до появи помилки) можна використовувати нехитру перевірку:
для 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
Спосіб 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 SubSub 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 ( "C2", Cells (Rows.Count, 3). End (xlUp)). ValueRange ( "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
Спосіб 4: Зведені таблиці
Кілька нестандартний спосіб вилучення унікальних значень.
- Виділяємо один або декілька стовпців в таблиці, переходимо на вкладку Вставка (Insert) -група Таблиця (Table) - Зведена таблиця (PivotTable)
- У діалоговому вікні Створення зведеної таблиці (Create PivotTable) перевіряємо правильність виділення діапазону даних (або встановити нове джерело даних)
- вказуємо місце розміщення Зведеної таблиці:
- На новий лист (New Worksheet)
- На існуючий лист (Existing Worksheet)
- підтверджуємо створення натисканням кнопки OK
Оскільки зведені таблиці при обробці даних, що містяться в область рядків або стовпців, відбирають з них тільки унікальні значення для подальшого аналізу, то від нас зовсім нічого не потрібно, крім як створити зведену таблицю і помістити в область рядків або стовпців дані потрібного стовпчика.
На прикладі прикладеного до статті файлу я:
У чому незручність роботи зі зведеними в даному випадку: при зміні в вихідних даних зведену таблицю доведеться оновлювати вручну: Виділити будь-яку клітинку зведеної таблиці -Права кнопка миші - Відновити (Refresh) або вкладка Дані (Data) - Оновити все (Refresh all) - Оновити (Refresh). А якщо вихідні дані поповнюються динамічно і того гірше - треба буде заново вказувати діапазон вихідних даних. І ще один мінус - дані всередині зведеної таблиці можна змінювати. Тому якщо з отриманим списком необхідно буде працювати надалі, то після створення потрібного списку за допомогою зведеної його треба скопіювати і вставити на потрібний лист.
Щоб краще розуміти всі дії і навчитися поводитися зі зведеними таблицями настійно рекомендую ознайомитися зі статтею Загальні відомості про зведених таблицях - до неї додається відеоурок, в якому я наочно демонструють простоту і зручність роботи з основними можливостями зведених таблиць.
У доданому прикладі крім описаних прийомів, записана трохи складніша варіація вилучення унікальних елементів формулою і кодом, а саме: вилучення унікальних елементів за критерієм. Про що мова: якщо в одному стовпці прізвища, а в другому (В) деякі дані (у файлі це місяці) і потрібно витягти унікальні значення стовпця В тільки для обраної прізвища. Приклади подібних витягів унікальних розташовані на аркуші Витяг за критерієм.
Завантажити приклад:
Tips_All_ExtractUnique.xls (108,0 KiB, 14 138 завантажень)
Також див .:
Робота з дублікатами
Як підрахувати кількість повторень
Загальні відомості про зведених таблицях
{ "Bottom bar": { "textstyle": "static", "textpositionstatic": "bottom", "textautohide": true, "textpositionmarginstatic": 0, "textpositiondynamic": "bottomleft", "textpositionmarginleft": 24, " textpositionmarginright ": 24," textpositionmargintop ": 24," textpositionmarginbottom ": 24," texteffect ":" slide "," texteffecteasing ":" easeOutCubic "," texteffectduration ": 600," texteffectslidedirection ":" left "," texteffectslidedistance " : 30, "texteffectdelay": 500, "texteffectseparate": false, "texteffect1": "slide", "texteffectslidedirection1": "right", "texteffectslidedistance1": 120, "texteffecteasing1": "easeOutCubic", "texteffectduration1": 600 , "texteffectdelay1" 1000, "texteffect2": "slide", "texteffectslidedirection2": "right", "texteffectslidedistance2": 120, "texteffecteasing2": "easeOutCubic", "texteffectduration2": 600, "texteffectdelay2": 1500, " textcss ":" display: block; padding: 12px; text-align: left; "," textbgcss ":" display: block; position: absolute; top: 0px; left: 0px; width: 100%; height: 100% ; background-color: # 333333; opacity: 0.6; filter: a lpha (opacity = 60); "," titlecss ":" display: block; position: relative; font: bold 14px \ "Lucida Sans Unicode \", \ "Lucida Grande \", sans-serif, Arial; color: #fff; "," descriptioncss ":" display: block; position: relative; font: 12px \ "Lucida Sans Unicode \", \ "Lucida Grande \", sans-serif, Arial; color: #fff; margin-top: 8px; "," buttoncss ":" display: block; position: relative; margin-top: 8px; "," texteffectresponsive ": true," texteffectresponsivesize ": 640," titlecssresponsive ":" font-size: 12px; "," descriptioncssresponsive ":" display: none! important; "," buttoncssresponsive ": "", "addgooglefonts": false, "googlefonts": "", "textleftrightpercentforstatic": 40}}
Пошук по мітках
Access apple watch Multex Outlook Power Query і Power BI VBA робота в редакторі VBA управління кодами Безкоштовні надбудови дата та час Діаграми і графіки записки захист даних Інтернет Картинки і об'єкти Листи і книги Макроси і VBA надбудови Налаштування печатка Пошук даних Політика конфіденційності Пошта програми Робота з додатками Робота з файлами Розробка додатків зведені таблиці списки Тренінги та вебінари фінансові форматування Формули і функції функції Excel функції VBA Осередки і діапазони акції MulTEx аналіз даних баги і глюки в Excel посиланняЯк отримати список унікальних (не повторюються) значень?
хитрощі »1. Май 2011 Дмитро 374311 переглядівУявімо собі великий список різних найменувань, ПІБ, табельних номерів і т.п. А необхідно з цього списку залишити список все тих же найменувань, але щоб вони не повторювалися - тобто видалити з цього списку все дублюючі записи. Як це інакше називають: створити список унікальних елементів, список неповторяющихся, без дублікатів. Для цього існує кілька способів: вбудованими засобами Excel, вбудованими формулами і, нарешті, за допомогою коду 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. Після того, як ми ввели цю формулу в C2 ми її повинні скопіювати і вставити в кілька рядків так, щоб точно відобразити всі унікальні елементи. Як тільки формула в нижніх осередках поверне # ЧИСЛО! - це значить все елементи відображені і нижче протягувати формулу немає сенсу. Щоб помилку уникнути і зробити формулу більш універсальною (НЕ простягаючи кожен раз до появи помилки) можна використовувати нехитру перевірку:
для 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
Спосіб 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 SubSub 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 ( "C2", Cells (Rows.Count, 3). End (xlUp)). ValueRange ( "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
Спосіб 4: Зведені таблиці
Кілька нестандартний спосіб вилучення унікальних значень.
- Виділяємо один або декілька стовпців в таблиці, переходимо на вкладку Вставка (Insert) -група Таблиця (Table) - Зведена таблиця (PivotTable)
- У діалоговому вікні Створення зведеної таблиці (Create PivotTable) перевіряємо правильність виділення діапазону даних (або встановити нове джерело даних)
- вказуємо місце розміщення Зведеної таблиці:
- На новий лист (New Worksheet)
- На існуючий лист (Existing Worksheet)
- підтверджуємо створення натисканням кнопки OK
Оскільки зведені таблиці при обробці даних, що містяться в область рядків або стовпців, відбирають з них тільки унікальні значення для подальшого аналізу, то від нас зовсім нічого не потрібно, крім як створити зведену таблицю і помістити в область рядків або стовпців дані потрібного стовпчика.
На прикладі прикладеного до статті файлу я:
У чому незручність роботи зі зведеними в даному випадку: при зміні в вихідних даних зведену таблицю доведеться оновлювати вручну: Виділити будь-яку клітинку зведеної таблиці -Права кнопка миші - Відновити (Refresh) або вкладка Дані (Data) - Оновити все (Refresh all) - Оновити (Refresh). А якщо вихідні дані поповнюються динамічно і того гірше - треба буде заново вказувати діапазон вихідних даних. І ще один мінус - дані всередині зведеної таблиці можна змінювати. Тому якщо з отриманим списком необхідно буде працювати надалі, то після створення потрібного списку за допомогою зведеної його треба скопіювати і вставити на потрібний лист.
Щоб краще розуміти всі дії і навчитися поводитися зі зведеними таблицями настійно рекомендую ознайомитися зі статтею Загальні відомості про зведених таблицях - до неї додається відеоурок, в якому я наочно демонструють простоту і зручність роботи з основними можливостями зведених таблиць.
У доданому прикладі крім описаних прийомів, записана трохи складніша варіація вилучення унікальних елементів формулою і кодом, а саме: вилучення унікальних елементів за критерієм. Про що мова: якщо в одному стовпці прізвища, а в другому (В) деякі дані (у файлі це місяці) і потрібно витягти унікальні значення стовпця В тільки для обраної прізвища. Приклади подібних витягів унікальних розташовані на аркуші Витяг за критерієм.
Завантажити приклад:
Tips_All_ExtractUnique.xls (108,0 KiB, 14 138 завантажень)
Також див .:
Робота з дублікатами
Як підрахувати кількість повторень
Загальні відомості про зведених таблицях
{ "Bottom bar": { "textstyle": "static", "textpositionstatic": "bottom", "textautohide": true, "textpositionmarginstatic": 0, "textpositiondynamic": "bottomleft", "textpositionmarginleft": 24, " textpositionmarginright ": 24," textpositionmargintop ": 24," textpositionmarginbottom ": 24," texteffect ":" slide "," texteffecteasing ":" easeOutCubic "," texteffectduration ": 600," texteffectslidedirection ":" left "," texteffectslidedistance " : 30, "texteffectdelay": 500, "texteffectseparate": false, "texteffect1": "slide", "texteffectslidedirection1": "right", "texteffectslidedistance1": 120, "texteffecteasing1": "easeOutCubic", "texteffectduration1": 600 , "texteffectdelay1" 1000, "texteffect2": "slide", "texteffectslidedirection2": "right", "texteffectslidedistance2": 120, "texteffecteasing2": "easeOutCubic", "texteffectduration2": 600, "texteffectdelay2": 1500, " textcss ":" display: block; padding: 12px; text-align: left; "," textbgcss ":" display: block; position: absolute; top: 0px; left: 0px; width: 100%; height: 100% ; background-color: # 333333; opacity: 0.6; filter: a lpha (opacity = 60); "," titlecss ":" display: block; position: relative; font: bold 14px \ "Lucida Sans Unicode \", \ "Lucida Grande \", sans-serif, Arial; color: #fff; "," descriptioncss ":" display: block; position: relative; font: 12px \ "Lucida Sans Unicode \", \ "Lucida Grande \", sans-serif, Arial; color: #fff; margin-top: 8px; "," buttoncss ":" display: block; position: relative; margin-top: 8px; "," texteffectresponsive ": true," texteffectresponsivesize ": 640," titlecssresponsive ":" font-size: 12px; "," descriptioncssresponsive ":" display: none! important; "," buttoncssresponsive ": "", "addgooglefonts": false, "googlefonts": "", "textleftrightpercentforstatic": 40}}