Як отримати нагадування про матч у MS Excel 2003


0

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

Я хочу, щоб MS excel 2003 вилучив залишок Списку А на основі списку B.

* Список A - 2000 предметів, список B - лише 10-30 макс

Список А
№ 1 ---- 1 2 3 4 5 6 (кожна цифра розміщується в одній комірці, завжди 6 цифр)
№ 2 ---- 1 1 2 3 4 5 (кожна цифра розміщується в 1 комірці, завжди 6 цифр)
№ 3 ---- 1 3 4 5 6 7 (кожна цифра розміщується в 1 комірці, завжди 6 цифр)

Список B
№ 1 ---- 1 2 3 (кожна цифра розміщується в 1 комірці, завжди 3 цифри)
№ 2 ---- 1 1 4 (кожна цифра розміщується в 1 комірці, завжди 3 цифри)
Ні. 3 ---- 2 3 5 (кожна цифра розміщується в 1 комірці, завжди 3 цифри)

Наприклад:

У списку А знайдіть збіги (якщо такі є) на основі вхідних даних зі списку В і поверніть решту як вихідний. Якщо не знайдено відповідності, вихід не потрібен.

Список A
№ 1 ---- 1 2 3 4 5 6 (кожна цифра розміщується в 1 комірці, завжди 6 цифр)

