

いつもお世話になります。初心者ですが教えてください。
多くのデータを集計するマクロを作成しているのですが、実行すると5分くらいかかってしまいます。実行速度を早くしたいのですが、何かポイントはありますか?
sumproduct(複数条件掛け算)の計算を約5万セル(500*100)に対して行っています。具体的な作業内容は以下です。要注意・要改善点など、どんなことでもいいので教えてください。
----------------------------------------
店別の商品別実績の集計をする作業です。店数約500、商品数100です。
おおもとの営業実績データ(base.xls)があります。10,000行×15列ですが、数字の羅列だけであり、人が読むのには適していません。そこで店別結果を知るために、base.xlsを加工して、店別実績表(jisseki.xls)を作るのが作業内容です。
作業の頻度は日々複数回、作業担当は私だけ、ただし出張等私不在時には他人が代行、代行者は関数・マクロの知識がほとんど無い人間も含まれます。
base.xlsは社内イントラネットから毎回ダウンロードしてます。個人用マクロブックに上述の作業を登録して動かす形をイメージしてます。
【base.xlsの構成】 A列=店番、B列=種別(預入、解約の2種類が数字で表示)、C列=商品コード、D列=実績数字、など。(他列は集計作業には無関係)
【jisseki.xlsの構成】 店番(A3:A500)、店名(B3:B500)、商品コード(C1:CX1)、商品名(C2:CX2)。同じ形式のシートを3枚作り、シート名は預入、解約、合計です。預入と解約の(C3:CX500)は、店番・商品コード・種別・金額をsumproductの掛け算方式にしています。
Range("C3").formula="=sumproduct~" を、C3:CX500に、PasteSpecial xlPasteFormulas と書いています。
No.2ベストアンサー
- 回答日時:
(1)VBAによって、エクセル関数セットする方法を使うのは、関数経験=>VBAの習得に入った方には、思いつきやすいことですが、データが千程度を超えると、普通はそうはしないでしょう。
(2)(A)VBAからでもできますがまた(B)手作業によるウイザード利用で、データーピボットテーブルと・・が有りますが、これを検討する手があります。
これが一番手軽で早く誤りがないでしょう。
(3)本当はプログラマを目指すなら、課題にあわせた、適当なロジック(やアルゴリズム)というものを、考える必要があります。
スピードを上げるのは、これに行き着きます。
本件は入力作業が一段落して、まとめて一度に行ってよいオフラインバッチ作業なので、パソコンが出る以前から、COBOLプログラマーなどに、初等学習が終わると課せられていた、事務処理プログラムの定番でした。
それには店番+店名+商品コードでデータをソートし、この3つをコントロールキーとし、コントロールキーが変わった(コントロールブレーク)機会に合計計数を記録します。今では情報処理試験の対策本
などに載っているのを見かけます。
そういう経験とか、教えてもらわないと、VBAの初等の本をわかっても、自己だけの世界の変なロジックでプログラムを組んでしまいます。
もっと視野を広げること、そのためにはどうすればよいか。
ご回答ありがとうございます。
前問でもお世話になりました。
>データが千程度を超えると、普通はそうはしないでしょう。
そうですか、それが分かってよかったです。
ピポットテーブル、この利用も考えてみたいと思います。
私はプログラマーを目指す者でもなんでもなく、また、この集計作業も自分の主業務でない割には、日々結構時間と労力を取られるので、何とか楽にしたいなと思ったのが発端なのです。
もっともっと勉強が必要なようですが、この省力化作業にやたらと時間をかけても本末転倒なので、そこを考慮してあたりたいと思います。
どうもありがとうございました。
No.1
- 回答日時:
私の勘違いかもしれませんが、セルに関数をそのままコピペしているだけということなんですか? VBAというかか別に手動でやっても同じことなんですよね??
そりゃまぁメモリ馬鹿食いでしょう。その処理なら限界までメモリを搭載した高CPUマシンで処理するぐらいしか手がないような気がしますが。VBAの処理が遅いのではなくエクセル上の計算に時間がかかっているだけ。
コード上で計算してその結果を書くだけという処理にはできないのでしょうか。
というか1万件を超えるデータなら単純にアクセスなりで処理させた方がもっと早くなる(また単純な構成のようなので手間もそんなにかからない)と思いますが。
ご回答ありがとうございます。
手動でやろうと思うと、いちいち数式を入れて、コピーして、とかやらねばならないことや、設問には書きませんでしたが書式の設定やら並び替えやら他の作業も入ってきたりすることもあり面倒を省きたいのです。
また、預入のシートの計算結果が終わるまで、解約のシートが作れないので待っているのが面倒だと思った次第です。
>VBAの処理が遅いのではなくエクセル上の計算に時間がかかっているだけ。
なるほど。おっしゃるとおりだと思いました。
>コード上で計算してその結果を書くだけという処理にはできないのでしょうか
コード上で計算というと、ワークシート関数というものを使うということでしょうか?または他の方法でしょうか?
少し調べたところ、VBAで使えるワークシート関数に、sumproduct も入ってるようなので、やり方を再考してみます。
いろいろと勉強せねばなりませんが、大変参考となりました。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- その他(Microsoft Office) ピボットテーブルへの集計フィールド挿入 1 2023/02/26 11:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【エクセルとメモ帳を照合したい】
-
Google form グーグルフォーム...
-
PC(やスマホ)で気軽に音声入力...
-
エクセルの表を選択し、「画像...
-
Notionが、テーブルビューを一...
-
wordの差込印刷(ラベル作成)...
-
「ドゥ」の簡単なローマ字入力方法
-
ワードにて スペースを全て改行...
-
一太郎をワードに変換
-
Office Word [ここに入力] が...
-
1MBでドレくらいの文章を書くこ...
-
エクセルでセル未入力時の初期...
-
PDF 入力途中で改行したい
-
一太郎で作成した文書をコピペ...
-
「ディ」はどう入力すればいい...
-
キャップカットで「フレーム内...
-
CSVデータのEnterを削除
-
JUST PDF 3 傾き補正
-
Word2003でEscが効かない原因は...
-
々 ←この字を入力する時。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル 細かい条件での切り...
-
エクセルでのデータ蓄積
-
エクセル関数について
-
エクセル マクロ 値のある行...
-
従事期間の重複チェック、表示
-
画像のCSVデータをガントチャー...
-
EXCEL97のマクロ処理について
-
エクセルで複数セル範囲をコピ...
-
オートフィルターで抽出された...
-
エクセルで苦労してます
-
【エクセルとメモ帳を照合したい】
-
エクセルでのセルへ入力日の記...
-
マクロ初心者です。 日がすぎた...
-
Google form グーグルフォーム...
-
PDF 入力途中で改行したい
-
Notionが、テーブルビューを一...
-
エクセルでセル未入力時の初期...
-
エクセルの表を選択し、「画像...
-
wordの差込印刷(ラベル作成)...
-
ワードにて スペースを全て改行...
おすすめ情報