Excel VBA 質問スレッド №2146 (未解決)

vba実行後フリーズ

投稿者 : 道場八三郎     投稿日時 : 2025/09/16(Tue) 17:26:03     OS : 未指定     EXCEL : 未指定
以前はvba実行後excelがフリーズ(操作できない。クリックしても反応がない。excel強制終了するしかない)することがなかったのですが、ここ数か月は都度フリーズするようになりました。
現在コードに「Application.CutCopyMode」、「Application.ScreenUpdating」を入れています。
対応方法あれば教えていただけますでしょうか。
よろしくお願いいたします。

スポンサーリンク
[返信 1] Re : vba実行後フリーズ
投稿者 : 匿名     投稿日時 : 2025/09/16(Tue) 18:11:10
まず疑うのは
「Application.CutCopyMode」、「Application.ScreenUpdating」
ではなく
「永久ループ」です。
データ状況によって、永久ループに入っている可能性があります。
繰り返し処理の中に
DoEvents
を入れてみましょう。

[返信 2] Re : vba実行後フリーズ
投稿者 : そのうち慣れる     投稿日時 : 2025/09/17(Wed) 00:03:09
>Application.CutCopyMode

ってことは、広範囲のコピペをやっているからでは?
フリーズではなく数十分ほっとけば戻ると思います
だから私は範囲を小さくして、何回も繰り返すようなコードコードにしてます
そんで時間がかかるのは仕方がないと思って終わるまで待ってます
また、スタックオーバーフローにならないように先の回答にあるように
DoEventsを適当にちりばめたり
それと、私はApplication.ScreenUpdatingは使わない、フリーズしているか
解らないから・・・・
画面がガチャガチャしている方が落ち着く

[返信 3] Re : vba実行後フリーズ
投稿者 : 匿名     投稿日時 : 2025/09/17(Wed) 12:00:14
[返信 1]の追記です。

申し訳ございません。
私は、VBAではコピー&ペーストを使わないので、
先入観で回答してしまいました。

例えば「Resize」を使ったりして、
元の範囲.Valueを先の範囲.Valueに代入する
というように使っています。

Application.CutCopyMode
を使っているという事は、コピー&ペーストを使っているという事ですね。

解消する方法としては、
1行ずつ「コピー&ペースト」を実行するなどの
繰り返し処理にしておき、
「DoEvents」を入れておくようにする方法もあると思います。

「コピー&ペースト」と「値の代入」
では、Excelがやらなければならない量が全然違います。
Excelが実行することは、
「値の代入」
 値の代入

「コピー&ペースト」
 値の代入
 上下左右斜め部分の罫線情報の代入
 文字フォント情報の代入
 文字サイズ情報の代入
 文字色情報の代入
 背景色情報の代入
 表示形式情報の代入
 ・
 ・
 ・
という様にコピー&ぺーストの場合、たくさんの情報を、
元の範囲から先の範囲に与えてあげなければなりません。

従って、私がよく使っているのは、
Resizeなどを利用して、一括で「値の代入だけ」をする。
という方法です。


ちなみに…
「操作できない。クリックしても反応がない。excel強制終了するしかない」
だけではフリーズしているとは限りません(本当にフリーズしているかもしれない)。

「そのうち慣れる」様の仰る通り、大量のデータを処理しているために、
ユーザーのクリックなどに応答している暇がないという事もあります。
(時間を置けば正常終了する)

例えば、
事務所に電話が3台ある
事務所に2人しかいない
2人とも現在電話中
3台目の電話が鳴る…
この時、2人はフリーズ(凍っている・固まっている)をしているのではなく、
電話対応はしているのですが、現在電話対応中なので、
3台目の電話に応答している暇がないとなります。
しかし、3台目に電話(クリックなどの操作)をしている人から見れば、
呼び出し音はしているのに電話に出ない、つまり「応答なし」となります。
そして、時間をおくことで、1台目の電話が終了すると、
3台目にかかってきた電話に応答することができるようになる。
という事であれば、事務所にいる人たちはフリーズしてないですよね。
これが「そのうち慣れる」様の
「フリーズではなく数十分ほっとけば戻ると思います」
の部分です。


1行ずつ「コピー&ペースト」や「値の代入」を実行するというのは、
一定時間(Loop処理1回)過ぎたときに、
3本目の電話が鳴っているかどうかを確認し(DoEvents)、
鳴っているようなら、現在電話中の相手を一時的に待たせておいて、
3台目の電話に出る(応答する)ようにしておく。
そうすると、3台目に電話(クリックなどの操作)をした人から見ても
電話に出てもらえるので、「応答なし」にはならない。。。

という感じのイメージです。

[返信 4] Re : vba実行後フリーズ
投稿者 : 広範囲のコピペをやっているからでは?     投稿日時 : 2025/09/17(Wed) 14:29:10
ええと

>広範囲のコピペをやっているからでは?

は、データ量が多すぎるという意味でとってもらった方がいいかも

[返信 5] Re : vba実行後フリーズ
投稿者 : そのうち慣れる     投稿日時 : 2025/09/17(Wed) 14:40:12
失礼
上は、「そのうち慣れる」です

[返信 6] Re : vba実行後フリーズ
投稿者 : 匿名     投稿日時 : 2025/09/18(Thu) 10:00:46
説明不足だったかもしれません。

>という様にコピー&ぺーストの場合、たくさんの情報を、
>元の範囲から先の範囲に与えてあげなければなりません。
「1つのセルに対して」という言葉不足でした。

少ない数のセルのコピー&ペーストであれば、
あまり影響ないかもしれませんが、
セルの数が多い(セル範囲が広い・データ量が多すぎる)場合、
セルの数×先の回答で上げた複数の情報の代入をすることになるので、
Excelがやらなければならない事が、ものすごく増えるという意味です。

なので、コピー&ペーストの1回の情報量を少なくして(1行ずつ分けて)、
DoEventsを入れていく、という方法もあると言う事を伝えたかったのです。

一気に大量の作業をExcelに与えれば、
その作業に一所懸命で、ほかの処理を受け付ける余裕がないので、
大量作業中は「応答なし」となる場合があるという事です。
※1つの作業に集中するという意味で「一所懸命」を使いました

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-10-11 05:49:38 )
タイトルとURLをコピーしました