На основі списку B
№ 1 ---- 1 2 3 (знайдено відповідність (1 та 2 & 3), тоді я вибираю решту вручну # # # 4 5 6 або = 456)
№ 2 ---- 1 1 4 ( не знайдено відповідності (1 & 1 & 4 немає), немає результату)
№ 3 ---- 2 3 5 (відповідність знайдена (2 & 3 & 5 присутня), тоді я вибираю 1 # # 4 # 6 або вихід = 146)

Я подумав, що я використовую функцію COUNT для підрахунку частоти кожної цифри 0-9 у кожному елементі списку А, а потім використовую функцію IF & AND (визначаючи, яка і скільки кожна цифра потрібна, щоб визначити відповідність), щоб сказати мені, яка елементи зі списку B відповідають списку А.

Отже, для кожного елемента в Списку А мені потрібно Excel, щоб пройти через весь список B, і вихід може бути в діапазоні від жодного виходу, до максимуму 3 виводу.

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

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


Я не розумію, як ви вибираєте цифри з таблиці.
Райстафаріан

@Raystafarian Я уточнив те, що хотів, сподіваюся, це досить зрозуміло.
Пітер Вермільйон

Кожного з персонажів потрібно оцінювати самостійно? Вони не завжди будуть у тому ж порядку (серії), як список B? Це буде дуже складно без декількох стовпців-помічників і нічого подібного, особливо якщо це чудово 2003. Макрос може це зробити краще.
Райстафаріан

Ваші правила узгодження не мають сенсу. У більшості випадків, здається, ви знайдете збіг рядків, а решта - будь-які цифри до або після матчу. Однак ваш приклад для результату №2 виглядає так, що список B 114 був узгоджений з 11 ## 4, щоб залишити 235.
fixer1234

Отже, критеріями відповідності є просто всі три цифри у списку В (завжди рівно три?), Що містяться в одному списку в Списку А, але не обов'язково безперервно? Чи обидва елементи списку завжди у порядку зростання?
fixer1234

Відповіді:


1

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

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

Це ґрунтується на вашому списку А у стовпцях від A до F, дані починаються з першого рядка (2000 рядків). Список B знаходиться у стовпцях H - J, дані починаються з рядка 1 (30 рядків).

Перша таблиця починається з L1. Ця таблиця створює перелік позицій записів Список B в записах Списку А. Наприклад:

                          Position:  1 2 3 4 5 6          
    So if a List A record contains:  1 3 3 5 7 9
    and a List B record contains:    1 3     7
    the entry in this table will be: 1 2     5  (stored as a single number: 125)

Якщо запис списку B не відповідає запису списку А, у комірці буде номер N / A. Макет цієї таблиці виглядає так:

            [L]     [M]      [N]       [O]  
    [1]             <=======List B Row========>
    [2] List A Row   1        2         3    ...
    [3]     1
    [4]     2
    [5]     3
        ...

Потрібно фактично розмістити номери рядків як заголовки стовпців у другому рядку стовпців M через AP та як мітки рядків у стовпці L. Саме такі формули використовують як покажчики. Існує 30 стовпців даних, по одному для кожного рядка записів у списку B, і у вас буде 2 000 рядків, що представляють записи у списку А, починаючи з рядка 3. Кожна комірка таблиці відображає запис у списку B порівняно із записом у списку А . Це формула для M3:

    =MATCH(INDIRECT("H"&M$2),$A1:$F1,0)&MATCH(INDIRECT("H"&M$2),$A1:$F1,0)
     +MATCH(INDIRECT("I"&M$2),INDIRECT(ADDRESS($L3,MATCH(INDIRECT("H"&M$2),$A1:$F1,0)+1, , )&":$F"&$L3),0)&MATCH(INDIRECT("H"&M$2),$A1:$F1,0)
     +MATCH(INDIRECT("I"&M$2),INDIRECT(ADDRESS($L3,MATCH(INDIRECT("H"&M$2),$A1:$F1,0)+1, , )&":$F"&$L3),0)
     +MATCH(INDIRECT("J"&M$2),INDIRECT(ADDRESS($L3,MATCH(INDIRECT("H"&M$2),$A1:$F1,0)
     +MATCH(INDIRECT("I"&M$2),INDIRECT(ADDRESS($L3,MATCH(INDIRECT("H"&M$2),$A1:$F1,0)+1, , )&":$F"&$L3),0)+1, , )&":$F"&$L3),0)

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

Друга таблиця починається з AR1. Ця таблиця побудована так само:

           [AR]    [AS]      [AT]      [AU]  
    [1]             <=======List B Row========>
    [2] List A Row   1        2         3    ...
    [3]     1
    [4]     2
    [5]     3
        ...

Ця таблиця працює аналогічно першій - кожна комірка представляє результати запису Списку B проти запису списку А. Ця таблиця містить ваші залишки. Отже, у прикладі, який я дав для першої таблиці, решта складе 359:

    So if a List A record contains:  1 3 3 5 7 9
    and a List B record contains:    1 3     7
    the remainder is:                    3 5   9

Формула, що йде в комірці AS3, така:

    =IF(ISNA(M3),"",IF(ISERROR(FIND(COLUMN(INDIRECT("a"&$AR3)),M3)),INDIRECT("a"&$AR3),"")&
     IF(ISERROR(FIND(COLUMN(INDIRECT("b"&$AR3)),M3)),INDIRECT("b"&$AR3),"")&
     IF(ISERROR(FIND(COLUMN(INDIRECT("c"&$AR3)),M3)),INDIRECT("c"&$AR3),"")&
     IF(ISERROR(FIND(COLUMN(INDIRECT("d"&$AR3)),M3)),INDIRECT("d"&$AR3),"")&
     IF(ISERROR(FIND(COLUMN(INDIRECT("e"&$AR3)),M3)),INDIRECT("e"&$AR3),"")&
     IF(ISERROR(FIND(COLUMN(INDIRECT("f"&$AR3)),M3)),INDIRECT("f"&$AR3),""))

Кожна комірка цієї таблиці буде містити або залишок, або нульовий символ, якщо не було відповідності.

Ви хотіли отримати підсумок результатів для кожного запису "Список А". Оскільки кожен рядок таблиці являє собою запис «Список А», резюме може міститись у кінці кожного рядка таблиці. 30 стовпців таблиці закінчуються на колонці BV, тому результати знаходяться у колонці BW. Формула для BW3 буде такою:

    =AS3&IF(ISBLANK(AS3),""," ")&AT3&IF(ISBLANK(AT3),""," ")& ... &BV3&IF(ISBLANK(BV3),""," ")

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

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


@Peter Vermillion - стовпець L - номери рядків для списку A, які формули використовують як індекс. Те саме для стовпця AR. Вам потрібно вставити ці числа, щоб вони діяли як мітки рядків для таблиць. Номери рядків для списку B потрібно ввести як заголовки стовпців у рядку 2, стовпці M - AP для першої таблиці та стовпці AS через BV для другої таблиці. Щоб формули працювали, потрібно фактично створити заголовки рядків і стовпців, щоб вони виглядали як приклади у відповіді. Візьміть більше аспірину і повторіть спробу.
fixer1234

приймаючи більше аспірину ... намагаюся знову
Пітер Вермільйон

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