我正在尝试在excel中完成一项奇怪的任务,并且不知道如何去做。我在工作中使用Excel 2007,我知道非常基本的vba。
我希望自动执行一个过程,在这个过程中,一个人需要三个电子表格并将其中的某些数据转储到一个主表格中。这三个电子表格按列顺序每个月都有所不同,所以很遗憾,我不能只编写vlookup来运行并获取数据。
我可能是错的,但似乎Vlookup匹配,索引匹配等等也不会起作用,因为它们仍在引用单元格。 我基本上需要能够找到基于列中文本而不是其位置的列的内容,因为位置会发生变化,但文本将始终相同。
我有两个想法,但我不知道它们是否有效,并且不知道从哪里开始实施它们:
任何人都可以帮我指出正确的方向来完成这项任务吗?非常感谢你的帮助。
编辑示例
我尝试将内容转移到的主要模板只是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
我当然可以vlookup,但问题是下个月,第二个电子表格中的那些列不会以相同的顺序出现在同一个地方。他们可以一直在colum DD或其他任何方式。因此,无论列位置如何,我都需要一个查找它们的公式。只是通过标题文本匹配它们。我希望澄清......
答案 0 :(得分:3)
如果将VLOOKUP
与MATCH
合并,则可以根据列名进行搜索,而不是索引。请记住,MATCH
函数返回匹配的数字索引。我们假设您的数据如下所示:
NAME DAY1 DAY2 DAY3
Bob 123 345 567
Tim 456 789 998
为Tim返回DAY2列的功能Vlookup看起来像:
=VLOOKUP("Tim", A2:D3,MATCH("DAY2",A1:D1,0),FALSE)
一些笔记。在我用文字硬编码的地方,你可以使用单元格引用。
答案 1 :(得分:0)
这是一个想法:
ID#
MATCH("ID#",Sheet2!$1:$1,0)
的索引
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))