C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.91582 の関連記事表示

<< 0 >>
■91582  Re[4]: EXCEL SUMIF関数をフィルターで動的に使用したい
□投稿者/ 魔界の仮面弁士 -(2019/07/09(Tue) 14:11:09)
    No91578 (鏡月 さん) に返信
    > =SUMPRODUCT((SUBTOTAL(3,INDIRECT("D"&ROW($D$5:$D$20))))*($D$5:$D$20="国語")*($E$5:$E$20))
    > =SUMPRODUCT((SUBTOTAL(3,INDIRECT("D"&ROW($D$5:$D$20))))*($D$5:$D$20="数学")*($E$5:$E$20))
    > =SUMPRODUCT((SUBTOTAL(3,INDIRECT("D"&ROW($D$5:$D$20))))*($D$5:$D$20="英語")*($E$5:$E$20))
    
    0: =SUMPRODUCT(
    1:   (
    2:     SUBTOTAL(
    3:       3,
    4:       INDIRECT("D"&ROW($D$5:$D$20))
    5:     )
    6:   )
    7:   *($D$5:$D$20="国語")
    8:   *($E$5:$E$20)
    9: )
    
    ----
    
    2:SUBTOTAL(3, 配列) は、データの個数を求める(COUNTA)に相当。
      ただしオートフィルターで非表示の場合はカウントされないという特性がある。
    
    4:ROW($D$5:$D$20) なら {5; 6; 7; 8; 9; 10; …} という配列になり、
      INDIRECT("D"&ROW($D$5:$D$20)) は「INDIRECT("D5:D20")」に相当するが、
      SUBTOTAL の中で ROW が使われているので、非表示列はカウント対象外となる。
    
     「SUBTOTAL(3, INDIRECT("D"&ROW($D$5:$D$20)))」という式は、
     フィルターがかかっていなければ {1; 1; 1; 1; 1; 1; …} となり、
     [4月以外] なフィルターなら {0; 0; 0; 0; 0; 1; …} となり、
     [数学のみ] なフィルターなら {0; 1; 0; 0; 1; 0; …} となる。
    
    7:($D$5:$D$20="国語") は {TRUE; FALSE; FALSE; TRUE; FALSE; FALSE; … } な配列。
    
    8:($E$5:$E$20) は {10; 20; 30; 40; 50; 60; …} な配列なので、
      7と8を乗じた結果は {10; 0; 0; 40; 0; 0; …} な配列になる。
      そこにさらに 4 を乗じれば、フィルター条件に沿ってない行の値は 0 になる。
    
    0:SUMPRODUCT は、各配列の要素の積をまず計算し、さらにその和を返す関数。
      今回は引数が 1 つだけなので積は求めず、配列内のすべての要素の合計値を求めることになる。
記事No.91573 のレス /過去ログ158より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -