2017-02-01 8 views
1

Okay Мне нужна помощь, прежде чем я тянуть на себе волосы: PВнешняя рабочая тетрадь ВПР с массивом INDIRECT/MATCH

То, что я в конечном счете хочу сделать, это найти второе значение ВПР. Базовая конструкция: 1. Найдите номер строки значений с формулой MATCH 2. Затем используйте формулу INDIRECT для смещения массива таблицы вниз от оригинала. VLOOKUP

Звучит просто. И я получил это, чтобы работать отлично в одной книге, но мой VLOOKUP должен найти ценности во второй книге.

В моей голове формула ниже должна работать, но, очевидно, это не так.

=VLOOKUP(A1,'[InsightsDataExport.xlsx]Lead Profile'!(INDIRECT("AP"&(((MATCH(A1,'[InsightsDataExport.xlsx]Lead Profile'!$AP:$AP,0))+1))):AR10000,2,FALSE) 

Так мой, хотя был

  1. смотрит на Workbook 1 А1 ячейки
  2. Таблица массива в Workbook 2 (ака InsightsDataExport)
  3. КОСВЕННЫЕ пар колонке "AP" с номером строки. Номер строки найден с использованием формулы MATCH для поиска первого вхождения в форму 1 книги значений A1 в столбцах AP рабочей книги 2, затем добавляется 1 (следовательно, таблица массива начинается ПОСЛЕ первого появления)

Я просто собираюсь вокруг и вокруг по кругу. Если бы кто-то мог указать мне в правильном направлении, что было бы весьма признательно.

+0

Вы должны построить всю ссылку внутри Косвенное, в том числе книги и листа –

ответ

1

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

INDIRECT - это мощная, но неустойчивая функция, которая всегда будет пересчитываться с каждым изменением в книге. Если вы используете его во всей колонке, это может значительно замедлить работу вашей книги. Вы также застреваете в произвольно большой области, которая имеет собственные риски и проблемы с производительностью.

Вы можете найти номер строки второго экземпляра значения, используя функцию, введенную массивом. Двойной щелчок в ячейке, так что вы находитесь в режиме редактирования, вставить в эту формулу, а затем подтвердить его с помощью CRTL-SHIFT-ENTER:

=SMALL(IF('[InsightsDataExport.xlsx]Lead Profile'!$AP1:$AP10000=A1,ROW($A$1:$A$10000),FALSE),2) 

Внутренние части этой формулы необходимо выполнить следующие действия:

'[InsightsDataExport.xlsx]Lead Profile'!$AP1:$AP10000=A1 

создает массив истинных и ложных значений в зависимости от того, каждая ячейка в AP1: AP10000 соответствует значению в локальном A1

ROW($A$1:$A$10000) 

создает массив чисел от 1 до 10000, которые используются, если в ячейке соответствует A1, в противном случае используется FALSE. Итак, если значение, которое вы ищете, найдено в ячейках 2 и 5, внутренняя часть формулы имеет такой массив, как:

{FALSE, 2, FALSE, FALSE, 5, FALSE ....}

Затем МАЛЫЙ (массив, 2) означает взять 2 наименьшее числовое значение, которое будет строка номер 2-го матча, который в данном случае в 5.

чтобы увидеть его в медленном движении, проверьте его на небольшом диапазоне, затем используйте инструмент «Функция оценки» на вкладке «Формулы».

Теперь, когда у вас есть номер строки, вы можете использовать индекс столбца, вы на самом деле ищете:

=INDEX('[InsightsDataExport.xlsx]Lead Profile'!$AR1:$AR10000,rownumber) 

Однако, это все еще работает над сколь угодно большим диапазоном, чтобы убедиться, что он включает в себя все значения. Это плохая практика по нескольким причинам. В основном, он никогда не гарантирует, что вы включите все данные; в частности, если строки удаляются, диапазон будет продолжать сокращаться.

Это гораздо более аккуратный и удобный для чтения, если вы работаете с таблицами.

Если вы вставляете таблицу в свои данные, вместо этого вы можете ссылаться на имена столбцов. Затем функции будут искать только количество строк, которые есть в таблице.

В ваших данных используйте Insert> Table. Затем, когда вы создаете формулы, если вы выберете все строки данных для столбца в таблице, excel автоматически введет имя столбца. Таким образом, если столбец AP имеет заголовок под названием «ID», формула для идентификации строки с 2-согласующего ID становится:

=SMALL(IF(InsightsDataExport.xlsx!Table1[Id]=A1,ROW(InsightsDataExport.xlsx!Table1[Id]),FALSE),2) 

Вы можете также использовать индекс столбца, который имеет данные, которые вы хотите, чтобы вернуться , Обратите внимание, что если вы выбираете только строки данных, исключая заголовок столбца, то строка 2 фактически является первой строкой поиска индекса, поэтому вам нужно вычесть 1 из номера строки. Если данные в колонке с заголовком «Сумма», вы будете использовать формулу, как:

=INDEX(InsightsDataExport.xlsx!Table1[Amount],rownumber - 1) 
+0

не могу тебя отблагодарить! Не только для решения, но и для того, чтобы найти время, чтобы на самом деле объяснить это: D –

+0

@JerremyLeedham - psst, это полезно для представителя ответчика, если вы «проголосуете» за отличный ответ, а также «принимаете» его ...; -) – ashleedawg

+0

@michael - Отличное объяснение, спасибо! 'INDIRECT - это мощная, но неустойчивая функция, которая всегда будет пересчитываться с каждым изменением в книге. Если вы используете его во всей колонке, это может значительно замедлить работу вашей книги. «... Я не понимал, что ... было бы хорошо, если бы Excel предоставил предупреждение при заполнении 10 000 ячеек формулами, которые ведут себя так путь! – ashleedawg

 Смежные вопросы

  • Нет связанных вопросов^_^