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

我在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正在validation第二个工作表上的项目编号,然后第二个vlookup正在validation团队名称,并从第二个工作表中提取小时。

问题是,当我将公式向下复制到列中时,小时值将重复相同的团队名称。 有没有人有什么build议?

 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 

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

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

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

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

一种方法是在Sheet2上创build另一个列,也许称为“Proj_plus_Team”(插入在列C位置),它连接“Proj_Number”和“Team Name”中的值。 然后你可以使用下面的公式search这个新的列:

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

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

选项1 – 使用公式

LOOKUP旨在检索单个值,这就是它所做的。 它遍历数据范围,检查值是大于还是小于参考值,并检索第一个转换点。 在你的情况下,它发现第一场比赛,并停下来,而不是你所追求的。

如果你想用公式做这个,你可能会发现SUMIF()和2007年新增加的SUMIFS()是一个更干净的路线。 另外,在Excel 2007表格中,您会发现最好的朋友,他们正确地整理这种事情的公式,并且关注扩展范围之类的事情。

上面的例子,使用表格,将被转换为:

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

其中Table1等同于Sheet1,而Table2则映射到Sheet2

当然,这不会提供你之后的原因是,这只是由团队总结,而你想申请2个filter,所以你将移动到SUMIFS(),并最终:

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

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

选项2 – 数据透视表

插入 – >数据透视表将创build您的数据透视表,适当地设置范围。

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

这会给你一个由多less个小时的团队项目细分。 然后,您可以通过执行诸如closures1级摘要等方式来弄清选项,从而准确获得您想要的结果。 这些选项最好通过实验find,他们住在数据透视表devise选项卡中。 catch是需要手动刷新数据透视表,好处是当你添加新的项目,他们会很容易的照顾。