Отримання унікальних значень у Excel лише за допомогою формул


75

Чи знаєте ви спосіб в Excel "обчислити" за формулою перелік унікальних значень?

Наприклад: вертикальний діапазон містить значення "red", "blue", "red", "green", "blue", і я хочу їсти , як результат , , , + в кінцевому рахунку 2 інших порожніх клітинок. "black"
"red"blue""green""black"

Я вже знайшов спосіб отримати розрахований відсортований список за допомогою МАЛОГО або ВЕЛИКОГО в поєднанні з INDEX, але я хотів би мати і цей розрахований сорт, БЕЗ ВИКОРИСТАННЯ VBA.


Як потрібно повернути дані? Думаю, більшість (усіх?) Формул повертають значення, а не списки ...
Аркадій

@scrible: використовуючи формулу масиву, ви можете повернути масив комірок.
Patrick Honorez

Як швидку модифікацію попереднього допису, якщо в стовпці B ви зміните позицію $ A11 на $ A12, ви отримаєте по одній копії кожного значення, включаючи повторювані значення, але лише один раз !! :)

2
Через багато років нарешті буде впроваджено вбудоване рішення .
GSerg

@GSerg 8-) MS, можливо, вирішив додати кілька корисних, які вже давно доступні в GSheets!
Патрік Гонорес

Відповіді:


29

Це старожил, і там є кілька рішень, але я придумав коротшу та простішу формулу, ніж будь-яка інша, з якою я стикався, і це може бути корисно кожному, хто проходить повз.

Я назвав список кольорів Colors(A2: A7), а формула масиву, що вкладається в клітинку C2 , така ( виправлена ):

=IFERROR(INDEX(Colors,MATCH(SUM(COUNTIF(C$1:C1,Colors)),COUNTIF(Colors,"<"&Colors),0)),"")

Використовуйте Ctrl+Shift+Enterдля введення формули в C2 і скопіюйте C2 до C3: C7 .

