• ベストアンサー

多量のSUMIF式を軽くしたい

お世話になっております。 今回、7000行~10000行程度のデータを集計するEXCELシートを作成しています。 元データは 取引先CD 社名 分類CD 分類名 売上 粗利 在庫 001    A社 001   A   1200 120  1440 001    A社 002   B   1000 100  1200 001    A社 003   C   2000 200  2400 001    A社 004   D    300  30   360 001    A社 005   E   1500 150  1800 001    A社 006   F    200  20   240 002    B社 002   B   5000 500  6000 002    B社 004   D    10  1   12 003    C社 006   F   2200 220  2640 005    E社 005   E    100  10   120 のように会社別・分類別の売上・利益・在庫データです。 通常であれば、集計表を作るにはSUMIF関数で十分なのですが、 実際のデータは数千行あり、また項目ももっと多岐にわたるため、 再計算に時間がかかってしまいます。 (Celeron1.2Ghz、メモリ512MB位のノートPCで再計算に2~3分要します) SUMIF以外の方法で処理を軽くすることはできないでしょうか。 VBAを使って軽くなるのであればVBAでもかまいません。 ちなみに元データをいじることはできません。 (定型でシステムから出力されるデータであるため) 申し訳ありませんが、ご教示いただければ助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

No1です。 もしデータが取引先CD 或いは 社名順ならば =SUM(INDEX(E:E,MATCH("001",A:A)):INDEX(E:E,MATCH("001",A:A,FALSE))) といった関数が使えます。 SUM関数ですが範囲をMACTH関数で指定するものです。 MATCH関数で、最後にFALSEを指定するかしないかで、最初の行と最後の行が指定できます。 昇順に並んでいる事が条件です。SUMIF関数とは違って配列を使用しないので、非常に軽くなります。

sadamori
質問者

お礼

具体的な解決策をありがとうございます! 元データを貼り付ける手順をVBAで組んでいますので、 その時に取引先CD順にソートするようにしてみます。 ぜひ試してみたいと思います。 ありがとうございます!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 数千行程度で、そんなに遅くなるはずはないので、何か別の要因があるような気がしますが、もともと、そのようなために、データベース関数が昔作られました。データベース関数は、計算データの取得の仕方が違いますから、列をフルに使っても大丈夫なように作られています。ただ、使い方の細かな説明が、Microsoft サポートだけにしか出ていないような気がします。 なお、配列数式では、SUMIFよりは遅いはずです。

sadamori
質問者

お礼

お恥ずかしい話、データベース関数は今まで使ったことがありません。 DSUMなどを試してみたいと思います。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

こういう データが多量 仕事関係(即時性が要求される) 正確が要求される課題(関数、VBAは自作すると、データが多い場合、なかなかほぼ間違いないとはいえないものだ) などの場合は、出来るなら、専用にプログラムが組まれている ピボットテーブルを使うべきです。 たとえれば「カンナとのみ」(関数)と木工機械(特別ツール)とぐらいの差があると思います。道具を選ばないと。 ーー VBAなら 会社+分類別にソートし(どれぐらい時間がかかるかな?)たら、他に、初めから終わりまで1通り読む時間で集計できます。 ロジックとしては、バッチ処理の定石なんですが、ここにコードを書くことは、課題丸投げのコードを作ってくださいに応じることになるので、省略します。

sadamori
質問者

お礼

おっしゃる通り、道具は選ぶべきですが、 現状の使い方を考えると関数で組むことがベストかと思いました。 VBAで集計処理を入れることも検討してみたいと思います。 まだまだVBAは勉強中なので、今後の課題とさせていただきます。 ご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • sige1701
  • ベストアンサー率28% (74/260)
回答No.2

>会社別・分類別の売上・利益・在庫データです。 >通常であれば、集計表を作るにはSUMIF関数で十分なのですが、 >実際のデータは数千行あり、また項目ももっと多岐にわたるため どのように集計しているのでしょう? どのような式になっているのでしょう? (SUMIF関数で出来ているのかな) 現状がわからないので >SUMIF以外の方法で処理を軽くすることはできないでしょうか。 についての回答もしづらいですね

