答案1
VLOOKUP()
通过查找其第一个参数来工作第一的第二个参数中指定范围的列。
您的第二个参数的第一列应该是ITEM
列,而不是表的第一列。
修正后的公式为BQ20
:
=IF(VLOOKUP(BQ5,Table11[DATE],1,FALSE),VLOOKUP('SUMMARY (NEW)'!B20,Table11[[ITEM]:[COST]],5,FALSE),"")
然而,这一公式仍然存在根本缺陷。惯于根据日期选择正确的项目,因为两者之间没有、也不可能有联系VLOOKUP()
。(尝试这样做会导致#N/A
错误。)
解决此问题的一种方法是使用数组和SUMPRODUCT()
函数:
=SUMPRODUCT(Table11[COST]*(Table11[DATE]=$BQ$5)*(Table11[ITEM]=$B20))
注意事项:
仅当需要查找的值是数字时,此简单公式才有效。
仅当每个日期的项目都是唯一的时它才能正常工作。
这两个限制都可以通过更复杂的公式版本来克服。
编辑:
正如OP所发现的,有一个与上述公式等效的公式,它使用SUMIFS()
而不是SUMPRODUCT()
:
=SUMIFS(Table11[COST],Table11[DATE],$BQ$5,Table11[ITEM],$B20)
同样的注意事项也适用于该公式。
还有一种替代解决方案做使用VLOOKUP()
,但它需要一个辅助列。
在每日条目表中添加一个辅助列:
在该列的所有单元格中输入以下公式Helper
:
=Table11[[#This Row],[DATE]]&Table11[[#This Row],[ITEM]]
在中输入以下公式BQ20
:
=VLOOKUP($BQ$5&$B20,Table11[[Helper]:[COST]],9,FALSE)
请注意,此公式可以正确地处理非数字值和非唯一项。