Предполагая использование 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 и т.д.), как скопированных направо, мы, таким образом, гарантируем, что мы вернем требуемый номер строки в каждую версию формулы.
Привет
Вам нужна функция [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
Да. OP включал IFERROR специально для результата функции HYPERLINK. Результат построения INDEX по-прежнему может быть действительным, хотя это может привести к ошибке при передаче HYPERLINK. –
Спасибо! Это прекрасно работает. Не могли бы вы объяснить, как это работает? Очень признателен. – user2600855