Wakizaka2018/11/302018/12/4皆さんは、VBAでループ処理を作るとき、無限ループになってしまったことがありますか?無限ループになってしまうと、メモリを使いきってExcelが途中で強制終了してデータが消えてしまったり、パソコン自体の操作が遅くなってしまったり、パソコンが固まるときもあります。まとめVBAで無限ループが起こる原因とは?まずは、無限ループが起こる原因について解説します。WhileステートメントでにFalseにならない条件を指定してしまったときに、無限ループが起こります。以下のようなケースです。While文でiが0よりも大きい時に、処理をループするループ処理です。1」をしてしまっているため、常にループが止まらず無限ループを意図的に起こしています。こちらは極端な例ですが、条件を満たすケースがない条件を入れてしまい、無限ループになるケースはよくあります。無限ループになってしまうと、Excelを強制終了するしかないケースが多く、それまで作ったVBAのコードが消えてしまう場合や、Excelのシートで操作した内容もすべて消えてしまう可能性があります。したミスでそれまでの時間が無駄になってしまうときもあるため、無限ループを起こさないような作りを意識しないといけません。いえ、対処方法がわからなければ、無限ループが起こった時に困ってしまいますよね。そのため、簡単に対処方法を解説します!VBAで無限ループが起こった時の対処方法それでは、無限ループの対処方法について解説します。対処方法は、大きく分けて以下の3パターンです。Breakキーを押して処理を強制終了することです。ループ処理が動いてすぐのときは、メモリもそこまで使っていないため、この方法で処理を止めることができます。上記方法で止まらない場合は、途中で出てくる警告メッセージで止めるか、タスクマネージャから直接Excelのアプリを強制終了するかのどちらかになってしまいます。この場合、Excelファイルが強制終了してしまうため、途中まで作業したデータが残らなくなってしまいます。2018年8月29日VBAで無限ループを起こさないための予防策とは?ここまで無限ループが起こる原因・起きたときの簡単な対処方法を解説してきました。無限ループがおきなければ、そもそも意識しなくてもいいですよね。そのため、無限ループを起こさないための予防策を入れながら、開発する癖をつけるのがおすすめです!予防策1:ループ処理のループ回数上限を事前に設定するたとえば、Whileステートメントは無限ループが起こる可能性があるため、以下のようにif文で必ず上限値を決めておくことで、無限ループを回避することができます。0」のような無限ループを起こす条件でも、以下コードを入れていることにより、100回以降は強制的に処理を終了するようにしています。DoEvents関数を使うただ、条件式によっては上限値を決めるのが難しいケースもありますよね?そんなときは、処理テスト用のユーザーフォーム(画面)を作り、実行ボタンとキャンセルボタンを用意するのがおすすめです!画面例:上記のような画面の「実行ボタン」を推したときにループ処理を動くようにしてテストし、キャンセルボタンを押したときにDoEvents関数を使ってループ処理中でも必ず処理を終了させる処理を作ることで、強制的に処理を止めることができます。無限ループについて理解が深まれば、途中でデータが消えたり作業を止めることなく開発を進めることができます。した意識と対策だけで解決できるので、ぜひ意識してみてくださいね!TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。Wakizaka新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。インフラ、製造、テスト、運用保守など、様々な経験あり。侍ブログ編集部として、これまでに200記事以上の記事を執筆。現在はフリーランスエンジニア兼テックライターとして活動中。