• ベストアンサー

VBAが重くなってしまった

ExcelでVBAを組んでいましたが、ある日突然このVBAを実行すると途中でCPUが100%になったままExcelが復帰しづらくなりました。 強制的にESCキーを押してVBAを終了させてもExcel自体が動作が重くなってExcelブックとVBEのウインドウを行ったり来たりするにもCPUがしばらく100%になって動作が非常に重くなります。 結局タスクマネージャからExcelを強制終了するのですが、原因がわかりません。 VBAの内容に誤りがあるのでは?と思って何日も調べましたがVBAでエラーがでることはなく、VBAの実行が非常に重く、今まで3秒で実行が終わっていたものが数分かかってしまいます。 Windows2000SP4+Excel2000SP3です。おわかりの方いるでしょうか?たいへん困っております・・・。

  • suffre
  • お礼率76% (2013/2633)

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

VBAのコードが不明ですので、問題の切り分けも出来ませんが、、、、 特定のブックだけが重いのか、新規ブックで簡単なコピー処理をさせても重いのか試してみるなど、問題を少しずつ切り分けていっては? 経験上、コピー処理を繰り返す場合で重くなるのはオートシェイプ等のオブジェクトが一緒にコピーされているケースです。 (透明なオブジェクトが大量に出来ているなど)

suffre
質問者

お礼

お返事ありがとうございます。 新規ブックでの簡単なコピーすら重い状況でした。 そこでOfficeを再インストールしてみたところ不具合は解消されました。 原因はよくわかりませんが、改善されたのでほっとしました。 ご回答くださった方々ありがとうございます!

その他の回答 (1)

  • Ysan
  • ベストアンサー率32% (44/136)
回答No.1

無限ループに近い状態のプログラムの組み方をしていませんか? (ある特定の状況で無限ループに近い状態なるとか) その場合はエラーも出ません。 プログラムを見直してみては?

suffre
質問者

お礼

かもしれないと思ったのですが、ループはスキップさせて実行させてもダメでした。 あと、先ほど以前組んだ完成されたVBAを実行しても同じく重くなってExcelが帰ってこなくなりました。 どうやらシート間でセルをコピーするところで止まっている(CPU100%)っぽいです。

