我在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
答案 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级摘要之类的操作来搞乱选项以获得您想要的结果。这些选项最好通过实验找到,它们位于数据透视表设计选项卡中。需要手动刷新数据透视表,这样做的好处是,当您添加新项目时,他们将很容易处理。