簡體   English   中英

VLOOKUP返回Excel中所有匹配項的數組

[英]VLOOKUP return an array of all matches in Excel

我需要為VLOOKUP返回所有匹配項組成的數組,然后根據該數組中的內容返回一個值。 數據看起來像這樣

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) 

問題在於它將僅捕獲第一個匹配項並返回該值。

一種可能的解決方案是將它們全部加起來,因為我為in_stock使用0或1,所以

 =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 (不鍵入花括號,Excel會自動添加它們)來確認下面的數組公式。它適用於所有版本的Excel,並且比SUMPRODUCT慢一點。

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

因此,如果您具有Excel 2003或需要向后兼容,請使用SUMIF。 這是適用於所有版本的最快的選項。

我為COLOR和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

- “藍” - | --1

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

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

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

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

然后,您的vlookup與此相對,將1(第2行)返回到最外面的if。 不幸的是,我對公式的粗體部分的工作方式有點模糊,我只知道它將根據需要返回該范圍內的適當行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM