1

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

Первая рабочая таблица содержит номера основных деталей для сборок. Каждая рабочая таблица представляет данные для одной детали и именуется номером детали.

На каждом листе есть строка с текстом "Сборка"

Что мне нужно сделать, это консолидировать данные сборки для каждой части.

Итак, первая рабочая таблица называется Main, а номера деталей находятся в столбце A, поэтому мне нужно взять первый номер детали, найти соответствующую рабочую таблицу, извлечь строку, содержащую текст "Assembly", и вывести строку на новую рабочую таблицу, содержащую номер детали и данные сборки.

Я был бы признателен за любую помощь, которую, возможно, смогут предложить вам эксперты EXCEL.

Большое спасибо,

Стив

1 ответ1

1

Позвольте мне убедиться, что я понимаю проблему.  Первый лист рабочей книги (имя которого «Основной») содержит номера деталей в столбце A:

Последующие листы имеют номера деталей в качестве своих названий.  Эти листы имеют «различные макеты», но все они имеют ячейку в столбце А, которая содержит слово «Сборка»:

И вы хотите заполнить консолидированный лист строками «сборки» из листов данных «детали».


В своем «сводном» листе, ячейка A1, введите

=VLOOKUP("assembly", INDIRECT(Main!$A1&"!$A$1:$Z$9"), COLUMN()-COLUMN($A$1)+1, FALSE)

Отрегулируйте $Z$9 чтобы соответствовать самой длинной строке «сборка» и наибольшему номеру строки, где появляется «сборка».  (Чтобы быть в безопасности, сделайте это наибольшее количество строк на любом листе.)  Затем выберите эту ячейку, перетащите ее на соответствующее количество столбцов, а затем перетащите ее вниз на соответствующее количество строк.

Объяснение:

  • Main!$A1 получает номер детали из ячейки A1 на первом (основном) листе.  A становится абсолютным с помощью $ , поэтому даже если вы перетащите его вправо, оно останется $A Но 1 является относительным (без $), поэтому, если вы перетащите его вниз на строку 2 на "Консолидированном" листе, он станет Main!$A2 .
  • Main!$A1&"!$A$1:$Z$9" объединяет номер детали, который является именем таблицы данных деталей, со строкой !$A$1:$Z$9 (с поправкой на фактическую размерность), образуя строку, например, 17!$A$1:$Z$9 .  Это текстовое представление диапазона адресов для листа "part".  Если какой-либо из ваших номеров деталей содержит пробелы (или восклицательные знаки), вам нужно поместить название листа в кавычки: "'"&Main!$A1&"'!$A$1:$Z$9" .  Если любой из ваших номеров содержит одинарные кавычки (апострофы), у вас будут проблемы.
  • INDIRECT(Main!$A1&"!$A$1:$Z$9") принимает текстовое представление диапазона адресов и превращает его в фактический диапазон адресов.
  • COLUMN() - номер столбца текущей ячейки.  COLUMN($A$1) равна 1.  Таким образом, формула COLUMN()-COLUMN($A$1)+1 работает просто на COLUMN() ; т.е. текущий номер столбца.
  • VLOOKUP("assembly", address range, column number, FALSE) значение FALSE) ищет диапазон адресов (паспорт) для ряда VLOOKUP относится к об поиску ertical) , который содержит assembly в первом столбце, и возвращает значение из указанного столбца ,

Я использовал COLUMN($A$1) чтобы вы могли вставить столбец слева и сделать все автоматически. Например, вы можете поставить =Main!$A1 в столбец 1 сводного листа:

Вы заметите, что пустые ячейки на листе данных деталей отображаются на консолидированном листе как нули.  Если это проблема, см. « Пустое отображение» при ссылке на пустую ячейку в Excel.  Если ваш основной лист содержит номера деталей, которые не соответствуют спецификациям, вы получите ошибки в своем сводном листе.  Вы можете справиться с ними с помощью IFERROR() .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .