お世話になっております。
今回、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でもかまいません。
ちなみに元データをいじることはできません。
(定型でシステムから出力されるデータであるため)
申し訳ありませんが、ご教示いただければ助かります。
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関数とは違って配列を使用しないので、非常に軽くなります。
具体的な解決策をありがとうございます!
元データを貼り付ける手順をVBAで組んでいますので、
その時に取引先CD順にソートするようにしてみます。
ぜひ試してみたいと思います。
ありがとうございます!
No.5
- 回答日時:
こんばんは。
数千行程度で、そんなに遅くなるはずはないので、何か別の要因があるような気がしますが、もともと、そのようなために、データベース関数が昔作られました。データベース関数は、計算データの取得の仕方が違いますから、列をフルに使っても大丈夫なように作られています。ただ、使い方の細かな説明が、Microsoft サポートだけにしか出ていないような気がします。
なお、配列数式では、SUMIFよりは遅いはずです。
お恥ずかしい話、データベース関数は今まで使ったことがありません。
DSUMなどを試してみたいと思います。
ありがとうございます。
No.4
- 回答日時:
こういう
データが多量
仕事関係(即時性が要求される)
正確が要求される課題(関数、VBAは自作すると、データが多い場合、なかなかほぼ間違いないとはいえないものだ)
などの場合は、出来るなら、専用にプログラムが組まれている
ピボットテーブルを使うべきです。
たとえれば「カンナとのみ」(関数)と木工機械(特別ツール)とぐらいの差があると思います。道具を選ばないと。
ーー
VBAなら
会社+分類別にソートし(どれぐらい時間がかかるかな?)たら、他に、初めから終わりまで1通り読む時間で集計できます。
ロジックとしては、バッチ処理の定石なんですが、ここにコードを書くことは、課題丸投げのコードを作ってくださいに応じることになるので、省略します。
おっしゃる通り、道具は選ぶべきですが、
現状の使い方を考えると関数で組むことがベストかと思いました。
VBAで集計処理を入れることも検討してみたいと思います。
まだまだVBAは勉強中なので、今後の課題とさせていただきます。
ご回答ありがとうございました。
No.2
- 回答日時:
>会社別・分類別の売上・利益・在庫データです。
>通常であれば、集計表を作るにはSUMIF関数で十分なのですが、
>実際のデータは数千行あり、また項目ももっと多岐にわたるため
どのように集計しているのでしょう?
どのような式になっているのでしょう?
(SUMIF関数で出来ているのかな)
現状がわからないので
>SUMIF以外の方法で処理を軽くすることはできないでしょうか。
についての回答もしづらいですね
説明が悪くて申し訳ありません。
実際には元データは2シートあります。
当年と前年のデータです。
これらを合わせて複数のシートに集計したいのです。
シートは会社別となっており、
縦に分類、横に売上・粗利・在庫 がそれぞれ当年・前年と来る形です。
集計にはすべてSUMIFを使っておりますが、
1つのシートに1,000個以上のSUMIF関数が入っており、
さらにこのシートが会社別に複数あると、
すさまじい量の計算になります。
これを少しでも早くしたいのですが、
なにか良い方法はないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 会計ソフト・業務用ソフト Excelで売上げデータの中の任意の商品の合計を出したい 3 2023/01/18 18:19
- Excel(エクセル) エクセルで年月ごとの売り上げを集計する方法を教えてください 7 2022/06/01 17:06
- その他(Microsoft Office) ピボットテーブルへの集計フィールド挿入 1 2023/02/26 11:33
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) 【マクロ】同じフォルダ内にある複数ブックから1つのブック内の1シートにデータを集めたい 6 2022/09/28 18:16
- Visual Basic(VBA) VBAで自動集計(特定セルコピー月ごとに値貼り付け)したい。 6 2023/06/25 11:37
- その他(IT・Webサービス) 高速処理可能な表計算ソフトについて ExcelやGoogleスプレッドシートのような表計算ソフトで、 2 2023/04/29 16:06
- Excel(エクセル) エクセル 条件に合う日付に入力された時間数の合計したい 4 2022/06/17 22:18
- 中途・キャリア 契約社員で在職中ですが、正社員目指して転職活動中です。 20代半ばの男です。 2社から内定を頂きまし 5 2022/04/29 13:39
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
SUMIFに変わる(代用)数式を教えてください
Windows 7
-
【Excel】 SUMPRODUCT関数の高速化
Excel(エクセル)
-
INDIRECT関数の代替方法は?
Excel(エクセル)
-
-
4
Excel関数,SUMIFの代わりになるもの
Excel(エクセル)
-
5
特定のシートのみ再計算させない方法は?
Excel(エクセル)
-
6
外部ファイルを開かず参照したい
Excel(エクセル)
-
7
関数が“揮発性”か“不揮発性”かを知る方法は?
Excel(エクセル)
-
8
リンク先のファイルを開かなくても、値が読み込めるようにできますか?(SUMIFSを使ってます)
Excel(エクセル)
-
9
エクセルでENTERを押すと数式がそのまま文字列になってしまう
Excel(エクセル)
-
10
《Excel2000》SUMPRODUCT関数での集計、空白行がある場合は?
Excel(エクセル)
-
11
Excelで重複データの件数ではなく、何番目かを求める方法
Excel(エクセル)
-
12
VBAで「致命的なエラー」が出ました。どのくらい致命的なんでしょうか?
Access(アクセス)
-
13
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
14
エクセルでアルファベットか数値の判定をしたいのですが
Excel(エクセル)
-
15
エクセルで空白セルを含む列の最終行の値を取得する式を教えてください
Excel(エクセル)
-
16
「#エラー」の回避
Access(アクセス)
-
17
IF関数で空欄(")の時、Nullにしたい
その他(Microsoft Office)
-
18
Excel > ピボットテーブル「(空白)」非表示
Excel(エクセル)
-
19
excel small関数とif関数の組み合わせ
その他(Microsoft Office)
-
20
matchプロパティを取得できません…と出ます。
PowerPoint(パワーポイント)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
合計3TBのデータのハッシュ値を...
-
教えて下さい
-
VBA 空白セルを削除ではない方...
-
多量のSUMIF式を軽くしたい
-
【エクセル】測定時間がバラバ...
-
配列でデータが入っている要素...
-
エクセルで2つの時系列のデー...
-
メモ帳(テキストデータ)をExc...
-
C言語プログラム変更
-
Matlab:plotで特定の値だけをプ...
-
Excelのマクロでワードのテキス...
-
シーケンサにパソコンからアク...
-
VBAを使ってOutlookメール本文...
-
matlabでの標高断面図の作成
-
ウィンドウ枠の固定を行の2箇所...
-
パースとはなんですか?
-
Accessで該当データにフラグを...
-
ビットシフトについて
-
VBA & easycomm で長時間測定の...
-
配列の勉強をしています。使用...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
多量のSUMIF式を軽くしたい
-
Excelのマクロでワードのテキス...
-
エクセルで2つの時系列のデー...
-
この行は既に別のテーブルに属...
-
VBAを使ってOutlookメール本文...
-
シーケンサにパソコンからアク...
-
EXCELVBAでSQLserverからデータ...
-
ブレーカー落ちで壊れたりしな...
-
[C言語] コメント文字列を無視...
-
オープンチヤットでデータ削除...
-
モジュラス103の算出方法について
-
javaでDBからデータを取ってき...
-
カンマからスラッシュに
-
VBA 毎日取得するデータを順番...
-
Android携帯をUSBメモリ代わりに
おすすめ情報