関連するQ&A

  • EXCEL VBAマクロの実行優先度を下げたい

    いつもお世話になっております。 EXCEL VBAであるマクロを実行させています。 このマクロは終了するのに丸1日以上掛かるもので、それを実行している間、EXCEL.EXEのCPU使用率が100%になってしまいます。 私の所有するPCパワーが乏しい&所有PCが1台だけのため、このマクロを実行している間、EXCEL以外の他の作業の動作がとても遅くて困っています。 例えば、テキストエディタで文字を打って変換するのに数秒かかったりします。 タスクマネージャでEXCEL.EXEのプロセス優先度を下げることができるのは知っていますが、以前別のマクロでそれを実行して他の作業をやっていた時にEXCELが強制終了された経験があり、私のPCではタスクマネージャによるプロセス優先度の変更はシステムが不安定になることに繋がるようです。 ですので、できることなら、実行中のVBAマクロのみ優先度を下げたいんですが、そのようなことは可能なのでしょうか。 よろしくお願いいたします。

  • office365のexcel2016でのVBA

    社内のネットワークハードディスクにexcel2007で作成した簡単なVBAを組み込んだxlsmファイルを保存し、複数の端末で使用しています。excel2007が入った端末でVBAを実行するとものの1秒で処理が終了するのですが、office365のexcel2016が入った端末で実行すると数分間かかってしまいます。ところが、同じxlsmファイルを同端末のデスクトップにコピーしてexcel2016で開き、VBAを実行すると一瞬で処理が終わります。セキュリティの問題だと思うので、2016の「設定」から「セキュリティセンターの設定」に入り、色々いじってみたのですが改善しません。ファイルをNASに置いたままexcel2016でVBAを快適に動作させるにはどうしたら良いのでしょう?

  • Excel VBA 自身を非表示にした時の解除方法

    Excel2010でVBAのコードデバッグ中に Excelアプリケーションのウインドウの中に Excelブック(シート)が表示されなくなってしまったため 一度、Excelアプリケーションを終了して 再びデバッグ中のExcelブックを開いたのですが それでも Excelアプリケーションのウインドウだけが表示されて、 開きたいExcelブック(シート)は表示されません。 おそらく、VBAのコードの中の Set wb = Workbooks.Open(fileName:=filePass, ReadOnly:=True) ActiveWindow.Visible = False の ActiveWindow.Visible = False のコードが 自分自身を非表示にしてしまったのではないかと思われます。 イミディエイトウィンドウに ActiveWindow.Visible = True と入力してもウインドウが表示されていないので エラーになります。 どのようにすれば非表示の状態から 表示の状態に戻すことができるのでしょうか。

  • Excel マクロ & VBA で教えてください

    Excel マクロ&VBA の教則本で、独習しています。その中の「すべてのブックに対して 処理を繰り返す」との項目で、以下の様な「コード」があります。           Sub 開いているブックに処理を実行( ) Dim 全ブック As Workbook For Each 全ブック In Workbooks 全ブック .Save Next End Sub これを実行すると、以下の「メッセージ」が表示されました。 Microsoft Excel プライバシーに関する注意:このドキュメントは、マクロ、Activexコントロール,XML拡パックの情報、又はWebコンポーネントが含まれています。これらにはドキュメント検査機能で削除することが出来ない個人情報が含まれる場合があります。 そして 「OK」 ボタンをクリックすると VBA に戻り、「キャンセル」ボタンをクリックすると「実行時エラー’1004’:ファイルを保存出来ませんでした」とのメッセージが表示され、「セキュリティー」に問題があるのかと、「セキュリティー」の設定を、教本を見ながら、色々試してみましたが、解決出来ません。どの様にすれば実行出来るのか?御指導御教授の程、よろしくお願い致します。 動作環境は以下の通りです。 ◎OS -- Windows7 ◎Excel -- Microsoft Excel 2010

  • エクセルVBA印刷エラー(Windows98,Me)

    Windows98及びMe上でエクセル2000のVBAで印刷コマンドを実行した場合、エラーが発生し、エクセルが強制終了してしまいます。 (VBA例) Private Sub Command Button1.click() WorkSheets("sheet1").Activate ActiveSheet.PrintOut End Sub 上記を実行すると、 ”Excelが原因でKERNEL32.DLLにエラーが発生しました。Excelは終了します。・・・・・” と表示され、エクセルが強制終了してしまいます。 これは、マイクロソフトの問題として、認識されており、 文書番号 436490 ”XL2002 VBAでプリンタ関連コマンド利用時に強制終了”に回避策が紹介されています。 これは、VBAでプログラムを作成した環境と使用する環境のプリンタが異なる場合に発生するようですが、私が確認したところ、Windows98、Meの場合、VBA作成環境と使用環境が同じ場合でも発生します。簡単に言えば、Windows98、Meでは ”ActiveSheet.PrintOut ”というコマンドを実行すると、上記のエラーが発生してしまいます。なお、WindowsXP,2000では全く問題有りません。  エクセル上で組まれたフリーソフトでWindows98、Me動作確認済みとあるものでも、印刷を実行すると、エラーが発生するものが多く有ります。  マイクロソフトで公表されている回避策を実施しましたが、解決出来ません。  何かよい方法がありましたら、教えて下さい。  

  • vbaでvbaProjectのパスワード解除する

    マクロを作成したエクセルファイルがあるのですが、配布した数が1万ほどありまして、 今回、vbaプログラム自体を変更しなければいけなくなりました。 そこで、調べた結果vbaをvbaで編集することまではわかりました。 http://officetanaka.net/excel/vba/vbe/index.htm しかし、配布したエクセルファイルのvbaProjectにパスワード保護をかけていまして、上手く動作しません。 なので、vbaでvbaProjectの保護を解除したいのですが、何かいい方法がありましたら、 ご指導の程よろしくお願いします。 ※vbaProjectのパスワードはわかっています。

  • Excel2007でBOOK間のシート移動をVBAで行うとエラーになる

    Excel VBAで開発されたソフトの改造を行ってますが、Excel2007で動作しないマクロがあり困ってます。 <開発環境> ・WindowsXP Pro SP3 ・Celeron 540(1.8GHz) ・メモリ1GB ・Excel2007 SP1 (Microsoft Office2007) 改造元ソフトはOffice2000で開発されており、Excel2007で動作するとマクロエラーが発生する処理があります。 因みにまだソフト改造はしてなく、そのままExcel2007で動作させるだけでマクロエラーが発生します。 発生する箇所はVBAで開発されており、下記のコマンドです。 Sheets(移動元シート名).Move Before:=Application.Workbooks(移動先ブック名).Sheets(1) 異常の内容は下記になります。 ------------------------------- ?err.Description 移動先またはコピー先のブックの行列数が元のブックの行列数よりも少ないため、シートを移動先またはコピー先のブックに挿入できません。データを別のブックに移動またはコピーするには、データを選択して、[コピー] コマンドと [貼り付け] コマンドを使用して移動先またはコピー先のブックのシートに挿入してください。 ?err.Number 1004 ------------------------------- 移動元BOOKは1シート、移動先BOOKは1シートあります。 これをExcel2000で実行すると正常にシートが移動できます。 (移動元BOOKのシートがなくなりBOOKが終了して、移動先BOOKは2シートになります) Excel画面の移動元シートを選択して、右クリックメニューの「移動またはコピー」で移動先ブックを指定して移動すると 「移動先またはコピー先のブックの行列数が元のブックの行列数よりも少ないため、シートを移動先またはコピー先のブックに挿入できません。データを別のブックに移動またはコピーするには、データを選択して、[コピー] コマンドと [貼り付け] コマンドを使用して移動先またはコピー先のブックのシートに挿入してください。」 とVBAから実行した時と同じ内容のエラーダイアログが表示されました。 (Excel2000では手動でも移動できました) Excel2007では1シートで構成されたBOOK間の移動はできないのでしょうか? また、これをVBAで対策しようとした場合にどうしたら良いのでしょうか? ネットで調べましたが判らず、ここで質問させて頂きました。 判りにくい説明で申し訳ありませんが、よろしくお願いします。

  • Excel 2003のVBAマクロデータをExcel 2007で見たい

    Excel 2003のVBAマクロデータをExcel 2007で見たい。 Excel 2003でVBAマクロを登録したExcelファイルがありますが、今回、Excel 2007をインストールして、該当ファイルを開いたところ、「マクロデータを削除しました。」とメッセージが出て、VBEを起動してもマクロが見えなくなりました。OSはWindowsXP SP3です。Excel 2003で登録したVBAマクロをExcel 2007で削除されないで、次の2点について、可能にするにはどうすればよいか、ご教示願います。 (1)マクロデータを残す方法。 (2)マクロ起動する方法。

  • Excel VBAでブックを閉じる時、複数のブックが開いていると・・・。

    WinXP+Excel2002なのですが、 ExcelのVBAでつくったアプリの中に、 Application.Quit ThisWorkbook.Close False と記述し、終了させる部分があります。 複数のブックが開いているときにこのプログラムを実行すると、 他のブックまで閉じようとするのですが、 これは何ともならないのでしょうか。 複数のブックを開いた状態でVBEを開くと、 どのブックをアクティブにしておいても、他のブックの モジュールが出てきますよね。これに関係あるのでしょうか。 VBAはそのブックだけに記述することができる・・・のでしょうか? 調べてみたのですがよくわかりませんでした。 基本的なことで恐縮ですが、こんな私にわかるよう 教えてくださる方いらしたらお願いいたします。

  • タスクなどによるエクセルデータの強制保存

    タイトルの方法でなくてもいいのですが、毎日任意のデータをFTPにバックアップの意味もこめてアップしたいと思って奮闘しております。 タスクによるNextFTPのスケジュール起動、アップロードでほぼいけたんですが、実際タスクが動くときにエクセルデータが保存されていないようだとやっても意味がないということに気づきました。 そこで次の2つのうちどちらかが可能であれば完璧なんですがちょっと知識が足りなく苦戦しています。 ■ウィンドウズ終了時にNextFTPのタスクを実行できるようにする ■NextFTPのタスク実行の前に任意のエクセルファイルを強制的に保存 理想は上のほうですし、なんかやれそうな気がするのですがどうなんでしょうか? こちらの環境はwidows XP SP2, Excel 2003を使用しております。 当方VBAはまったくわかっておりません。 皆さんよろしくお願いいたします。

専門家に質問してみよう