- 締切済み
エクセルが重くなるのを回避したい
製造業に従事しています。 VBAで製品のバーコードを読み取り管理しるマクロを組みましたが 1日2000台位を読み込む為、半日でエクセルが重くなってきます。 多分C&Pを多用しているからだと思います。 これはパソコンのメモリーを増設すれば解決しますか? どなたか教えてください。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- winarrow07
- ベストアンサー率41% (143/346)
>多分C&Pを多用しているからだと思います とありましたので、コードの中でCopy(Cut) & Pasteを多用していると思ったのですが、違ってましたでしょうか? また、コピペのコード自体は少なくてもFor分で回しているとか、コピーしている範囲が大きいとかもありえると思います。 >重くなる理由を調べる方法はないでしょうか? 下記を教えてもらえることはできるんでしょうか? ・PC自体が重くなるのかそのエクセルだけが重いのか ・そのエクセルファイル自体のファイル容量 ・そのエクセルの構成 シート数とかシート辺りのレコード(行)数とか ・実際のVBAのコード、またはやっていることの概要
- winarrow07
- ベストアンサー率41% (143/346)
エクセルファイル自体が重ければ仕方のないことだと思いますが、VBAのコードに改善できるところがあれば改善したほうがいいと思います。 コピペを繰り返すと(エクセルに限らず)重くなったり、コピペ自体ができなくなったりします。 n-junさんのおっしゃるとおり、コピーの方法を見直したほうがいいかもしれません。ハードウェアの増強でカバーするよりもコードで改善できるところを改善(チューニング)するのが先決と思います。 Range("A1").Copy Range("A2").PasteSpecial よりも、 Range("A1").Copy Destination:=Range("A2") のほうが断然に効率がいいです。
補足
ご丁寧なアドバイス有り難うございました。 再度、コード見直したのですが、コピペのコードはほとんどありませんでした。 重くなる理由を調べる方法はないでしょうか? 宜しくお願いします。
- n-jun
- ベストアンサー率33% (959/2873)
n-junです。 Range("A1").Copy Range("B1").PasteSpecial の様な方法で行なっているのであれば、 Range("A1").Copy Range("B1") にしてみるとか。 ⇒クリップボードを経由しない。 Range("B1").Value = Range("A1").Value ⇒値だけで良ければ代入する案でも。
- n-jun
- ベストアンサー率33% (959/2873)
コピペしたあとで、 Application.CutCopyMode = False を実行しても重いのでしょうか?
補足
>多分C&Pを多用しているからだと思います とありましたので、コードの中でCopy(Cut) & Pasteを多用していると思ったのですが、違ってましたでしょうか? また、コピペのコード自体は少なくてもFor分で回しているとか、コピーしている範囲が大きいとかもありえると思います。 >重くなる理由を調べる方法はないでしょうか? 下記を教えてもらえることはできるんでしょうか? ・PC自体が重くなるのかそのエクセルだけが重いのか ・そのエクセルファイル自体のファイル容量 ⇒ 6.32 MBです。 ・そのエクセルの構成 シート数とかシート辺りのレコード(行)数とか ⇒ 7シートで作成しています。 第1シート メインのシートで受注No,で各注文の情報を記録・検査・確認するシートです。 MAX行数:76行 第2シート プリントリストのシートです。 検査する受注の数量にあわせ、シリアルNo,の一覧を作成します。 つまり、MAX行は5000台の受注であれば、5000行 2万台であれば、2万行です。 第3シート シリアルNo,を記載して伝票(の様な紙)を印刷する為の印刷フォームです。 約50台に1回、印刷が必要です。 MAX行:25行 第4シート ベースデーターシートです。 受注品のすべての情報です。 TABLE形式ですが、他のデーターベースファイルから エクセル(ファイル)起動にOpenイベントで読み込んでいます。 MAX行 : 15000行 第5シート 使用していません。(存在しているだけ) 第6シート 生産管理表示板用 読み込んだシリアルより、生産台数や生産累計台数を割り出し、生産管理表示板に 移す為のシートです。 このシートは約2分おきに"Webページとして保存"しています。 それを各生産スタッフが オフィスでPCで閲覧しています。 MAX行 : 35行 第7シート 管理用のシートでこのマクロのフローチャートを作成してあります。 MAX行 : 60行 ・実際のVBAのコード、またはやっていることの概要 ⇒ 実際のVBAコードは複雑な上に、ユーザーフォームも沢山使用していますのでわからないと思います。 やっている事の概要は下記の通りです。(わかりにくいかも知れません。) 製造業の最終梱包工程にて、製品に貼り付けてあるシリアルNo,バーコードラベルを読み込み、生産数量の管理・表示を行う。 又、完成品は約5台で1箱に収めるが、その箱に5台分のシリアルNo,が記入されている伝票(現品票)を貼り付ける為、50台分のシリアルを読み込むと、その現品票を印刷する。 別にデーターベースソフトでシリアルリストと言うデーターがある。 各受注オーダーにシリアルをどの様に使用したかが解るリストである。このデーターベースソフトとエクセルがリンク出来ない為、データーベースソフトから.CSVで出力された物をエクセル(ファイル)起動時にインポートして"第4シート"に保存している。 ただし、この原紙用のファイルは読み込み専用で、終業時や一旦中止時は受注No,をファイル名として保存している。 大まかにはこんな感じです。解りにくいと思いますが、何か、ヒントでもいただければ・・・。 私は素人なので、プロの方からすると、「変な事、やってるなぁ」と思うかもしれませんが宜しくお願いします。 以上