我每天都会导出一个 excel 文件(源文件),我需要将此导出文件中的特定列链接到另一个 excel 文件(报告)。但源文件中的列可能会有所不同,因此我无法使用经典链接=[FileName.xlsx]Sheet!C:C
。
我需要“找到”字段名称(第一行)并将其下方的数据引用到报告文件。有什么想法吗?
答案1
答案2
答案3
XLOOKUP
可以为您解决这个问题。
根据您在报告文件中操作数据的方式,您可能需要创建一个单独的选项卡(或该选项卡上的区域),首先按照您期望的顺序从所需的列中提取数据。您可以非常轻松地创建该“数据格式化/清理”选项卡 - 只需获取链接到原始数据的现有报告文件示例,然后按 move-tab 或 ctrl-x 将原始数据放入报告文件中。然后按照您想要的方式清理该数据(所有您想要的列都按您想要的顺序排列)。然后,您可以使用查找原始数据文件的 XLOOKUP 公式替换该实际数据。每天您都可以交换底层的原始数据文件,您的电子表格现在将自动以预定义的格式提取新数据,您的报告选项卡将链接到该格式。
要使用XLOOKUP
,您只需告诉它在一行中查找特定值,然后在单个列中找到它。然后 Excel 将允许您从同一列中的任何其他行中提取数据。请参阅下面的示例,了解XLOOKUP
此情况下最简单的使用方法。在这个简化的示例中,左侧的内容是原始数据,右侧的内容就像报告选项卡将处理的格式化数据。您只需将该公式放在左上角的单元格中,然后将其粘贴到右侧,即可从您想要定义的尽可能多的不同列中提取尽可能多的行。您需要输入的关键是列的名称,您需要填写该名称,我用蓝色表示。如果您不知道需要多少行,只需将其复制下来,比您认为需要的要长得多,这样您就不会错过任何东西。如果行数太大,处理时间太长,那么有办法确定原始数据中的行数,但这很少需要,所以我不会在这里讨论它。
该图显示:
在 中输入数据A4:D8
,其中第 4 行包含列标题。
输出在 中F4:G15
。感兴趣的两列,名称和城市,其标题手动输入到单元格F4
和 中G4
。XLOOKUP 公式输入到单元格 中F5
,即输出范围的第一个非标题单元格。单元格 中的公式F5
为:
=XLOOKUP(F$4,$A$4:$D$4,$A5:$D5)
请注意公式中使用的锚点(美元符号),因为它对于公式在整个输出范围内正常工作至关重要。
答案4
如果可能的话,只需在源文件中命名列引用,例如数据1(使用公式>定义名称),然后在目标表中使用:
=[FileName.xlsx]Sheet!data1
数据1当您在工作表中插入或删除新列时,它将自动移动或发生其他更改。
仅供参考,使用整列引用 ($C:$C) 通常是一个非常糟糕的主意,因为每次调用时 Excel 都需要将所有约 100 万个单元格加载到内存中。幸运的是,您可以定义数据1就像说的那样=$C$1:INDEX($C:$C,COUNTA($C:$C))
。这被称为动态命名范围并将返回对 C 中 USED RANGE 的引用(假设连续数据没有空格)。虽然它也使用整个列引用,但 Excel 巧妙地仅在 C 中的源数据发生变化时才重新计算此命名范围(这是一个非挥发性公式)。即使您多次调用命名范围,使用的范围也已经计算完毕,并且答案可供使用,且不会造成巨大的内存损失。