[[20181027165814]] 『クロス集計?のやり方を教えて下さい』(にゅるん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『クロス集計?のやり方を教えて下さい』(にゅるん)

いつもお世話になっております。

【入力データ】(A1:E10)
ID Col1 Col2 Col3 Col4
1 5 2 4 5
1 3 3 4 8
1 5 1 5 6
2 3 3 5 8
2 5 2 2 5
2 6 1 6 6
2 5 2 4 8
3 8 2 2 5
3 3 3 6 4

【設定値】(G1:H1)
ID: 1 ← 例

【出力表】計算結果(G3:I5)
/ 1 2
1 13 6
2 13 19

【出力表】計算結果(実際に計算された内容)
/ 1 2
1 B2+B3+B4の結果 C2+C3+C4の結果
2 D2+D3+D4の結果 E2+E3+E4の結果

行方向IDは【設定値】に設定された「1」を基準に集計します。

列方向Col#は【出力表】の行列項目を元に左上から右下に向かって順番に集計結果が出るようにします。
つまり(H4視点で)「"Col"&($G4-1)*2+H$3」という感じで列名を求めています。
/ 1 2
1 Col1 Col2
2 Col3 Col4

SUMIFSで出来ないかなとH4に次の数式を作成してみましたが、#VALUE!になりました。(H4視点)
=SUMIFS($B$2:$E$10,$A$2:$A$10,$H$1,$B$1:$E$1,"Col"&($G4-1)*2+H$3)

一応下記の通りOFFSETを使った方法は出来たのですが、揮発性関数なので使わない方法が知りたく相談させていただきました。

=SUMIF($A$2:$A$10,$H$1,OFFSET($A$2:$A$10,0,MATCH("Col"&($G4-1)*2+H$3,$B$1:$E$1,0)))

以上、よろしくおねがいします。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 OFFSET関数を使わずにやるとどうなるか、ということなら

 =SUMIF($A$2:$A$10,$H$1,INDEX($B$2:$E$10,0,MATCH("Col"&($G4-1)*2+H$3,$B$1:$E$1,0)))

 例示の表なら ↓ でもできます。
 =SUMIF($A$2:$A$10,$H$1,INDEX($B$2:$E$10,0,($G4-1)*2+H$3))

 参考まで
(笑) 2018/10/27(土) 18:16

 まさか ↓ で解決する話ではないですよね?

 H4 =SUMIF($A$2:$A$10,$H$1,B2:B10)
 H5 =SUMIF($A$2:$A$10,$H$1,D2:D10)

 H4:H5を右にコピー

 以上、確認まで
(笑) 2018/10/27(土) 18:36

笑さま

INDEXはどうやら揮発性関数ではないらしいので、問題なく使えそうです!

実際には元データの列がAAA1,BBB1,CCC1,AAA2,BBB2,CCC2,DDD2,AAA3,BBB3,CCC3のように様々な項目が連なっているので、列名でMATCHさせております。

従って前者の式を使わせて頂きました。

ありがとうございました。

また最適化式のご提案も有難うございます。
(にゅるん) 2018/10/27(土) 18:41


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.