2011-03-31 389 views
3

我最近才知道關於Ctrl + Shift +輸入Excel的數組公式,並且目前仍在學習它們。回到我的問題,Excel - 遞歸VLookup

SheetA: 
Product  Code 
S1    19875 
S2    19834 
S1    13575 
S1    35675 
S2    47875 



SheetB: 
Code   Indent 
19875   40 
19834   15 
13575   22 
35675   25 
47875   20 

我需要做給定產品名稱的所有縮進的總和。

例如:我需要S1的總縮進,

  • VLOOKUP的希達,得到的代碼19875
  • 上SheetB執行VLOOKUP,獲取40
  • 下一頁VLOOKUP對錶A中的縮進,獲取碼13575
  • 使用13575至VLOOKUP上SheetB,在手冊A獲取22
  • 接着VLOOKUP的縮進,獲取的代碼35675
  • 使用35675至VLO okup上SheetB,得到25縮進
  • 總和的40 + 22 + 25,返回87

我可以通過VBA實現這一點,但我不知道這是否使用CSE /陣列Excel函數內是可能的公式。

編輯:

我沒有在Sheet2中值在Sheet1的順序相同。他們是完全隨機的。我SheetB將是隨機的東西像下面:

SheetB: 
Code   Indent 
19834   40 
19875   15 
47875   22 
13575   25 
35675   20 

回答

7
{=SUM(NOT(ISNA(MATCH((($A$2:$A$6="S1")*(B2:B6)),Sheet2!$A$2:$A$6,FALSE)))*(Sheet2!$B$2:$B$6))} 

本場比賽的第一個參數解析爲

{19875;0;13575;35675;0} 

比賽解析

{1;#N/A;3;4;#N/A} 

你必須確保你沒有零的SheetB。未ISNA原來那些爲TRUEs和FALSEs並且解決

{TRUE;FALSE;TRUE;TRUE;FALSE} 

,最終SUM看起來像這樣

=SUM({TRUE;FALSE;TRUE;TRUE;FALSE}*{40;15;22;25;20}) 

更新

我想不出一個單一的陣列解決方案時列表是不同的順序。我對OFFSET和TRANSPOSE的嘗試或者給出了錯誤的答案或者Excel崩潰。如果你能忍受使用輔助柱,你可以把這個公式在第三列的第一張

=VLOOKUP(B2,Sheet2!$A$2:$B$6,2,FALSE) 

,然後使用這個數組公式來概括起來

{=SUM(($A$2:$A$6=A2)*($C$2:$C$6))} 
+0

@Kusleika,謝謝你的時間。你的解決方案工作得很好,當我在Sheet2中的代碼以Sheet1的相同順序時......但這不是我的實際數據的情況....在輸入示例時,我沒有考慮這個,只是鍵入一些隨機例。有什麼方法可以計算何時不確定Sheet2的順序? – Ashok 2011-04-01 05:43:42

+0

是的,這就是我最後做的。我不想用這種方式,但是我將額外的列插入SheetA本身並使用SUM(IF('Data-SKUs'!$ B:$ B = $ A9,'Data-SKUs'!$ G:$ G *' Data-SKUs'!J:J,0)。再次感謝你的時間D. – Ashok 2011-04-02 04:22:34

0

如果代碼列是相同的兩個希達和SheetB(順序相同),一個簡單的SUMIF函數會做。同樣,如果INDENT數據在SheetA上,也可以使用數據透視錶快速計算總和。

我猜你的工作簿的設計不會允許這個。在這種情況下,我沒有任何簡單的解決方案,但我會再看一次。

0

在sheetC 如果A1具有S1然後在細胞B1型

=SUM((IF((Product=A1),Code1)=TRANSPOSE(Code2))*TRANSPOSE(Amt)) 

陣列輸入 凡上希達代碼 代碼1 =動態範圍開始從行2 代碼2 =從第2行開始的SheetB上的代碼的動態範圍

0

不需要TRANSPOSE調用。

嘗試陣列式

= SUM(SUMIF(SheetB!A2:A6,IF(希達!A2:A6 = 「S1」,希達B2:!B6),SheetB B2:!B6))

假定SheetB中沒有單元!A2:A6的計算結果爲FALSE。如果代碼列都是數字的(可能是一個值得懷疑的假設),則可以在沒有數組輸入的情況下使用

= SUMPRODUCT(SUMIF(SheetB!A2:A6,SheetA!B2:B6 /(SheetA!A2:A6 =「S1」),SheetB!B2:B6))

假設SheetB中沒有單元!A2:A6的計算結果爲#DIV/0 !.

0

你可以使用以下: //Ola.S

表1 山口:ABC 產品編號Intendent

山口C:= SUMIF($ E $ 4:$ E $ 8; B4; $ F $ 4:$ F $ 8)

表2 山口:EF 代碼Intendent

表3 數據透視表(西:A和C)