sadamori
質問者

お礼

説明が悪くて申し訳ありません。 実際には元データは2シートあります。 当年と前年のデータです。 これらを合わせて複数のシートに集計したいのです。 シートは会社別となっており、 縦に分類、横に売上・粗利・在庫 がそれぞれ当年・前年と来る形です。 集計にはすべてSUMIFを使っておりますが、 1つのシートに1,000個以上のSUMIF関数が入っており、 さらにこのシートが会社別に複数あると、 すさまじい量の計算になります。 これを少しでも早くしたいのですが、 なにか良い方法はないでしょうか。

全文を見る
すると、全ての回答が全文表示されます。
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

ピボットテーブルは試して見られましたか、 データ=>ピボットテーブルと・・・ で新規シートに作成 楯列に 社名 横列に 分類名 内側に 売上 でひとつのピボット作成出来ます。 上記の方法で、粗利 在庫 も同様に作成します。

sadamori
質問者

お礼

ご回答ありがとうございます。 ピボットテーブルも考えましたが、 今回は関数とマクロだけで実現したいと考えています。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルのSUMIF関数なのですが・・・

    A列に日付、B列に販売員名、C列に売上金額とし、現在三ヶ月分800個のデータが入力されている状態だとします。 例えば販売員Yさんの現在の売上を集計しようとすると =SUMIF(B1:B800,"Yさん",C1:C800)になると思うのですが、Yさんの月ごとの売上集計を計算するにはSUMIF関数をどういう風に変えればいいのでしょうか。 分かりにくい説明かもしれませんが、どうぞ宜しく御願い致します。

  • SUMIFの計算結果が0

    ブック内に商品別のシートが数枚あり、 それを月別集計する別シートを作っています ■商品シート A   B   C    D    E 月日  商品  仕入  出荷  在庫 ↓出荷状況によって入力が増減します ■月別集計シート A1=TODAY()  B1=型式  C=在庫 ↓商品別に一覧で在庫表示させる A1には、今日の日時を表示(仕様) C=在庫セルにSUMIFで在庫数計算させているのですが、、、 計算結果が0になってしまいます =SUMIF('型式シート'!$A$1:$A$500,">=MONTH($A$1)",'型式シート'!$C$1:$C$500) -SUMIF('型式シート'!$A$1:$A$500,">=MONTH($A$1)",'型式シート'!$D$1:$D$500)   その月の全仕入から全出荷を引いて在庫計算させているのですが、 SUMIFの計算結果が0になってしまいます。 記述もしくは検索条件のやり方が違うのでしょうか? お手上げ状態です、、TT

  • EXCELのSUMIF関数

    EXCELの計算で、複数のAND条件に合致する合計値を計算するにはどのようにすればよろしいでしょうか? 例えば、以下のようにA1:F2の領域があり、行1に1月~5月、行2に各月の金利支払い額を入力するとします。 この場合、SUMIFやANDを上手に使って「2月から4月までの金利支払い合計額」(=SUMIF(A1:F1,AND(">="&C1,"<="&E1),A2:F2)ですと、エラーとなってしまいます…)を1個のセルで計算する方法はありませんでしょうか? ご教示の程、宜しくお願い致します。   A   B  C  D  E  F 1 月   1  2  3  4  5 2 金利 5  4  8  7  9

  • EXCELの集計で困っています。

    こんにちは。 どなたかお知恵を拝借できませんでしょうか。 EXCEL2003 SP3 の集計で悩んでおります。 列 A) 商品区分 B) 大分類 C) 小分類 D) 品番 E) サイズ F) 仕入年度 G) 商品名 H) 商品カラー I) 店舗 J) 価格 K) 特別価格 L) 在庫点数 M) 在庫金額 N) 原価 O) 販売開始年度 というファイルがあります。 これを、D)品番とF)仕入年度の単位で在庫点数と在庫金額を集計し、 かつ、集計行にE)サイズとI)店舗を除く、その他全ての列項目の値を表示させたいのです。 (つまり、集計データの1行上の値を持ってくればOK。) これをメニューから行おうとしたのですが、集計項目は1つしかなく・・。 おそらくVBAを用いなければ無理だと思うのですが、 お恥ずかしい話、VBAの知識を持ち合わせておりません。 参考までに、データは約1万件あります。 また、データの並びは大分類>小分類>品番>サイズ>仕入年度で ソートされており、このままの集計ですと、品番・サイズ・仕入年度での 集計となってしまいますので、サイズを除いた 大分類>小分類>品番>仕入年度、への再ソートが必要かと思われます。 お手数をお掛けいたしますが、なにとぞよろしくお願いいたします。

  • 日付を条件としたsumif関数について

    お世話になります。 A列に2010/4/1から4/2・・・・・12/31の日付 B列には売上個数が入っています。 月別の売上個数を集計するために別表で D列に2010/4/1,2010/5/1・・・・2010/12/1を入力し E列で =sumif(A:A,"=month(D1)",B:B) としたのですが上手くいきません・・・ そこで、 1. この方法にはこだわらないので、良い方法を教えて下さい。 2. この方法のどこが悪いかを教えて下さい よろしくお願いします。

  • Excel2007 関数について

    お願い致します。 Excel2007で A行に日付「2012/1/1」「2012/2/25」等色々入っていて B行に売上「3,251,000」「250,000」等の金額データが入っています。 それを月ごとに集計したいのですがどうすれば良いでしょうか? =SUMIF(A:A,"2012/1*",B:B)とやってみたのですが上手くいきません。 よろしくお願いします。

  • Excel VBAにてSUMIF関数の入力

    Excelのあるシートに以下の表があります。     E列 ・・・・・・ F列 ・・・ G列 17行 2008/1/5 ・・ 売上 ・ 1,500 18行 2008/2/10 ・・売上 ・ 2,100 19行 2008/3/11 ・・売上 ・ 1,700 20行 2008/3/18 ・・売上 ・ 1,000 21行 2008/4/1 ・・・売上 ・ 2,500 23行 2008/3/15 ・・・・・・・ 3,500 この場合G23セルには=SUMIF(E17:E21, ">" & E23,G17:G21) という式が入っており、結果的に3,500という数字が見えます。 しかし、このG23セルにマクロにて式を書込み同じ3,500という 値を出したいのですが、マクロ上では何と記述すれば同じに なるのか教えて下さい。 例えばrange("G23").Fomula= "=SUMIF(E17:E21, ">" &E23,G17:G21) と記述してもエラーになってしまいます。

  • SUMIFの使い方で困っています。

    SUMIFの使い方で困っています。 下記の数式でデータ件数をカウントしたいと思い、使ってみたのですが、 そのデータをカウントする行には"1"の数字以外に"×"が含まれています。 この場合、"×"をカウント外にしたいのですが、どのようにすればよいか 悩んでいます。お力をいただけるとうれしいです。 {=SUM(IF(Sheet1!A2:A1000="●●",IF(Sheet1!E1:E1000>=1,1,0)))}

  • SUMIFでそもそもいいのかわかりません。IF+ANDでしょうか

    売上集計をしたいと思っています。 A列に売上月("月"は入れず数値"3"や"4"で入れてます) B列に区分(A=有力、B=ネタ、X=売上済) N列に商品の金額が入力されています。 "3月"かつ"X"の総売上を計算したいのですが、 =SUMIF(B:C,AND(B:B=3,C:C="X"),N7:N200) こんなのしか思いつきません・・・。 これだとエラーは出ないものの数値が0になってしまうんです。 本を読んでもよくわからないので、どなたか教えてください。 どうかよろしくお願い致します。

  • エクセルのSUMIF関数での質問です。

    会社コードで売上額を集計してます。 SUMIF(範囲,検索値,範囲)の検索値会社コードが 00E**という コードだとうまく計算されません。 VLOOKUPだとうまく引っ張ってくるのですが。。。 なにが原因でしょうか?

専門家に質問してみよう