• 締切済み

エクセルが重くなるのを回避したい

 製造業に従事しています。  VBAで製品のバーコードを読み取り管理しるマクロを組みましたが  1日2000台位を読み込む為、半日でエクセルが重くなってきます。 多分C&Pを多用しているからだと思います。  これはパソコンのメモリーを増設すれば解決しますか?  どなたか教えてください。

みんなの回答

回答No.4

>多分C&Pを多用しているからだと思います とありましたので、コードの中でCopy(Cut) & Pasteを多用していると思ったのですが、違ってましたでしょうか? また、コピペのコード自体は少なくてもFor分で回しているとか、コピーしている範囲が大きいとかもありえると思います。 >重くなる理由を調べる方法はないでしょうか? 下記を教えてもらえることはできるんでしょうか? ・PC自体が重くなるのかそのエクセルだけが重いのか ・そのエクセルファイル自体のファイル容量 ・そのエクセルの構成  シート数とかシート辺りのレコード(行)数とか ・実際のVBAのコード、またはやっていることの概要

B_BOSS
質問者

補足

>多分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,をファイル名として保存している。 大まかにはこんな感じです。解りにくいと思いますが、何か、ヒントでもいただければ・・・。  私は素人なので、プロの方からすると、「変な事、やってるなぁ」と思うかもしれませんが宜しくお願いします。   以上

回答No.3

エクセルファイル自体が重ければ仕方のないことだと思いますが、VBAのコードに改善できるところがあれば改善したほうがいいと思います。 コピペを繰り返すと(エクセルに限らず)重くなったり、コピペ自体ができなくなったりします。 n-junさんのおっしゃるとおり、コピーの方法を見直したほうがいいかもしれません。ハードウェアの増強でカバーするよりもコードで改善できるところを改善(チューニング)するのが先決と思います。 Range("A1").Copy Range("A2").PasteSpecial よりも、 Range("A1").Copy Destination:=Range("A2") のほうが断然に効率がいいです。

B_BOSS
質問者

補足

ご丁寧なアドバイス有り難うございました。 再度、コード見直したのですが、コピペのコードはほとんどありませんでした。  重くなる理由を調べる方法はないでしょうか? 宜しくお願いします。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

n-junです。 Range("A1").Copy Range("B1").PasteSpecial の様な方法で行なっているのであれば、 Range("A1").Copy Range("B1") にしてみるとか。 ⇒クリップボードを経由しない。 Range("B1").Value = Range("A1").Value ⇒値だけで良ければ代入する案でも。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

コピペしたあとで、 Application.CutCopyMode = False を実行しても重いのでしょうか?

関連するQ&A