2016-01-12 3 views
1

Я пытаюсь создать формулу INDEX MATCH, которая ищет по столбцу, содержащему список jpegs, и возвращает все jpegs, которые начинаются с определенной строки и преобразуют их в гиперссылку.Измените формулу INDEX MATCH на формулу массива в EXCEL

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

Список jpegs находится в column F(F1:F1000) на Sheet 2 книги. Строка, которая используется в поиске, представляет собой SKU продукта в column A, sheet 1.

Вот рабочая версия, не массив, который я вошел в C2 на sheet 1 и наполненную вниз:

=IFERROR(
    HYPERLINK(
     CONCATENATE(sku_url,INDEX(Sheet2!$F$1:$F$1000, 
      MATCH(A2&"*",Sheet2!$F$1:$F$1000,0),1))), 
    "image not found") 

Это работает для column C, но как я могу заполнить эту формулу вправо так, что column D содержит второе изображение для каждого ску, E содержит третье и так далее. Я планирую иметь не более шести изображений для каждого SKU, поэтому я присвоил через H URL-адресам изображений продукта. Если SKU не имеет шести изображений, эти дополнительные столбцы должны быть пустыми.

ответ

1

Предполагая использование Excel 2010 или более поздней версии:

=IF(COLUMNS($A:A)>COUNTIF(Sheet2!$F$1:$F$1000,$A2&"*"),"",IFERROR(HYPERLINK(CONCATENATE(sku_url,INDEX(Sheet2!$F:$F,AGGREGATE(15,6,ROW(Sheet2!$F$1:$F$1000)/(LEFT(Sheet2!$F$1:$F$1000,LEN($A2))=$A2),COLUMNS($A:A))))),"imagenotfound"))

Как способ объяснения, начальное IF положение, то есть:

IF(COLUMNS($A:A)>COUNTIF(Sheet2!$F$1:$F$1000,$A2&"*"),""

достаточно прост:

COUNTIF(Sheet2!$F$1:$F$1000,$A2&"*")

просто дает подсчет общего количества строк, которые соответствуют, что условие, и так как:

COLUMNS($A:A)

, который равен 1, и становится, при копировании направо, последовательно:

COLUMNS($A:B)

(что равно 2)

COLUMNS($A:C)

(что равно 3)

и т.д., и т.д., это положение будет эквивалентно, в последовательных колонках:

IF(1>COUNTIF(Sheet2!$F$1:$F$1000,$A2&"*"),""

IF(2>COUNTIF(Sheet2!$F$1:$F$1000,$A2&"*"),""

IF(3>COUNTIF(Sheet2!$F$1:$F$1000,$A2&"*"),""

и т. Д. И т. Д., И поэтому пустое будет возвращено в ячейках, где это начальное предложение равно TRUE.

Единственное другое примечание - это то, что генерирует массив последовательных номеров строк, когда это условие выполняется. К сожалению, приведенное выше заявление COUNTIF по техническим причинам не применимо в нашей конструкции AGGREGATE.

К счастью, мы можем воспроизвести результаты этого заявления COUNTIF, используя другую настройку с LEFT.

Уменьшение диапазона в вопросе временно от F1: F1000 в F1: F10, чтобы помочь объяснить, эта часть:

LEFT(Sheet2!$F$1:$F$10,LEN($A2))=$A2

будет просто генерировать массив булевых TRUE/FALSE возвращается, как к результату этой инструкции для каждой из записей в F1: F10. Мы могли бы, например:

{FALSE;TRUE;FALSE;TRUE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE}

Когда мы тогда взаимность эквивалентных номеров строк для каждого из этих записей с этим массивом булевых, т.е. выполнить:

ROW(Sheet2!$F$1:$F$10)/(LEFT(Sheet2!$F$1:$F$10,LEN($A2))=$A2)

мы имеем:

{1;2;3;4;5;6;7;8;9;10}/{FALSE;TRUE;FALSE;TRUE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE}

и с тех пор, когда коэф rced любым подходящим математической операции (из которых деление является одним), булевой TRUE/FALSE значения принуждают к их числовые эквиваленты (TRUE = 1, FALSE = 0), выше становится:

{#DIV/0!;2;#DIV/0!;4;5;#DIV/0!;7;#DIV/0!;9;#DIV/0!}

С AGGREGATE , с первым параметром 15 дается указание найти наименьшее значение внутри массива, а второму параметру 6 указывается, что он игнорирует любые значения ошибок внутри этого массива, все, что осталось, - это установить четвертый параметр внутри этой функции, k, который определяет, должно ли быть возвращено первое наименьшее, второе наименьшее и т. Д. Значение.

Опять же, с помощью:

COLUMNS($A:A)

для этого параметра, который мы знаем, будет генерировать серию последовательных целых чисел (1, 2, 3 и т.д.), как скопированных направо, мы, таким образом, гарантируем, что мы вернем требуемый номер строки в каждую версию формулы.

Привет

+0

Вам нужна функция [IFERROR] (https://support.office.com/en-us/article/IFERROR-function-F59BACDC-78BD-4924-91DF-A869D0B08CD5) при проверке с помощью [COUNTIF] (https://support.office.com/en-US/article/COUNTIF-function-E0DE10C6-F885-4E71-ABB4-1F464816DF34)? – Jeeped

+1

Да. OP включал IFERROR специально для результата функции HYPERLINK. Результат построения INDEX по-прежнему может быть действительным, хотя это может привести к ошибке при передаче HYPERLINK. –

+0

Спасибо! Это прекрасно работает. Не могли бы вы объяснить, как это работает? Очень признателен. – user2600855

0

Используйте AGGREGATE¹ function с SMALL подфункции(). Отрегулируйте параметр k, чтобы увеличить его с помощью COLUMN при заполнении справа.

Стандарт (не массив) в формуле В2,

=IFERROR(
    HYPERLINK(
     CONCATENATE(sku_url, INDEX(Sheet2!$F:$F, 
      AGGREGATE(15, 6, ROW($1:$999)/(LEFT(Sheet2!$F$1:$F$999, LEN($A2))=$A2), COLUMN(A:A))))), 
    "image not found") 

Заливка вправо по мере необходимости.

aggregate_first_Second


¹ AGGREGATE function была введена с Excel 2010. Он не доступен в более ранних версиях.

+0

Спасибо за подробный ответ. Я рассмотрю функции AGGREGATE и SMALL. – user2600855

+0

Мне пришло в голову, что вы можете заполнить. Я добавил абсолютные ** $ ** блокировки в 'ROW ($ 1: $ 999)'. – Jeeped

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