##前提
同一スプレッドシート上に「LOGシート」と「SUMシート」があります。
現状、SUMシート上、E2以降に以下の数式を設定しています。
LOGシートからSUMシート上に複数条件のもと集計を行うのですが、実際にはLOGのデータ数が数千行となるため、ARRAYFORMULAを使用して数式をまとめたいと思っています。
if($C2="R",sumif('LOG'!$B2:$B,$A2,'LOG'!$E$2:$E)*$E2, if($C2="M",sumifs($E2:$E,$A$2:$A,$A2,$C2:$C,"R"),0))
##トラブル内容
サンプルでは簡略化のため必要最低限の列数にしていますが、本環境ではその他の数式が設定されている項目(列)も存在します。
その為、処理パフォーマンスの向上を考慮し、E2にARRAYFORMULAを使った以下の数式を入力してみましたが、C列がMの行が上手く集計されずに困っています。
ARRAYFORMULA(IF($C$2:$C="R",SUMIF(LOG!$A$2:$A,INDIRECT("$A"&ROW()&":$A"),LOG!$B$2:$B)*INDIRECT("$D"&ROW()&":$D"),IF($C2:$C="M",SUMIFS($E$2:$E,$A$2:$A,INDIRECT("$A"&ROW()&":$A"),$C$2:$C,"R"),0)))
[修正] SUMIFSの合計範囲の指定が間違っていましたので「$D$2:$D」から「$E$2:$E」へ修正しました。
ただし、この場合、循環参照エラーとなります。(本環境では合計範囲その他のミスはなく、エラーもございません)
集計内容は以下のようになります。
- SUMシート上のC列(role)が「R」の場合、LOGシートからA列(title)が同一の値(point)を取得し合計値を得たのち、各行、D列の値(rate)を掛ける。
- SUMシート上のC列(role)が「M」の場合、SUMシートからA列(title)が同一及びC列(role)が「R」の値(point)の合計値を取得する。
ARRAYFORMULAを使用しなくても、結果としてE2への数式入力のみで望む結果が得られるなら問題ございません。
エクセルやスプレッドシートの関数に詳しい方、お知恵をいただければと思います。
うまい解決方法がない場合には、GASにてカスタム関数を作成しようかと思っています。
よろしくお願いいたします。
[修正]補足漏れでした。
別途列追加や別シートへ計算用のデータ展開する等の解決策ではなく、あくまでもE2への数式入力のみとなります。
※スプレッドシートのタグが見当たらなかったため、EXCELとしていますが、環境はGoogle Spread Sheetです。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/19 10:44
2016/11/19 11:16