VLOOKUP返回Excel中所有匹配的数组

我需要返回一个VLOOKUP的所有匹配数组,然后根据数组中的内容返回一个值。 数据看起来像这样

 product_style color in_stock
 11111绿色0
 11111蓝1
 22222绿1
 22222蓝0
 22222红0
 33333绿1
    

我需要一个查找find所有产品的基础上的风格,并找出它是否有任何颜色的库存,然后返回0或1.它很容易find第一个值

=IF(VLOOKUP(A2,A2:C7,3,0)=1,1,0) 

问题是,它将只抓取第一次出现并返回该值。

一个可能的解决scheme是将它们全部添加,因为我使用0或1作为in_stock,所以

 =IF(VLOOKUP TOTAL > 0,1,0) 

这将工作,如果我能得到VLOOKUP TOTAL

唯一的限制是结果数组必须全部在一个单元格中,我已经看到了这个答案,但是结果数组出现在多个单元格中

http://office.microsoft.com/en-us/excel-help/how-to-look-up-a-value-in-a-list-and-return-multiple-corresponding-values-HA001226038.aspx

如上述注释中所述,Sumifs将起作用,但在Excel 2003及更早版本中不可用。 这里有一些可能性

SUMIF适用于所有版本的Excel,但只能接受一个条件

 =SUMIF(A2:A7,"11111",C2:C7) 

SUMIFS接受多个条件,但只能在Excel 2007及更高版本中使用

 =SUMIFS(C2:C7,A2:A7,"11111") 

SUMPRODUCT适用于多种条件,适用于所有版本的Excel。 它会比上述任何一个公式都慢,但这只会在大型数据集中显着。

 =SUMPRODUCT((A2:A7="11111")*C2:C7) 

下面的数组公式需要用CtrlShiftEnter确认 (不要input花括号,Excel会自动添加它们)。它适用于所有版本的Excel,并且比SUMPRODUCT慢一点。

 {=SUM(IF(A2:A7="11111",C2:C7,0))} 

所以,如果您有Excel 2003或需要向后兼容性,请使用SUMIF。 这是所有版本中运行速度最快的选项。

我为COLOR和PROD_ID创build了命名范围,以使其更具可读性:

= IF(VLOOKUP(COLOR,IF(A1:A6 = PROD_ID, B1:C6 ,“”),2,0),1,0)

当你input这个公式时,按住CTRL + SHIFT + ENTER,这是一个数组公式,如果不这样input,它将不起作用。 我将从内部解释(我也可以,因为我不完全理解它的一部分,这是假设数据在单元格A1:C6(没有标题)。

作为一个数组函数,内部IF可以通过循环A1:A6 = PROD_ID,对于每一个匹配,它将一个元组添加到一个临时数组,所以在内部循环完成后,它返回数组{{“Green”,0; “蓝色”,1; “”, “”; “”, “”; “”, “”; “”, “”; } – 以更可读的格式,这是(请原谅我可怕的“更可读”的格式):

— — Col1中| –Col2

– “绿色” – | –0

– “蓝” – | –1

— “” ——- | – “”

— “” ——- | – “”

— “” ——- | – “”

— “” ——- | – “”

你的vlookup然后运行这个,如果返回1(第2行)到最外层。 不幸的是,我的公式粗体部分是如何工作的,我只知道它会根据需要返回该范围内的相应行。