3

私は最近、ExcelのCtrl + Shift + Enter配列数式について知り、現在もそれらを学習しています。私の問題に来て、

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の合計インデントが必要です。

  • SheetAのVlookup、コード19875を取得
  • SheetBでvlookupを実行し、40のインデントを取得します
  • シートAの次のVlookup、コード13575を取得
  • SheetBのVlookupに13575を使用し、22のインデントを取得します
  • シートAの次のVlookup、コード35675を取得
  • SheetBのVlookupに35675を使用し、25のインデントを取得します
  • 40 + 22 + 25の合計、87を返す

これはVBAを介して実現できますが、CSE/配列数式を使用するExcel関数内でこれが可能かどうか疑問に思っています。

編集:

Sheet1と同じ順序でSheet2に値がありません。それらは完全にランダムです。私のSheetBは、ランダムに次のようになります。

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

5 に答える 5

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は、それらをTRUEとFALSEに変換し、次のように解決します。

{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)

次に、この配列数式を使用してそれらを合計します

{=SUM(($A$2:$A$6=A2)*($C$2:$C$6))}
于 2011-03-31T18:41:32.110 に答える
0

以下を使用できます://Ola.S

表1Col:ABC製品コードインテンデント

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

表2Col:EFコードインテンデント

表3ピボット可能(Col:AおよびC)

于 2011-04-05T21:05:31.357 に答える
0

SheetAとSheetBの両方でCode列が同一(同じ順序)の場合、単純なSUMIF関数で実行できます。同様に、インデントデータがSheetAにある場合は、ピボットテーブルを使用して合計をすばやく計算することもできます。

あなたのワークブックのデザインはこれを許可しないと思います。その場合、簡単な解決策はありませんが、もう一度見てみましょう。

于 2011-03-31T14:44:08.177 に答える
0

sheetCでA1にS1がある場合、セルB1に次のように入力します。

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

入力された配列ここで、Code1=Row2から始まるSheetAのコードのダイナミックレンジCode2=Row2から始まるSheetBのコードのダイナミックレンジ

于 2011-04-04T02:38:42.983 に答える
0

TRANSPOSE電話は必要ありません。

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

=SUM(SUMIF(SheetB!A2:A6,IF(SheetA!A2:A6="S1",SheetA!B2:B6),SheetB!B2:B6))

その中にセルがないと仮定すると、SheetB!A2:A6FALSEと評価されます。コード列がすべて数値である場合(おそらく疑わしい仮定)、これは次を使用して配列エントリなしで実行できます。

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

にセルがないと仮定すると、にSheetB!A2:A6評価され#DIV/0!ます。

于 2011-04-04T19:41:13.460 に答える