2014-05-18 177 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。不幸的是,我對公式粗體部分的工作方式有些模糊,我只知道它會根據需要返回該範圍內的相應行。