- ベストアンサー
エクセルで条件付きの合計を高速に計算する方法
- エクセルで条件付きの合計を求める際に、時間を短縮する方法を教えてください。
- A列から最大99、B列から最大ZZ、C列から最大999までのデータで、D列の合計を求めたい場合、
- SUMPRODUCT関数を使用して○、×、△の合計をそれぞれ求めることができます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
一般的にSUMPRODUCT関数のような配列を扱う式やCOUNTIF関数などを多数のセルに入力した場合は、再計算に時間がかかります。 そもそも、すべての組み合わせの合計を表示する必要があるのでしょうか? 目的によりますが、それらのデータから何か計算をしたいような場合は、複雑な数式になるという欠点がありますが、補助列を使うのではなく、できれば1つの式にしたほうがメモリーの消費も少なくPCに負荷をかけません(特にエクセル2007で数万行に数式を入力するような場合)。 ちなみにエクセル2007をご使用ならSUMIFS関数を使えば、かなり改善されるのではないかと思われます。 ある程度の改善を期待したいなら、数式に使用するデータ範囲に名前を付けて、すべての数式を(セル参照ではなく)その名前で入力するようにしてみてください。 また、一覧を表示したいのであれば、ページフィールドにA列、行フィールドにB列、C列、データフィールドにD列、列フィールドにE列を配置するのが見やすい一覧リストが作成できます。
その他の回答 (3)
- KURUMITO
- ベストアンサー率42% (1835/4283)
最も計算速度の速い方法はできるだけ単純な計算で行うことです。高度な関数を使った場合にはどうしても遅くなります。そのためには多少の作業列を設けて対応することでしょう。 例えば次のようにします。 F1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(AND(A1<>"",B1<>"",C1>0),A1&B1&C1&E1,"") そこで結果の表示ですが例えばH1セルにA列データ、I1セルにB列データ、J1セルにC列データ、K1セルに○、L1セルに×、M1セルに△とそれぞれ入力します。 2行目以降には検索したいデータの組み合わせをH列からJ列に入力します。 K2セルには次の式を入力してM2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(COUNTA($H2:$J2)=3,SUMIF($F:$F,$H2&$I2&$J2&K$1,$D:$D),"") 最初の式の入力には多少時間がかかりますが、計算速度はかなり速くなると思いますね。
お礼
回答ありがとうございます。 かなりの改善が見られました。
- mshr1962
- ベストアンサー率39% (7417/18945)
EXCEL2007ならCOUNTIFS関数の使用をお勧めします。 01でAで001から999のうち○の合計 =COUNTIFS(A:A,"01",B:B,"A",C:C,">=001",C:C,"<=999",D:D,"○") 01でBで001から999のうち○の合計 =COUNTIFS(A:A,"01",B:B,"B",C:C,">=001",C:C,"<=999",D:D,"○") 99でZZで001から999のうち○の合計 =COUNTIFS(A:A,"99",B:B,"ZZ",C:C,">=001",C:C,"<=999",D:D,"○") EXCEL2007以前ならピボットテーブルを使った方がよさそうですね。
お礼
回答ありがとうございます。 エクセル2000になります。
》 …のデータが入っています データが入っている範囲の行数は?
お礼
回答ありがとうございます。 エクセルに入る最大の行数になります。
お礼
回答ありがとうございます。 >>そもそも、すべての組み合わせの合計を表示する必要があるのでしょうか? おっしゃる通りなのですが、残念ながら元データがまずいため、 すべての組み合わせの結果と別のデータの結果を比較して、 どちらを採用するか判定しなければならない事情があります。 エクセルは2000ですが、データを加工して、sumif関数を 使ってみたら少し速くなった気がします。