Пояснення із зразками даних {"червоний"; «синій»; «червоний»; «зелений»; «синій»; "чорний"}:

  1. COUNTIF(Colors,"<"&Colors)повертає масив (# 1) із підрахунком значень, менших за кожен елемент у даних {4; 1; 4; 3; 1; 0} (чорний = 0 елементів менше, синій = 1 елемент, червоний = 4 елементи ). Це можна перевести у значення сортування для кожного елемента.
  2. COUNTIF(C$1:C...,Colors)повертає масив (# 2) з 1 для кожного елемента даних, який вже є у відсортованому результаті. У C2 він повертає {0; 0; 0; 0; 0; 0}, а в C3 {0; 0; 0; 0; 0; 1}, оскільки "чорний" є першим у сортуванні та останнім у даних. У C4 {0; 1; 0; 0; 1; 1} це означає "чорний", і всі випадки "синього" вже присутні.
  3. У SUMповертає до-е значення сортування, шляхом підрахунку всіх менші значення входжень, які вже присутній (сума масиву # 2).
  4. MATCH знаходить перший індекс k-го значення сортування (індекс у масиві №1).
  5. Це IFERRORлише для того, щоб приховати #N/Aпомилку в нижчих клітинках, коли відсортований унікальний список завершено.

Щоб знати, скільки унікальних предметів у вас є, ви можете скористатися цією звичайною формулою :

=SUM(IF(FREQUENCY(COUNTIF(Colors,"<"&Colors),COUNTIF(Colors,"<"&Colors)),1))

1
Невелика "помилка" у регістрі: якщо вихідні дані містять порожні місця. Це можна вирішити, додавши IF(ISBLANK(Colors), 0,1)до масиву №1 та до SUM().
AviD

@AviD, привіт. Не могли б ви допомогти пояснити, чи є порожні значення? зараз мій масив формул повертає перше значення для цілого масиву .. велике спасибі
Фрілансер

Я не впевнений, що розумію це рішення. Приклади знімків екрану були б корисними.
Стевойсяк

@dePatinkin Це працює для мене, але мені потрібно жорстко закодувати перший елемент у списку, інакше він ігнорує всі елементи, що починаються з А. Чи є у вас рішення для ігнорування певних елементів у списку? (наприклад, не повертати персонал)
Думітру Даніель

1
@DumitruDaniel Можливо, це тому, що ви написали "А" як заголовок стовпця в C1. Заголовок не повинен відповідати жодному зі значень. Фільтрування списку - це інше питання, з іншим рішенням, тому, можливо, відкрийте для нього питання. Якщо вам не потрібно сортувати, ви можете скористатися такою формулою =IFERROR(INDEX(Colors,MATCH(0,COUNTIF(C$1:C1,Colors)+(Colors="blue"),0)),"").
dePatinkin 02.03.20

53

Добре, у мене є дві ідеї для вас. Сподіваємось, хтось із них доставить вас туди, куди вам потрібно піти. Зверніть увагу, що перший ігнорує запит зробити це як формулу, оскільки це рішення не є гарним. Я вважав, що переконуюсь, що простий спосіб справді не спрацює для вас; ^).

Скористайтеся командою Розширений фільтр

  1. Виберіть список (або розмістіть свій вибір у будь-якому місці списку та натисніть кнопку «ОК», якщо з’явиться діалогове вікно зі скаргами на те, що Excel не знає, чи містить ваш список заголовки чи ні)
  2. Виберіть Дані / Розширений фільтр
  3. Виберіть "Фільтрувати список, на місці" або "Копіювати в інше місце"
  4. Натисніть "Лише унікальні записи"
  5. Клацніть добре
  6. Ви закінчили. Унікальний список створюється або на місці, або в новому місці. Зверніть увагу, що ви можете записати цю дію, щоб створити однорядковий сценарій VBA для цього, який потім можна було б узагальнити для роботи в інших ситуаціях (наприклад, без ручних кроків, перелічених вище).

Використання формул (зауважте, що я будуюся на рішенні Locksfree, щоб у підсумку вийшов список без дірок)

Це рішення буде працювати з наступними застереженнями:

  • Список повинен бути відсортований (за зростанням чи за спаданням значення не має). Насправді це досить точно, оскільки вимога насправді полягає в тому, що всі подібні предмети повинні бути суміжними, але сортування - це найпростіший спосіб досягти цього стану.
  • Потрібні три нові стовпці (два нових стовпці для розрахунків і одна нова колонка для нового списку). Другу та третю колонки можна поєднати, але я залишу це як вправу для читача.

    Ось короткий опис рішення:

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

    І ось покроковий приклад:

    1. Відкрийте нову електронну таблицю
    2. У a1: a6 введіть приклад, наведений у вихідному питанні ("червоний", "синій", "червоний", "зелений", "синій", "чорний")
    3. Сортувати список: помістіть виділення в список і виберіть команду сортування.
    4. У стовпці В обчисліть дублікати:
      1. В B1 введіть "= IF (COUNTIF ($ A $ 1: A1, A1) = 1,0, COUNTIF (A1: $ A $ 6, A1))". Зверніть увагу, що "$" у посиланнях на клітинку є дуже важливим, оскільки це значно полегшить наступний крок (заповнення решти стовпця). Значок "$" вказує на абсолютне посилання, так що коли вміст комірки копіюється / вставляється, посилання не оновлюється (на відміну від відносного посилання, яке буде оновлено).
      2. Використовуйте розумну копію для заповнення решти стовпця B: Виберіть B1. Наведіть курсор миші на чорний квадрат у нижньому правому куті виділення. Клацніть та перетягніть униз списку (B6). Після випуску формула буде скопійована у B2: B6 із оновленими відносними посиланнями.
      3. Значення B1: B6 тепер має бути "0,0,1,0,0,1". Зверніть увагу, що записи "1" означають дублікати.
    5. У стовпці C створіть індекс унікальних елементів:
      1. У C1 введіть "= Рядок ()". Ви дійсно просто хочете C1 = 1, але використання Row () означає, що це рішення буде працювати, навіть якщо список не починається в рядку 1.
      2. У C2 введіть "= IF (C1 + 1 <= ROW ($ B $ 6), C1 + 1 + INDEX ($ B $ 1: $ B $ 6, C1 + 1), C1 + 1)". "Якщо" використовується, щоб зупинити створення #REF, коли індекс досягає кінця списку.
      3. Використовуйте розумну копію для заповнення C3: C6.
      4. Значення C1: C6 має бути "1,2,4,5,7,8"
    6. У стовпці D створіть новий унікальний список:
      1. У D1 введіть "= IF (C1 <= ROW ($ A $ 6), INDEX ($ A $ 1: $ A $ 6, C1)," ")". І, якщо "використовується для зупинки випадку #REF, коли індекс виходить за межі кінця списку.
      2. Використовуйте розумну копію для заповнення D2: D6.
      3. Значення D1: D6 тепер повинні бути "чорним", "синім", "зеленим", "червоним", "", "".

    Сподіваюся, це допомагає ....


  • хммм, виявляється вадою мого рішення. Це не працює для такого списку, як "чорний, чорний, синій, синій, рожевий, жовтий". Маю змогу це виправити, але спочатку я повинен трохи попрацювати; ^). Незабаром оновлю.
    Дрю Шерман,

    Гаразд, виправили рішення, і я вважаю, що воно працює у всіх випадках. Відредаговано на місці вище.
    Дрю Шерман,

    Це здається дійсним рішенням. тим часом я знайшов щось за допомогою функцій LARGE або SMALL для сортування елементів. Але моє рішення - це робота лише з числами.
    Patrick Honorez

    Кілька застережень, з якими я зіткнувся під час його реалізації: На кроці 5.1 C1 повинен дорівнювати 1 незалежно від початкової позиції списку. Таким чином, ви завжди маєте правильне відносне положення для діапазону ліній, який ви використовуєте. А IFвикористано на кроці 6.1 працює лише в тому випадку, якщо ви вибрали вузький діапазон. Я зробив нову відповідь із вдосконаленим алгоритмом, який не має цих проблем і не потребує суміжного або відсортованого списку введення.
    ReneSac

    22

    Рішення

    Я створив для вас функцію у VBA, тому ви можете зробити це зараз простим способом.
    Створіть модуль коду VBA (макрос), як ви можете бачити у цьому посібнику .

    1. Натисніть Alt+F11
    2. Клацніть, щоб Moduleувійти Insert.
    3. Вставити код.
    4. Якщо Excel каже, що формат файлу не є макрос, збережіть його як Excel Macro-Enabledу Save As.

    Вихідний код

    Function listUnique(rng As Range) As Variant
        Dim row As Range
        Dim elements() As String
        Dim elementSize As Integer
        Dim newElement As Boolean
        Dim i As Integer
        Dim distance As Integer
        Dim result As String
    
        elementSize = 0
        newElement = True
    
        For Each row In rng.Rows
            If row.Value <> "" Then
                newElement = True
                For i = 1 To elementSize Step 1
                    If elements(i - 1) = row.Value Then
                        newElement = False
                    End If
                Next i
                If newElement Then
                    elementSize = elementSize + 1
                    ReDim Preserve elements(elementSize - 1)
                    elements(elementSize - 1) = row.Value
                End If
            End If
        Next
    
        distance = Range(Application.Caller.Address).row - rng.row
    
        If distance < elementSize Then
            result = elements(distance)
            listUnique = result
        Else
            listUnique = ""
        End If
    End Function
    

    Використання

    Просто увійдіть =listUnique(range)до клітини. Єдиний параметр range- це звичайний діапазон Excel. Наприклад: A$1:A$28або H$8:H$30.

    Умови

    • Обов’язково rangeмає бути стовпець.
    • Перша комірка, де ви викликаєте функцію, повинна знаходитися в тому самому рядку, де rangeпочинається.

    Приклад

    Регулярний випадок

    1. Введіть дані та функцію дзвінка.
      Введіть дані та функцію дзвінка
    2. Вирощуйте його.
      Вирощуйте його
    3. Вуаля.
      Вуаля

    Порожній футляр комірки

    Це працює в стовпцях, у яких є порожні клітинки. Також функція не видає нічого (не помилки), якщо ви перемотаєте комірки (викликаючи функцію) в місця, де не повинно бути вихідних даних, як це я зробив у попередньому прикладі в частині "2. Зрости це".

    Порожній футляр комірки


    4
    Дякую @totymedli. Моє питання стосувалося цього БЕЗ vba.
    Patrick Honorez

    1
    @iDevlop Sry цього не бачив. Насправді я зробив це для друга, просто думав, що це може вам допомогти.
    totymedli

    1
    Чудово, коли це працює, але, здається, Excel зрідка падає з великими наборами даних.
    Джеймі Булл,

    Надзвичайно корисно, але Excel займає занадто багато часу, кожен раз, коли нові дані додаються до списку. Сподіваюся, якщо буде зроблена якась оптимізація, тоді це буде чудово.
    Адарш Мадреча

    Чудово, але не буде працювати, якщо в кінці діапазон містить порожні клітинки. = (Також ця функція не буде працювати для створення ComboBox в комірці. = (
    Ендрю

    17

    Обхідним шляхом є завантаження електронної таблиці Excel у електронну таблицю Google, використання функції UNIQUE (діапазон) Google, яка робить саме те, що ви хочете, а потім збереження електронної таблиці Google у форматі Excel.

    Я визнаю, що це не життєздатне рішення для користувачів Excel, але такий підхід корисний для тих, хто хоче функціональних можливостей і може користуватися електронною таблицею Google.


    Не зовсім відповідь, у будь-якому випадку цікавий. Дякую
    Патрік Гонорес

    Так, як я вже сказав, не життєздатний для користувачів Excel, але корисний для користувачів електронних таблиць Google з тим самим питанням.
    yoyo

    Найголовніше, що формула оновлюється автоматично, але це не так.
    sancho.s ReinstateMonicaCellio

    3
    UNIQUE - це формула, яка оновлюється автоматично, як і будь-яка інша.
    yoyo

    3

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

    Скажімо, у вас є стовпець "червоний", "синій", "червоний", "зелений", "синій", "чорний"

    потім помістіть це в B2 як формулу масиву та скопіюйте =IFERROR(INDEX(A$2:A$7;SMALL(IF(FREQUENCY(MATCH(A$2:A$7;A$2:A$7;0);ROW(INDIRECT("1:"&COUNTA(A$2:A$7))));ROW(INDIRECT("1:"&COUNTA(A$2:A$7)));"");ROW(A1)));"")

    тоді це повинно виглядати приблизно так; введіть тут опис зображення


    3

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

    =INDEX($A$2:$A$18,MATCH(SUM(COUNTIF($A$2:$A$18,C$1:C1)),COUNTIF($A$2:$A$18,"<" &$A$2:$A$18),0))
    

    дані про діапазон: A2:A18

    формула в комірці C2

    Це ФОРМУЛА ARRAY


    3

    Спробуйте цю формулу в B2комірці

    =IFERROR(INDEX($A$2:$A$7,MATCH(0,COUNTIF(B$1:$B1,$A$2:$A$7),0),1),"")
    

    Після клацання F2натисніть Ctrl+ Shift+Enter

    введіть тут опис зображення


    2

    Ви можете використовувати COUNTIF, щоб отримати кількість випадків значення в діапазоні. Отже, якщо значення в A3, діапазон дорівнює A1: A6, то в наступному стовпці використовуйте IF (ТОЧНО (COUNTIF (A3: $ A $ 6, A3), 1), A3, ""). Для A4 це буде IF (ТОЧНО (COUNTIF (A4: $ A $ 6, A3), 1), A4, "")

    Це дасть вам стовпець, де всі унікальні значення містяться без дублікатів


    2

    Припускаючи, що стовпець A містить значення, які ви хочете знайти, єдиний унікальний екземпляр, і має рядок заголовка, я використав наступну формулу. Якщо ви хотіли, щоб його масштабували непередбачуваною кількістю рядків, ви можете замінити A772 (там, де закінчувалися мої дані) на = ADDRESS (COUNTA (A: A), 1) .

    = IF (COUNTIF (A5: $ A $ 772, A5) = 1, A5, "")

    Це відобразить унікальне значення НАЙНІШНЕ примірник кожного значення в стовпці і не передбачає жодного сортування. Він використовує відсутність абсолютних значень, щоб, по суті, мати зменшується "розсувне вікно" даних для підрахунку. Коли лічильник у зменшеному вікні дорівнює 1, тоді цей рядок є останнім екземпляром цього значення у стовпці.


    1

    Рішення Дрю Шермана дуже добре, але список повинен бути суміжним (він пропонує сортувати вручну, і це для мене неприйнятно). Рішення Guitarthrower є досить повільним, якщо кількість предметів велика і не відповідає порядку вихідного списку: він видає відсортований список незалежно.

    Я хотів оригінальний порядок предметів (які були відсортовані за датою в іншій колонці), і додатково я хотів виключити елемент із остаточного списку не лише у тому випадку, якщо він був продубльований, а й з ряду інших причин.

    Моє рішення - це вдосконалення рішення Дрю Шермана. Аналогічно, це рішення використовує 2 стовпці для проміжних розрахунків:

    Стовпець A:

    Список із дублікатами та, можливо, пробілами, які потрібно відфільтрувати. Я розміщу його в інтервалі A11: A1100 як приклад, оскільки у мене були проблеми з переміщенням рішення Дрю Шермана до ситуацій, коли воно не починалося з першого рядка.

    Стовпець B:

    Ця формула виведе 0, якщо значення в цьому рядку є дійсним (містить недубльоване значення). Зверніть увагу, що ви можете додати будь-які інші умови виключення, які вам потрібні, у першій ІФ або як ще одну зовнішню ІФ.

    =IF(ISBLANK(A11);1;IF(COUNTIF($A$11:A11;A11)=1;0;COUNTIF($A11:A$1100;A11)))
    

    Використовуйте розумну копію для заповнення стовпця.

    Стовпець C:

    У першому рядку ми знайдемо перший дійсний рядок:

    =MATCH(0;B11:B1100;0)
    

    З цієї позиції ми шукаємо наступне допустиме значення за такою формулою:

    =C11+MATCH(0;OFFSET($B$11:$B$1100;C11;0);0)
    

    Помістіть його у другий рядок і використовуйте розумну копію, щоб заповнити решту стовпця. Ця формула видасть помилку # N / D, коли немає більше унікальних ітен для вказівки. Ми скористаємося цим у наступній колонці.

    Стовпець D:

    Тепер нам просто потрібно отримати значення, вказані стовпцем C:

    =IFERROR(INDEX($A$11:$A$1100; C11); "")
    

    Використовуйте розумну копію для заповнення стовпця. Це вихідний унікальний список.


    1

    Ви також можете зробити це таким чином.

    Створіть такі іменовані діапазони:

    nList = the list of original values
    nRow = ROW(nList)-ROW(OFFSET(nList,0,0,1,1))+1
    nUnique = IF(COUNTIF(OFFSET(nList,nRow,0),nList)=0,COUNTIF(nList, "<"&nList),"")
    

    За допомогою цих 3 іменованих діапазонів ви можете сформувати упорядкований список унікальних значень за формулою нижче. Він буде відсортований за зростанням.

    IFERROR(INDEX(nList,MATCH(SMALL(nUnique,ROW()-?),nUnique,0)),"")
    

    Вам потрібно буде підставити номер рядка комірки безпосередньо над першим елементом вашого унікального впорядкованого списку на "?" характер.

    напр. Якщо ваш унікальний впорядкований список починається в комірці B5, тоді формула буде такою:

    IFERROR(INDEX(nList,MATCH(SMALL(nUnique,ROW()-4),nUnique,0)),"")
    

    1

    Я здивований, що це рішення ще не придумано. Я думаю, що це одне з найпростіших

    Надайте вашим даним заголовок і помістіть їх у динамічний іменований діапазон (тобто, якщо ваші дані знаходяться в колі A)

    =OFFSET($A$2,0,0,COUNTA($A:$A),1)
    

    А потім створіть зведену таблицю, зробивши джерело вашим іменованим діапазоном.

    Просто вставивши заголовок у розділ рядків, ви отримаєте унікальні значення, сортуйте будь-яким способом за вподобаною функцією.


    1

    Я вставив те, що використовую, у свій файл Excel нижче. Це визначає унікальні значення з діапазону L11:L300та заповнює їх у стовпці V, V11 і далі. У цьому випадку я маю цю формулу в v11 і перетягую її вниз, щоб отримати всі унікальні значення.

    =INDEX(L$11:L$300,MATCH(0,COUNTIF(V$10:V10,L$11:L$300),0))
    

    або

    =INDEX(L$11:L$300,MATCH(,COUNTIF(V$10:V10,L$11:L$300),))
    

    це формула масиву


    Я спробувала це, але, здається, COUNTIF не працює з діапазоном як другим аргументом у Excel 2010.
    Елен Спертус

    Більше інформації про цей підхід тут - exceljet.net/formula/extract-unique-items-from-a-list .
    yoyo

    1

    Звернення до зведеної таблиці може не враховуватись як використання лише формул, але здається більш практичним, ніж більшість інших пропозицій на даний момент:

    Приклад SO1429899


    0

    Нещодавно я зіткнувся з тією ж проблемою і нарешті зрозумів її.

    Використовуючи ваш список, ось вставка з мого Excel з формулою.

    Я рекомендую писати формулу десь посередині списку, як, наприклад, у комірці C6 мого прикладу, а потім копіювати її та вставляти вгору та вниз у стовпець, формула повинна коригуватися автоматично без необхідності її повторного введення.

    Єдина комірка, яка має однозначно іншу формулу, знаходиться в першому рядку.

    Використання вашого списку ("червоний", "синій", "червоний", "зелений", "синій", "чорний"); ось результат: (у мене недостатньо високий рівень для розміщення зображення, тому сподіваюся, що ця версія txt має сенс )

    • [Стовпець A: Оригінальний список]
    • [Стовпець B: Унікальний результат списку]
    • [Стовпець C: Формула унікального списку]

      1. червоний, червоний, =A3
      2. синій, синій, =IF(ISERROR(MATCH(A4,A$3:A3,0)),A4,"")
      3. червоний,, =IF(ISERROR(MATCH(A5,A$3:A4,0)),A5,"")
      4. зелений, зелений, =IF(ISERROR(MATCH(A6,A$3:A5,0)),A6,"")
      5. синій,, =IF(ISERROR(MATCH(A7,A$3:A6,0)),A7,"")
      6. чорний, чорний, =IF(ISERROR(MATCH(A8,A$3:A7,0)),A8,"")

    0

    Це працює лише в тому випадку, якщо значення впорядковані, тобто всі "червоні" знаходяться разом, а всі "сині" - разом і т.д. Введіть B2 в 1 В b3 type = if (A2 = A3, B2, B2 + 1) Перетягніть формулу до кінця ваших даних. Всі "Червоні" будуть 1, усі "сині" будуть 2, усі "зелені" будуть бути 3 тощо.

    У C2 введіть 1, 2, 3 і т.д., опускаючись по стовпцю D2 = OFFSET ($ A $ 1, MATCH (c2, $ B $ 2: $ B $ x, 0), 0) - де x - остання клітинка Перетягніть вниз , з'являться лише унікальні значення. - помістити перевірку помилок


    0

    Для рішення, яке працює для значень у декількох рядках і стовпцях, я знайшов наступну формулу дуже корисною з http://www.get-digital-help.com/2009/03/16/unique-values-from-multiple- formula-using-array-formula / Oscar на сайті get-digital.help.com навіть проходить це поетапно та з візуалізованим прикладом.

    1) Дайте діапазону значень мітку tbl_text

    2) Застосуйте наступну формулу масиву за допомогою CTRL + SHIFT + ENTER до клітинки B13 у цьому випадку. Змініть $ B $ 12: B12, щоб посилатися на клітинку над коміркою, в яку ви вводите цю формулу.

        =INDEX(tbl_text, MIN(IF(COUNTIF($B$12:B12, tbl_text)=0, ROW(tbl_text)-MIN(ROW(tbl_text))+1)), MATCH(0, COUNTIF($B$12:B12, INDEX(tbl_text, MIN(IF(COUNTIF($B$12:B12, tbl_text)=0, ROW(tbl_text)-MIN(ROW(tbl_text))+1)), , 1)), 0), 1)
    

    3) Скопіюйте / перетягніть вниз, доки не отримаєте N / A.


    0

    Якщо помістити всі дані в однакові стовпці та використати таку формулу Приклад формули: =IF(C105=C104,"Duplicate","Not a Duplicate")

    Кроки

    1. Сортувати дані
    2. Додайте стовпець для формули
    3. Перевіряє, чи відповідає комірка клітці над нею
    4. Потім відфільтруйте Not a Duplicate
    5. Необов’язково: Скопіюйте дані, розраховані за стовпцем формули, та вставте лише як значення (таким чином, якщо ви почнете видаляти дані, ви не почнете отримувати помилки
    6. ПРИМІТКА / ПОПЕРЕДЖЕННЯ: Це працює лише в тому випадку, якщо ви спочатку сортуєте дані

    Приклад формули: =IF(C105=C104,"Duplicate","Not a Duplicate")


    0

    Оптимізоване рішення VBScript

    Я використовував код totymedli, але виявив, що він заглиблюється при використанні великих діапазонів (на що вказували інші), тому я трохи оптимізував його код. Якщо хтось зацікавлений отримати унікальні значення за допомогою VBScript, але виявляє, що код totymedli повільний під час оновлення, спробуйте наступне:

        Function listUnique(rng As Range) As Variant
            Dim val As String
            Dim elements() As String
            Dim elementSize As Integer
            Dim newElement As Boolean
            Dim i As Integer
            Dim distance As Integer
            Dim allocationChunk As Integer
            Dim uniqueSize As Integer
            Dim r As Long
            Dim lLastRow  As Long
    
            lLastRow = rng.End(xlDown).row
    
            elementSize = 1
            unqueSize = 0
    
            distance = Range(Application.Caller.Address).row - rng.row
    
            If distance <> 0 Then
                If Cells(Range(Application.Caller.Address).row - 1, Range(Application.Caller.Address).Column).Value = "" Then
                    listUnique = ""
                    Exit Function
                End If
            End If
    
            For r = 1 To lLastRow
                val = rng.Cells(r)
                If val <> "" Then
                    newElement = True
                    For i = 1 To elementSize - 1 Step 1
                        If elements(i - 1) = val Then
                            newElement = False
                            Exit For
                        End If
                    Next i
                    If newElement Then
                        uniqueSize = uniqueSize + 1
                        If uniqueSize >= elementSize Then
                            elementSize = elementSize * 2
                            ReDim Preserve elements(elementSize - 1)
                        End If
                        elements(uniqueSize - 1) = val
                    End If
                End If
            Next
    
    
            If distance < uniqueSize Then
                listUnique = elements(distance)
            Else
                listUnique = ""
            End If
        End Function
    

    Питання полягає у VBA, а не vbScript, а лише ВИКОРИСТАННЯМ ФОРМУЛИ.
    Патрік Онорез

    0

    Просте рішення формули: Використання функцій динамічного масиву (функція UNIQUE)

    З осені 2018 року версії підписки Microsoft Excel (програма Office 365 / Microsoft 365) містять так звані функції динамічного масиву (поки що недоступні в версіях Office 2016/2019 без підписки).

    УНІКАЛЬНА функція

    Однією з таких функцій є UNIQUEфункція, яка надасть масив унікальних значень для обраного діапазону.

    Приклад

    У наступному прикладі вхідні значення знаходяться в діапазоні A1:A6. UNIQUEФункція набрана в клітинку C1.

    =UNIQUE(A1:A6)
    

    Просте рішення для показу унікальних значень у Excel за допомогою функцій динамічного масиву

    Як бачите, UNIQUEфункція автоматично переллється на необхідний діапазон комірок, щоб показати всі унікальні значення. На це вказує тонка синя рамка навколо C1:C4.

    Добре знати

    Оскільки UNIQUEфункція автоматично переливається на необхідну кількість рядків, ви повинні залишити достатньо місця під C1. Якщо місця недостатньо, ви отримаєте #SPILLпомилку.

    Функції динамічного масиву: розлив неможливий, оскільки значення в C3 блокує діапазон розливу

    Якщо ви хочете послатися на результати на UNIQUEфункції, ви можете просто посилатися на клітинку , яка містить UNIQUEфункцію і додати хеш - #знак.

    =C1#
    

    Також можна перевірити унікальні значення в декількох стовпцях . У цьому випадку функція UNIQUE доставить усі рядки, де поєднання комірок у рядку є унікальними:

    Застосування функції UNIQUE до кількох стовпців

    Якщо ви хочете показати унікальні стовпці замість унікальних рядків , вам потрібно встановити для [by_col]аргументу значення TRUE(за замовчуванням це FALSEозначає, що ви отримаєте унікальні рядки).

    Ви також можете показати значення, які з’являються рівно один раз , встановивши для [exactly_once]аргументу значення TRUE:

    =UNIQUE(A1:A6;;TRUE)
    

    Показати унікальні значення, які з’являються рівно один раз


    -1

    Виділіть стовпець із повторюваними значеннями, потім перейдіть на вкладку Дані, Потім Інструменти даних виберіть видалити дублікат виберіть 1) "Продовжити поточний вибір" 2) Клацніть на Видалити дублікат .... 3) Клацніть на "Вибрати все" кнопку 4) Клацніть гаразд

    тепер ви отримуєте унікальний список цінностей.

    Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
    Licensed under cc by-sa 3.0 with attribution required.