2014-05-18 136 views
1

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

 
product_style  color   in_stock 
11111    Green   0 
11111    Blue   1 
22222    Green   1 
22222    Blue   0 
22222    Red   0 
33333    Green   1 
我需要一个VLOOKUP基础上找到风格的所有产品,并找出是否有以股票的任何颜色则返回0或1。它很容易找到的第一个值

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

问题是它只会抓住第一次出现并返回该值。

一个可能的解决方案是将它们全部加起来,因为我使用的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

+2

正如您在那篇文章中看到的那样,VLOOKUP不会返回多个匹配的信息,只会返回第一个匹配(或不匹配)。如果总结'in_stock'的值可以使用'= SUMIFS(C2:C7,A2:A7,11111)',它应该在示例数据中返回'1'。 –

+2

这听起来像是数据透视表的一个很好的用法。 –

+0

我不确定你想要做什么。你是否试图找到特定风格的库存数量? – ApplePie

回答

1

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) 

下面的数组公式需要与按Ctrl得到证实 - - 输入(不要输入大括号,Excel将自动添加它们。)它可以在所有版本的Excel比SUMPRODUCT慢了一点。

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

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

0

我创建的名为范围的颜色和PROD_ID使这个更易读:

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

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

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

--- --- Col1中| --Col2

- “绿色” - | --0

- “蓝” - | l-

--- “” ------- | - “”

--- “” ----- - | - “”

---“”------- | - “”

---“”------- | - “”

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