我有一个列表,我想从中提取某个值。该表将日期作为标题,第一列中的每个单元格表示不同的产品类型。使用如下所示的SUMPRODUCT
公式代替HLOOKUP
,我希望获得特定产品的可用单位数量。
我的问题是我事先并不知道我需要多少列,因为我将每月导入每个产品的单位数量。因此,我需要使用整行而不是单元格名称作为范围,如下面的公式所示。
但是,选择行1:5会在数据中包含行标题,并导致#VALUE!
错误。
如何强制SUMPRODUCT
忽略A:A的文本值并将剩余单元格相加,同时将行保持为范围而不是单元格名称?
A B C D E
1 Product Name Jul-2014 Aug-2014 Sep-2014 Oct-2014
2 Product 1 1,000 1,500 3,000 750
3 Product 2 1,500 1,000 500 1,500
4 Product 3 250 1,500 1,000 800
公式:
=SUMPRODUCT(--("Product 1"=$A$2:$A$4)*--(DATE(YEAR(TODAY()),MONTH(TODAY()),1)=1:1)*(2:4))
返回#VALUE!
。 (应返回750,即2014年10月产品1的值。)
下面的公式确实会返回正确的结果,但它要求我事先知道范围的大小,因此没有好处:
=SUMPRODUCT(--("Product 1"=$A$2:$A$4)*--(DATE(YEAR(TODAY()),MONTH(TODAY()),1)=B1:E1)*(B2:E4))
答案 0 :(得分:1)
如果您将标题与数据混合在一起,那么您将使您的生活变得非常复杂。
你可以做的一件事就是让你的范围足够大,不要担心它们会溢出。例如,将它们水平延伸到工作表中的最后一列(XFD
):
=SUMPRODUCT(--("Product 1"=$A$2:$A$4)
*--(DATE(YEAR(TODAY()),MONTH(TODAY()),1)=B1:XFD1)
*(B2:XFD4))
如果你事先不知道你将拥有多少产品,可以做垂直相似的事情 - 扩展到1000行或100,000行,或者你知道的事情会覆盖你最糟糕的情况(不能更高)超过1,048,756)。
另一件事:您有效地使用SUMPRODUCT
来模仿INDEX
和MATCH
的行为。这些实际上是用于此类查找任务的函数。 (Forget about VLOOKUP
and HLOOKUP
.)
=INDEX($B$2:$E$4,
MATCH("Product 1",$A$2:$A$4,0),
MATCH(DATE(YEAR(TODAY()),MONTH(TODAY()),1),$B$1:$E$1,0))