Excel:从另一个文件的命名表中获取整行

Excel:从另一个文件的命名表中获取整行

假设我有这个表(名为表tbl_source:)source.xlsx

在此处输入图片描述

如图所示,该表的大小可能会水平增长。我的目标是将第 2 行的所有条目放入另一个 excel 文件中sink.xlsx。任何时候有人在其中创建新列source.xlsx都应反映在中sink.xlsx

没有 VBA 可以实现这个吗?

答案1

为了获取特定的行,即您有该行开头的值或行号(在数据中,因此它是数据的第 6 行,或者是第 22 行的数据,无论是表的哪一行),您可以轻松获取该行。

例如,VLOOKUP()可以这样做。您需要第一列中的值,这将是它所依赖的查找值,然后执行以下操作:

=VLOOKUP($C$14,$A$1:$G$5,SEQUENCE(1,COLUMNS($A$1:$G$5)),FALSE)

(其中您的表格为 A1:G5)。函数COLUMNS()中的短语SEQUENCE()可确保自动包含添加的列。(如果您想使其更加牢固,您可以向范围值添加一两列(使参数COLUMNS()“更宽”...例如 A1:J5...这样插入列就能发挥其魔力,尽管仅“使用”列会使其变得紧张),认为任何添加列的人都会在范围内这样做,或者使用下一列,而不是跳过八列并使用一列,只需从参数中减去额外的数量即可COLUMNS()。)如果数据有标题,您可以在函数中使用一系列标题和一些额外的列(比如说 30 个额外的列)COUNTA()来计数使用的列,为任何已知没有标题的列添加一些值。

如果将行号转换为表中的相对行,则可以使用以下公式概念来使用行号(因此示例范围,直接使用它,但假设表从第 10 行开始,则减去 9):

=OFFSET(A1,C17-1,0,1,COLUMNS(A1:G5))

(其中 C17 具有绝对行值)。

这两种基本方法就足够了。(您甚至可以使用FILTER()“匹配”参数集,该<>""参数会切断宽范围内的所有额外列(宽范围允许在其边缘扩展)。但这也会删除恰好为空的所需单元格,因此……您必须将其与数据相匹配,这通常不仅很棘手,而且很容易被破坏。)

毫无疑问,如果您知道行号,Ron Rosenfeld 的公式会非常干净地运行,但如果您需要查找一个值来触发结果,则不然。

答案2

我想建议一种最简单的方法来更新另一个表,在两个相同的表之间进行。

在此处输入图片描述

怎么运行的:

  • 在 WB 中创建名为 SOURCE.xlsm 的表。

  • WB 中的另一个表名为 SINK.xlsm。

  • 在 WB SINK.xlsm 的单元格 F41 中输入此公式并填充表格。

    =IF([SOURCE.xlsm]Sheet1!ISBLANK(F30),"",F30)

注意:

  • 一旦您在 SOURCE 工作簿中的表 1 中输入数据,表 2 中的公式就会更新单元格。

  • 由于 Excel 表是动态的,因此会自动调整新的列和行。

  • 此方法也适用于两个动态命名范围之间。

  • 您可以根据需要调整公式中的单元格引用。

相关内容