2011-03-31 74 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を実行するコードを取得し、シートAの40
  • 次VLOOKUPのインデントを取得し、取得コード13575
  • 使用13575、SheetBにVLOOKUPシートAに22
  • 次VLOOKUPのインデントを取得し、VLOにコード35675
  • 使用35675を取得しますokup SheetBに、私はVBAを介してこれを達成することができます87

を返し、40 + 22 + 25の25

  • 和のインデントを得るが、これはCSE /アレイを使用してExcel関数内で可能である場合、私は思ったんだけど数式。

    編集:

    私は、彼らが完全にランダムです。..シート1のと同じ順序でのSheet2の値を持っていません。私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))} 
    

    MATCHの最初の引数は

    {19875;0;13575;35675;0} 
    

    に解決MATCHが

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

    に解決あなたがSheetBにゼロを持っていないことを確認する必要があります。 NOT ISNAはTRUEsとFALSEsにそれらを回すと

    {TRUE;FALSE;TRUE;TRUE;FALSE} 
    

    に解決し、最終SUMは、この

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

    アップデートのように見えます

    私は、単一のアレイを把握することはできません

    リストの順序が異なる場合OFFSETとTRANSPOSEでの私の試みは間違った答えを出したか、Excelをクラッシュさせた。あなたはヘルパーの列を使用して立つことができれば、あなたはあなたの最初のシートの3列目に

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

    をこの数式を入れた後、sheetC 場合はA1に

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

    @Kusleikaは、お時間をいただき、ありがとうございます。私はシート1のと同じ順序でSheet2の中にコードを持っているとき、あなたのソリューションが正常に動作します...しかし、それはここに....私の実際のデータには当てはまらない例を入力している間、私はそれを考えると、単にいくつかのランダムを入力しませんでした例。 Sheet2の順序がわからないときを計算する方法はありますか? – Ashok

    +0

    ええ、それは私が最後にやったことです。私はこのようにしたくなかったが、私はシータ自身と使用SUM(IF( 'データ-のSKU' $ Bに余分な列を挿入:!$ Bの= $ A9、 'データ-のSKU' $ G:$ Gは*」 Data-SKUs '!J:J、0)。ありがとうございました。 – Ashok

    0

    をコード列が(同じ順序)シータとSheetBの両方で同一であった場合は、簡単なSUMIF関数を行うだろう。同様に、INDENTデータがSheetA上にある場合は、ピボット・テーブルを使用して合計をすばやく計算することもできます。

    私はあなたのワークブックのデザインがこれを許さないと思っています。いずれの場合でも、簡単な解決策はありませんが、もう一度見ていきます。

    0

    それらを総括するために、この配列数式を使用することができますS1は、セルB1タイプに

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

    アレイは、シータ開始のコードのために どこ CODE1 =ダイナミックレンジに入っています行2 コード2 =ダイナミックレンジから行2

    0

    から必要なんTRANSPOSEコールを開始しないSheetB上のコードのために。

    は、配列数式を試してみてください

    = SUM(SUMIF(SheetB A2:A6、IF(シータA2:!A6 = "S1"、シータB2:!B6)、SheetB B2:!のB6))

    SheetB A2には、セルを想定していない:A6はFALSEと評価されます。また、Code列がすべて数値(おそらく疑わしい仮定)であれば、これは配列エントリを使わずに

    = 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 ピボット(COL:A及びC)