基于列名称而不是单元格名称的Excel查找数据

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

我想自动化一个过程,一个人拿三张电子表格,并把某些数据从他们转移到一张主表中。 三个电子表格按列顺序每个月都有所不同,所以不幸的是,我不能只编写vlookups来运行并获取数据。

我可能是错的,但它似乎像Vlookup匹配,索引匹配匹配等不会工作,因为他们仍然是引用单元格。 我基本上需要的东西,会根据列中的文本,而不是它的位置find一列,因为位置会改变,但文本将始终是相同的。

我有两个想法,但我不知道他们是否工作,不知道从哪里开始实施他们:

  1. 将三个电子表格转换成表格,并用表格语法引用标题(我还没有能够得到这个工作)
  2. 复杂的VBA,可以识别一切

任何人都可以帮助我指出正确的方向来完成这项任务? 非常感谢你的帮助。

编辑示例

我想要转储的主要模板是只有ID和空列:

ID# AltID# Deal 1 2 3 4 5 

然后另一个电子表格可能看起来像这样

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

我当然可以查找,但问题是下个月,第二个电子表格中的那些列将不会在同一个地方,在相同的顺序。 他们可能在colum DD或其他任何方面。 所以我需要一个公式,无论列的位置。 只是通过标题文本来匹配它们。 我希望澄清…

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

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

为Tim添加一个正在运行的Vlookup将返回DAY2列,如下所示:

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

几个笔记。 在硬编码的地方,你可以使用单元格引用。

这是一个想法:

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

ID#AltID# ,我们可以做匹配+索引:

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