我有一个电子表格,其中包含物料清单数据和制造零件的人工成本。
第一个工作表包含组件的主零件编号,每个工作表代表一个零件的数据,并按零件编号命名。
每个工作表上都有一行包含文本“Assembly”
我需要做的是合并每个部件的装配数据。
因此,第一个工作表称为“Main”,零件编号在 A 列中,因此我需要获取第一个零件编号,找到相应的工作表,提取包含文本“Assembly”的行,然后将一行输出到包含零件编号和装配数据的新工作表。
我将非常感谢 EXCEL 专家能够提供的任何帮助。
非常感谢,
史蒂夫
答案1
让我确认一下我理解了这个问题。工作簿中的第一个工作表(其名称为“Main”)在 A 列中包含零件编号:
后续工作表以零件编号作为其名称。这些工作表具有“各种布局”,但它们的 A 列中都有一个单元格包含单词“Assembly”:
并且您想要使用“零件”数据表中的“组件”行填充合并表。
在“合并”工作表的 A1 单元格中输入
=VLOOKUP("assembly", INDIRECT(Main!$A1&"!$A$1:$Z$9"), COLUMN()-COLUMN($A$1)+1, FALSE)
调整$Z$9
以对应最长的“assembly”行和“assembly”出现的最高行号。(为安全起见,请将其设置为任何工作表上的最大行数。)然后选择此单元格,将其拖出到适当的列数,然后将其向下拖到适当的行数。
解释:
Main!$A1
从第一个(主)表的 A1 单元格获取零件编号。A
通过 使 成为绝对值$
,因此,即使将其拖到右侧,它仍保持$A
。但1
是相对值(无$
),因此,当您将其向下拖到“合并”表的第 2 行时,它变为Main!$A2
。Main!$A1&"!$A$1:$Z$9"
将零件编号(即“零件”数据表的名称)与字符串!$A$1:$Z$9
(根据您的实际维度进行调整)连接起来,形成一个字符串,例如17!$A$1:$Z$9
。这是“零件”工作表地址范围的文本表示。如果您的任何零件编号包含空格(或感叹号),则需要将工作表名称放在引号中:"'"&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)
搜索地址范围(数据表)中的某一行(VLOOKUP
指五垂直搜索(英语:垂直搜索)包含assembly
第一列的数据,并返回指定列的值。
我曾经COLUMN($A$1)
这样做过,你可以在左侧插入一列,然后所有内容都会自动移动。例如,你可能想将以下内容放入=Main!$A1
合并表的第 1 列:
您会注意到,零件数据表上的空白单元格在合并表中显示为零。如果这是问题,请参阅在 Excel 中引用空白单元格时显示空白。如果您的主表包含与数据表不对应的零件编号,则合并表上会出现错误。您可以使用 处理这些问题IFERROR()
。