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)
下面的数组公式需要用Ctrl – Shift – Enter确认 (不要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行)到最外层。 不幸的是,我的公式粗体部分是如何工作的,我只知道它会根据需要返回该范围内的相应行。