Excel:多个Vlookups以引入1个数据元素

时间:2011-02-03 16:53:51

标签: excel excel-2007

我在Excel中有2张单独的表格。在表1中,我在C列(小时)中使用以下if语句从表2中拉出D(小时)中的数字。

=IF(ISERROR(VLOOKUP(A2,Sheet2!A:D,1,FALSE)),"N/A",VLOOKUP(B2,Sheet2!A:D,4,FALSE))

第一个vlookup验证第二张表上的项目编号,然后第二个vlookup验证团队名称并从第二张表中提取小时数。

问题在于,当我将公式复制到列中时,小时值会重复相同的团队名称。有没有人有任何建议?

Sheet 1
columns
Proj_Number     Team Name      Hours      
123456          R&D             26
123456          Dev             50
123456          QA              10
777777          R&D             26

Sheet 2
Proj_Number     Team Name       Organization         Hours      
777777          R&D               AUTO                26
123456          DEV               AUTO                50
123456          QA                AUTO                10
123456          R&D               AUTO                20

2 个答案:

答案 0 :(得分:2)

你要求VLOOKUP做一些它不能做的事情。 IF公式中的第二个VLOOKUP:

VLOOKUP(B2,Sheet2!A:D,4,FALSE)

被要求返回它在表2中找到的第一个“团队名称”实例;它正在做什么。

如果您想根据“团队名称”“Proj_Number”返回小时数,则需要稍微改变一下。

一种方法是在Sheet2上创建另一个列,可能称为“Proj_plus_Team”(插入C列位置),用于连接“Proj_Number”和“Team Name”中的值。然后,您可以使用以下公式搜索此新列:

VLOOKUP(A2 & B2,Sheet2!C:E,3,FALSE)

此外,执行此操作时,请确保Sheet2上的数据按字母顺序排列在“Proj_plus_Team”列中的值上。 VLOOKUP要求按字母顺序对搜索列进行排序,否则可能会返回不准确的结果。

答案 1 :(得分:1)

选项1 - 使用公式

LOOKUP旨在检索单个值,这正是它正在做的事情。它循环遍历数据范围,检查该值是否大于/小于参考值,并检索第一个转换点。在你的情况下,它会找到第一个匹配并停止,而不是你所追求的。

如果你想使用公式来做这件事,你可能会发现SUMIF()和新增加的2007 SUMIFS()是一个更清晰的路线。另外,在Excel 2007中,Excel 2007表格是你最好的新朋友,他们整理了这类事情的公式,并照看扩展范围等事项。

上面的例子,使用表格,将被翻译为:

=SUMIF(Table2[Team],Table1[[#This Row],[Team]],Table2[Hours])

其中Table1相当于Sheet1,而Table2映射到Sheet2

当然,这不能提供你所追求的是因为这只是由团队总结,而你想要应用2个过滤器,所以你要转移到SUMIFS()并最终得到:< / p>

=SUMIFS(Table2[Hours],Table2[Proj_Number],Table1[[#This Row],[Proj_Number]],Table2[Team],Table1[[#This Row],[Team]])

好处是您的公式将始终自动重新计算,缺点是您必须手动更新Table1。

选项2 - 数据透视表

插入 - &gt;数据透视表将创建数据透视表,并根据需要设置范围。

然后将项目编号拖动到行标签中,在行标签中拖动其下方的团队名称,并将小时拖动到值框中。

这会让你按团队项目细分多少小时。然后,您可以通过执行诸如关闭1级摘要之类的操作来搞乱选项以获得您想要的结果。这些选项最好通过实验找到,它们位于数据透视表设计选项卡中。需要手动刷新数据透视表,这样做的好处是,当您添加新项目时,他们将很容易处理。