У меня есть электронная таблица с приличным объемом данных. Мне нужно вернуть часть этих данных в определенные ячейки. Данные, которые мне нужно вернуть, всегда находятся рядом с ячейкой с «Прикрепленными компонентами». Проблема в том, что есть несколько ячеек «Прикрепленные компоненты». Например, у меня есть две части, «Часть 1» и «Часть 2», и каждая из двух частей имеет раздел «Прикрепленные компоненты», расположенный относительно близко друг к другу. Ячейки, в которых они расположены, также не остаются прежними, иначе я бы просто ссылался на эти ячейки. Вот формула, которая у меня сейчас есть для возврата данных рядом с «Прикрепленными компонентами» для ОДНОЙ части:
=IFNA(INDEX(L15:R46,MATCH("Attached Components",M15:M46,0)+2,3),"0")
Подводя итог, мне нужна формула, которая возвращает данные из ячейки, ссылающейся на «Прикрепленные компоненты», которая затем ссылается на «Деталь №_».
Вот пример того, как может измениться положение «Прикрепленных компонентов» и где оно находится по отношению к «Детали № 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". Таким образом, он охватывает столбец Описание и начинает со строки, где у вас есть значения, на 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, чтобы выполнить любую операцию, которая вам нужна. Но на этот раз у вас есть конкретная ссылка на ячейку, с которой можно работать.
Например, поиск по номеру материала:
В этом последнем примере ячейки содержат
Э2:
=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
Ф7:
=VLOOKUP(E7,INDIRECT(CONCATENATE(ADDRESS(E2,1),":",ADDRESS(F2,3))),3,FALSE)
Таким образом, когда вы вводите номер материала в ячейку E7, его описание отображается в ячейке F7.
РЕДАКТИРОВАТЬ:
Следуя комментариям, решение можно найти следующим образом:
Используем более сложный пример:
Сопоставление строк — это просто каскад из 2 функций MATCH. Используем первую функцию MATCH для поиска номера детали, а затем вторую — для поиска интересующего раздела:
F3: строка части, которую вы ищете
F4: формула для поиска «Номер детали» в первом столбце.
=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 и столбец индекса:
Ф15:
=IF($F$9+$E15-1<=$F$10,INDIRECT(ADDRESS($F$9+$E15-1,1)),"")
Г15:
=IF($F$9+$E15-1<=$F$10,INDIRECT(ADDRESS($F$9+$E15-1,3)),"")
Эти формулы отобразят номер материала и описание для строки, идентифицированной индексом в столбце E. Оператор IF нужен для того, чтобы убедиться, что мы не отображаем строки, которые находятся ниже последних строк. В примере отображается только 5 строк, но вы можете просто скопировать эту формулу, перетащив вниз первую строку и добавив новые индексы, чтобы их было больше.