Excel 根据列名而不是单元格名查找数据

Excel Lookup Data Based on Column Name not Cell Name

我正试图在 excel 中完成一项奇怪的任务,但不知道如何去做。我在工作中使用 Excel 2007,我知道非常基本的 vba。

我想自动化一个过程,在这个过程中,一个人需要三个 spreadsheets 并将它们的某些数据转储到一个 master sheet。三个 spreadsheet 的列顺序每个月都不同,所以不幸的是我不能只将 vlookups 编程为 运行 并获取数据。

我可能是错的,但 Vlookup Match、Index Match Match 等似乎也不起作用,因为它们仍在引用单元格。 我基本上需要能够根据列中的文本而不是其位置找到列的东西,因为位置会改变,但文本将始终相同。

我有两个想法,但我不知道它们是否有效,也不知道从哪里开始实施它们:

  1. 将三个传播sheets 转换为tables 并使用table 语法引用标题(我无法让它工作)
  2. 复杂 VBA 识别所有内容

谁能帮我指出正确的方向来完成这项任务?非常感谢您的帮助。

编辑示例

我试图将内容转储到其中的主模板只有 ID# 和空列:

ID#          AltID#          Deal
1
2
3
4
5

然后另一个传播 sheet 可能看起来像这样

ID#          AltID#          Deal
1            10101           AAAA
2            20202           BBBB
3            30303           CCCC
4            40404           DDDD
5            50505           EEEE

我当然可以进行 vlookup,但问题是下个月,第二个传播中的那些列sheet 将不会以相同的顺序出现在同一个地方。他们可能一直在 colum DD 或其他什么地方。所以我需要一个无论列位置如何都可以查找它们的公式。只需通过标题文本匹配它们。我希望澄清...

如果将 VLOOKUPMATCH 结合使用,您可以根据列名而不是索引进行搜索。请记住,MATCH 函数 return 是匹配项的数字索引。假设您的数据如下所示:

NAME    DAY1    DAY2    DAY3
Bob     123     345     567
Tim     456     789     998

returnTim 的 DAY2 列的有效 Vlookup 看起来像:

=VLOOKUP("Tim", A2:D3,MATCH("DAY2",A1:D1,0),FALSE)

一些注意事项。在我用文字硬编码的地方,您可以使用单元格引用。

这是一个想法:

  • 获取 Sheet2 ID# 列的索引 MATCH("ID#",Sheet2!:,0)
  • 转换为字符:CHAR(MATCH("ID#",Sheet2!:,0)+64)
  • 获取列范围: INDIRECT( CONCATENATE("Sheet2!", CHAR(MATCH("ID#",Sheet2!:,0)+64),":", CHAR(MATCH("ID#",Sheet2!:,0)+64)))
  • 与第 AltID# 列类似:
    INDIRECT( CONCATENATE("Sheet2!", CHAR(MATCH("AltID#",Sheet2!:,0)+64),":", CHAR(MATCH("AltID#",Sheet2!:,0)+64)))

范围为ID#AltID#,我们可以进行匹配+索引:

=INDEX(
   INDIRECT(
     CONCATENATE("Sheet2!",
                 CHAR(MATCH("AltID#",Sheet2!:,0)+64),":",
                 CHAR(MATCH("AltID#",Sheet2!:,0)+64))),
   MATCH(A2,INDIRECT(
              CONCATENATE("Sheet2!",
                          CHAR(MATCH("ID#",Sheet2!:,0)+64),":",
                          CHAR(MATCH("ID#",Sheet2!:,0)+64))),0))