[英]Excel - VLOOKUP to return each result in an array, not just the first
[英]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,那將起作用
唯一的限制是,結果數組必須全部都在一個單元格中,我已經看到了這個答案,但是結果數組顯示在多個單元格中
如上面的注釋中所述,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.