Можно ли ссылаться на две ячейки в Excel, чтобы найти третью ячейку?

2

У меня есть таблица с приличным количеством данных. Мне нужно вернуть некоторые из этих данных в определенные ячейки. Данные, которые мне нужно вернуть, всегда находятся рядом с ячейкой с «Прикрепленными компонентами». Проблема в том, что есть несколько ячеек «Присоединенные компоненты». Например, у меня есть две части, «Часть 1» и «Часть 2», и каждая из двух частей имеет раздел «Присоединенные компоненты» относительно близко друг к другу. Ячейки, в которых они расположены, тоже не остаются прежними, иначе я бы просто сослался на эти ячейки. Вот формула, которую я сейчас использую, чтобы вернуть данные рядом с «Прикрепленные компоненты» для ОДНОЙ части:

=IFNA(INDEX(L15:R46,MATCH("Attached Components",M15:M46,0)+2,3),"0")

Подводя итог, мне нужна формула, которая возвращает данные из ячейки, которая ссылается на «Присоединенные компоненты», которая затем ссылается на «Part #_».

Вот пример того, как позиция «Присоединенных компонентов» может измениться, и где она находится по отношению к «Части № 1».

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

Это довольно специфическая проблема, и я знаю, что мое объяснение не самое ясное. Я ценю помощь и не стесняйтесь спрашивать более конкретные детали!

bdkong
источник
Звучит как проблема, которая была бы намного проще, если сначала нормализовать / исправить данные. Являются ли данные статичными?
Лунатик
Да, но в некотором смысле нет. После переноса в электронную таблицу он не изменится. Но немного отличающиеся данные передаются каждый раз.
Bdkong
Если обновления происходят регулярно, то в подобных ситуациях я настроил преобразование данных в СУБД или с помощью VBA для реализации сложной логики, чтобы расположение значений в Excel стало тривиальным.
Лунатик
К сожалению, RDBMS не вариант, и я бы хотел использовать VBA только в качестве крайней меры из-за моего минимального опыта написания кода.
bdkong
1
Можете ли вы опубликовать скриншоты или примеры структуры данных?
Лунатик

Ответы:

1

Я пытался заставить это работать, предполагая, что:

  • «Присоединенные компоненты» всегда находятся в одном столбце.
  • Вы на самом деле пытаетесь найти описание для каждого «Материала №».

И я буду использовать этот лист для работы над:

пример

Это может быть не совсем то, что вам нужно, но я могу попытаться улучшить мой ответ с вашими замечаниями по этому поводу.

Повторно использовав вашу формулу, чтобы определить, где находится «Прикрепленные компоненты» в столбце, а затем добавьте 2, вы получите относительную строку, где начинается описание материала:

=MATCH("Attached Components",B1:B32,0)+2

Результат в примере «7».

После нужно указать последний ряд, где находятся описания. Для поиска в правильном диапазоне необходимо изменить формулу в зависимости от того, какая строка «Присоединенные компоненты» расположена. Комбинация MATCH, ADDRESS, CONCATENATE воссоздает диапазон.

MATCH дает вам относительную строку, ADDRESS преобразует номер строки и номер столбца в строку с именем ячейки (ADDRESS (1,1) = "$ A $ 1"), CONCATENATE объединит строки, чтобы создать диапазон.

CONCATENATE(ADDRESS(MATCH("Attached Components",B1:B32,0)+2,3),":",ADDRESS(MATCH("Attached Components",B1:B32,0)+20,3))

Это возвращает строку типа "$ C $ 7: $ C $ 25". Таким образом, он охватывает столбец Description и начинается со строки, где у вас есть значения на 18 строк ниже. Чтобы покрыть больше или меньше строк, просто измените «+20» в формуле на соответствующее значение.

Поиск последней строки - это всего лишь поиск первой пустой ячейки с IF и MIN.

{=MIN(
    IF(
        INDIRECT(CONCATENATE(ADDRESS(MATCH("Attached Components",B1:B32,0)+2,3),":",ADDRESS(MATCH("Attached Components",B1:B32,0)+20,3)))="",
        ROW(INDIRECT(CONCATENATE(ADDRESS(MATCH("Attached Components",B1:B32,0)+2,3),":",ADDRESS(MATCH("Attached Components",B1:B32,0)+20,3))))
     )
)-1}

Эта формула является формулой массива. Вот почему у него есть квадратные скобки (не вводите квадратные скобки, они появляются, когда вы вводите формулу, а затем нажимаете Ctrl + Shift + Enter)

INDIRECT преобразует строку, которую мы встроили в ссылку на ячейку. ROW дает номер строки в результате. MIN примет наименьшее значение в возвращаемом диапазоне. «-1» в конце должен иметь номер строки последнего описания, а не первую пустую строку.

В примере по этой формуле возвращается «9».

Теперь у нас есть номер строки первого и последнего описания от 7 до 9. Мы можем объединить эти числа так, как мы хотим, используя ADDRESS, CONCATENATE и INDIRECT для выполнения любой необходимой операции. Но на этот раз у вас есть конкретная ссылка на ячейку для работы.

Например поиск материала #:

VLOOKUP пример

В этом последнем примере ячейки содержат

E2:

=MATCH("Attached Components",B1:B32,0)+2

F2 (чтобы войти используя Ctrl + Shift + Enter):

=MIN(
    IF(
        INDIRECT(CONCATENATE(ADDRESS(MATCH("Attached Components",B1:B32,0)+2,3),":",ADDRESS(MATCH("Attached Components",B1:B32,0)+20,3)))="",
        ROW(INDIRECT(CONCATENATE(ADDRESS(MATCH("Attached Components",B1:B32,0)+2,3),":",ADDRESS(MATCH("Attached Components",B1:B32,0)+20,3))))
    )
)-1

F7:

=VLOOKUP(E7,INDIRECT(CONCATENATE(ADDRESS(E2,1),":",ADDRESS(F2,3))),3,FALSE)

Таким образом, когда вы вводите Material # в ячейку E7, он отображает описание в ячейке F7.

РЕДАКТИРОВАТЬ :

Следуя комментариям, решение может быть разработано следующим образом:

Используя более сложный пример:

Сложный пример

Сопоставление строк - это просто каскад функции 2 MATCH. Используя первую функцию MATCH, чтобы найти Part #, а затем вторую, чтобы найти интересующий раздел:

2 соответствия

F3: строка части, которую вы ищете

F4: формула для поиска «Part #» в первом столбце.

=MATCH($F$3,A1:A32,0)

F6: название раздела, который вы ищете

F7: формула для поиска раздела в части, определенной ранее. Сопоставление выполняется в диапазоне, который начинается в строке «Part #» (хранится в ячейке F4). Диапазон строится с использованием тех же формул, которые используют INDIRECT, CONCATENATE, ADDRESS. Затем относительная строка, возвращаемая MATCH, смещается на F4-1, чтобы получить абсолютный номер строки.

=MATCH($F$6,INDIRECT(CONCATENATE(ADDRESS(F4,2,1),":",ADDRESS(F4+20,2,1))),0)+F4-1

Теперь, чтобы идентифицировать первую и последнюю строки описания, мы можем использовать те же формулы, что и раньше:

первый и последний ряд для описаний

F9: добавление 2 к номеру строки «Присоединенные компоненты», чтобы получить первую строку описания.

=F7+2

F10: поиск первой пустой строки в диапазоне описания (начиная со строки, сохраненной в F9). Это формула массива, которая должна быть введена с помощьюCTRL+SHIFT+ENTER

=MIN(
    IF(
        INDIRECT(CONCATENATE(ADDRESS($F$9,3),":",ADDRESS($F$9+20,3)))="",
        ROW(INDIRECT(CONCATENATE(ADDRESS($F$9,3),":",ADDRESS($F$9+20,3))))
     )
)-1

Затем для отображения описания мы можем использовать INDIRECT и столбец индекса:

Матрица дисплея

F15:

=IF($F$9+$E15-1<=$F$10,INDIRECT(ADDRESS($F$9+$E15-1,1)),"")

G15:

=IF($F$9+$E15-1<=$F$10,INDIRECT(ADDRESS($F$9+$E15-1,3)),"")

В этих формулах будет отображаться № материала и описание строки, обозначенной индексом в столбце E. Оператор IF должен убедиться, что мы не отображаем строки, которые находятся ниже последних строк. В примере показано только 5 строк, но вы можете просто скопировать эту формулу, перетащив вниз первую строку и добавив новые индексы, чтобы получить больше.

Максим Бетт
источник
Фантастический ответ Максима, очень исчерпывающий. Есть ли способ изменить формулу, чтобы она ссылалась на ячейки «Часть № 1» и «Часть № 2», а не на номера материалов?
Bdkong
Всегда ли Part # находится в одном столбце? Каков ожидаемый результат формулы?
Максим Бетт
Часть № всегда находится в одном столбце. На выходе будет описание компонента, а также номер материала.
Bdkong
Итак, правильно ли говорить, что для конкретной детали № вы хотите получить все материалы и описания, которые находятся в разделе «Присоединенные компоненты»?
Максим Бетт
Да, но это не должно быть в один шаг.
Bdkong