强制SUMPRODUCT忽略文本值

我有一个列表,我想从中提取一定的值。 该表的date为标题,第一列中的每个单元格表示不同的产品types。 使用SUMPRODUCT公式如下所示,而不是HLOOKUP ,我想获得特定产品可用的单位数量。

我的问题是,我不知道我需要多less列,因为我将每月导入每个产品的单位数量。 因此,我将需要使用整行而不是单元格名称作为范围,如下面的公式所示。

但是,select第1行:5包含数据中的行标题,并生成#VALUE! 错误。

如何强制SUMPRODUCT忽略A:A的文本值,然后求和剩下的单元格,同时将行保持为范围而不是单元格名称?

  ABCDE 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)) 

如果你把你的头文件和你的数据混合在一起,那么你将会使你的生活变得非常复杂。

你可以做的一件事是让你的范围足够大,不要担心溢出。 例如,将它们水平延伸到工作表中最后一个可能的列( XFD ):

 =SUMPRODUCT(--("Product 1"=$A$2:$A$4) *--(DATE(YEAR(TODAY()),MONTH(TODAY()),1)=B1:XFD1) *(B2:XFD4)) 

如果事先不知道有多less产品,可以垂直做类似的事情 – 扩展到1,000或100,000行,或者你知道覆盖最坏的情况(不能超过1,048,756)。

另一件事:你有效地使用SUMPRODUCT来模拟INDEXMATCH的行为。 这些实际上是用于这种查找任务的function。 ( 忘记VLOOKUPHLOOKUP 。 )

 =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))