2014-10-28 380 views
0

我有一个列表,我想从中提取特定值。该表的日期为标题,第一列中的每个单元格表示不同的产品类型。使用下面显示的SUMPRODUCT公式代替HLOOKUP,我想获得特定产品可用的单位数量。强制SUMPRODUCT忽略文本值

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

但是,选择行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,10月 - 2014年产品1的值。)

下面的公式不会返回正确的结果,但它要求我所知道的范围的大小提前,因此没有良好:

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

回答

1

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

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

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

可以做类似的垂直,如果你不提前知道的时候你会怎样,许多产品都有什么 - 延长排1,000或100,000,或者你知道的将覆盖你最坏的情况(不能超过1,048,756)。

另一件事:您正在有效地使用SUMPRODUCT来模拟INDEXMATCH的行为。这些实际上是用于这种查找任务的功能。 (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))