Как вы ссылаетесь на все ячейки над ячейкой внутри функции сопоставления?

#google-sheets #google-sheets-formula

#google-sheets #google-sheets-формула

Вопрос:

Вот что я пытаюсь сделать: у меня есть список курсов в таблицах Google, элементы которых будут добавляться ежедневно, вставляя их в конец текущего списка. Затем я хочу проверить, был ли курс уже добавлен в список ранее. Если это так, значение определенного столбца получит значение, которое имеет первое вхождение этого курса. Поэтому я буду использовать =INDEX(MATCH … и диапазон в части сопоставления будет представлять собой все ячейки в столбце над ячейкой, которая отмечена. Совпадающая часть формулы очевидна, если вы перетаскиваете или копируете формулу вниз:

 = MATCH(A2; A$1:A2; 0)
  

Однако я экспериментировал с другими способами достижения этой цели, а именно

 MATCH(A2; "A$1:A"amp;ROW()-1; 0)
  

(Я также пробовал это без кавычек) и

 MATCH(A2; (ADDRESS(1;1;2)amp;":"amp;ADDRESS(ROW()-1;1; 4)); 0) 
  

Оба они не работают. Я не могу понять, почему. (Кстати, точка с запятой в порядке, где я живу). Я получаю #N / A везде и сообщение о том, что значение не было найдено при оценке соответствия.

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

Ответ №1:

Вот подход ArrayFormula, поэтому вам нужна только одна формула

 =ArrayFormula(IFNA(IF(MATCH(A2:A,A2:A,0)<>ROW(A2:A)-ROW() 1,A2:A,"N/A")))
  

Ответ №2:

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

 =INDEX(A:A;MATCH(A2; OFFSET($A$1;0;0;ROW()-1); 0))
  

введите описание изображения здесь

Комментарии:

1. Большое вам спасибо. Дело не в том, что мне не нравится первый вариант. Но в другой электронной таблице я недавно использовал ROW() в косвенной функции, поэтому мне просто интересно, будет ли подход с помощью ROW() также работать и есть ли какие-либо существенные различия между различными решениями. Итак, мой вопрос был больше о расширении моего «набора инструментов» в Google Sheets. Но не кажется ли вам, что сообщение об ошибке «значение не найдено» вводит в заблуждение? Разве сообщение типа «второй параметр СООТВЕТСТВИЯ не является диапазоном» не было бы более точным?

2. @Christofvandeneynd Вы также можете использовать свои MATCH функции, если включите в INDIRECT функцию второй параметр. т.е. MATCH(A2; INDIRECT("A$1:A"amp;ROW()-1); 0) . Но в принципе, чем меньше функций вы используете, тем быстрее будет работать формула.