EXCEL vlookup для копіювання лише другого примірника з аркуша 2 на аркуш 1


2

У мене є список кодів та електронних листів клієнтів на Sheet1 (AC EMAIL), із кодом клієнта, вказаним у колонці A та електронною поштою у колонці B.

Лист змінного струму

Я використовував vlookup для копіювання електронної пошти клієнта на Sheet2 (змінна адреса змінного струму), що містить код клієнта та його поштову адресу.

Я використав: =VLOOKUP(A3,'AC EMAIL'!$A$1:$B$25989,2,FALSE)

АДРЕСА змінного струму з електронною поштою 1

Однак деякі клієнти з’являються на Sheet1 2 або 3 рази, оскільки у них вказано кілька електронних листів.

Я хочу витягти лише другий та третій електронні листи на Sheet2 в іншій колонці електронної пошти.

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

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

Це виявилося менш простим, ніж я сподівався. Вдячний за будь-яку допомогу.

Відповіді:


1

Це чудове використання для динамічного INDEX MATCHналаштування за допомогою INDIRECTповторного націлювання на пошукові діапазони.

Почніть з банального випадку:

Простий матч INDEX

=INDEX(A2:B10,MATCH(D2,A2:A10,0),2)

Давши список кодів та імен, перейдіть до (першого) коду відповідності рядків та поверніть ім’я з цього рядка.

Але як отримати другий відповідний запис?

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

Іншими словами, використовуйте ту саму формулу, але замініть A2:B10на INDIRECT("A"&MATCH(D2,$A$2:$A$10,0)+2&":B10") (потім оберніть всю річ IFERRORдля появи)

Тепер ми маємо:

Двошаровий ІНДЕКС-МАТЧ

=IFERROR(INDEX(INDIRECT("A"&MATCH($D2,$A$2:$A$99,0)+2&":B99"),MATCH($D2,INDIRECT("A"&MATCH($D2,$A$2:$A$99,0)+2&":A99"),0),2),"not found")

Ви зауважите, що цей метод покладається на сортування стовпця «Клієнтський код» - ми чітко зашифрували +2в посилання клітинки, яка визначає діапазон - пам’ятайте, початковий діапазон починався з A2, ні A1, тому ми додаємо один рядок, щоб наздогнати, а потім ми додаємо ще один рядок, щоб розпочати діапазон із наступного рядка вниз.

Що повинно чітко зрозуміти, що ми будемо робити далі:

Наступна ітерація

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

Але що робити, якщо у нас є багато стовпців або просто не подобається оновлення формул?

Нарешті, ми замінимо +2і ці +3компенсації на посилання на комірки, використовуючи COLUMN. Це робить формулу розширюваною горизонтально без будь-яких вручну редагувань при копіюванні:

Одна формула, що править їм усім

=IFERROR(INDEX(INDIRECT("A"&MATCH($D2,$A$2:$A$99,0)+COLUMN()-4&":B99"),MATCH($D2,INDIRECT("A"&MATCH($D2,$A$2:$A$99,0)+COLUMN()-4&":A99"),0),2),"not found")

Зауважте, що оскільки у мене є приклади даних про призначення, починаючи з комірки E2, моє COLUMNзміщення потрібно встановлювати вручну, один раз, до COLUMN()-4- але як тільки це є, ця формула може бути записана у верхній лівій комірці цільового діапазону та скопійована вниз та впоперек для стількох примірників, скільки вам потрібно (знову ж таки, доки вихідні дані будуть відсортовані за кодом, оскільки вся передумова ітеративного INDEX MATCHполягає в тому, щоб повторити пошук із "наступного ряду вниз").


Я знаю, що це давнє запитання, але це абсолютно те, що Excel може виконати у функції робочого аркуша (без полів помічників!), І цей занадто довго страждав без законної відповіді!
Алекс М

0

VLOOKUP()не підтримує отримання другого чи третього (або будь-якого іншого, ніж перше) збігу. Передбачається знайти першу відповідність, яка відповідає критеріям пошуку .

Ваше запитання не говорить точно про те, що ви завжди хочете другу, або завжди третю - або завжди останню відповідність.
Якщо припустити, що ви завжди хочете останнього матчу, одним із способів було б відповідно сортувати масив. Які б дані не робили запис, який ви хочете бути в останньому положенні, можна використовувати для їх сортування на першу позицію (шляхом сортування цього стовпця в іншому напрямку). Якщо поточна послідовність є лише історичною з моменту введення, ви можете додати стовпець "Активний" і поставити туди "X" (а потім сортувати за спаданням) тощо; або додати стовпець із дійсною датою чи щось подібне.
Крім того, ви можете ідентифікувати та відкинути всі дублікати, зберігаючи лише записи "останнього" = "потрібного"; залежно від того, чи хочете ви утримати інших.

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


Дякую за ваші пропозиції, я спробую ваші інші ідеї. Ура.
Ельза Мак

"У будь-якому випадку не існує простого прямого рішення" для певних значень "простого прямолінійного", я думаю, що ні, але це, звичайно, не вимагає VBA, а лише творчий підхід до використання ваших функцій.
Алекс М

0

Зважаючи на те, що "VLOOKUP () не підтримує отримання другого або третього (або будь-якого іншого, ніж перший) збігу. Передбачається, що він знайде першу відповідність, яка відповідає критеріям пошуку." -

ви повинні зробити пошук унікальним. Якщо ви створите стовпець для послідовності, що збільшується для подвійних, і починається з нового - наприклад, якщо (c2 = c3, + b2 + 1,1), а потім зробити стовпець ключа, що включає послідовність - + c3 & b3, то ви можете зробити свій пошук у будь-якій послідовності.

Ед бере 2 математики

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