【ExcelVBA】無限ループが起こる原因・対処方法・回避策を徹底解説!!

皆さんは、VBAでループ処理を作るとき、無限ループになってしまったことがありますか?

無限ループになってしまうと、メモリを使いきってExcelが途中で強制終了してデータが消えてしまったり、パソコン自体の操作が遅くなってしまったり、パソコンが固まるときもあります。

そのため、可能な限り無限ループが起こる原因・対策・予防策を知っておくのがおすすめです!

そこで今回は、

・VBAで無限ループが起こる原因とは?

といった基礎的なことから、

・無限ループが起きたときのシンプルな対処方法

・無限ループを起こさないための予防策

といった応用的な方法まで、徹底的に解説します!

VBAで無限ループが起こる原因とは?

まずは、無限ループが起こる原因について解説します。

WhileステートメントにFalseにならない条件を指定してしまったときに、無限ループが起こります。

たとえば、以下のようなケースです。

サンプルコード:

Do While文iが0よりも大きい時に、処理をループするループ処理です。

その中で、「i = i + 1」をしてしまっているため、常にループが止まらず無限ループを意図的に起こしています。

こちらは極端な例ですが、条件を満たすケースがない条件を入れてしまい、無限ループになるケースはよくあります。

無限ループになってしまうと、Excelを強制終了するしかないケースが多く、それまで作ったVBAのコードが消えてしまう場合や、Excelのシートで操作した内容もすべて消えてしまう可能性があります。

ちょっとしたミスでそれまでの時間が無駄になってしまうときもあるため、無限ループを起こさないような作りを意識しないといけません。

とはいえ、対処方法がわからなければ、無限ループが起こった時に困ってしまいますよね。

そのため、簡単に対処方法を解説します!

VBAで無限ループが起こった時の対処方法

それでは、無限ループの対処方法について解説します。

対処方法は、大きく分けて以下の3パターンです。


・EscまたはCtrl + Breakキーで処理を強制終了する
・Excelの警告メッセージからファイルを閉じる
・タスクマネージャから直接ファイルを閉じる

いちばん簡単なのが、Escキーまたは、Ctrl + Breakキーを押して処理を強制終了することです。

ループ処理が動いてすぐのときは、メモリもそこまで使っていないため、この方法で処理を止めることができます。

ただ、上記方法で止まらない場合は、途中で出てくる警告メッセージで止めるか、タスクマネージャから直接Excelのアプリを強制終了するかのどちらかになってしまいます。

ただ、この場合、Excelファイルが強制終了してしまうため、途中まで作業したデータが残らなくなってしまいます。

強制終了とExcelのデータを残す方法については以下記事で詳しくまとめているので、詳細を知りたい方は見てみてくださいね!

【ExcelVBA入門】処理が固まってしまった場合に強制終了する方法とは
更新日 : 2018年8月29日

VBAで無限ループを起こさないための予防策とは?

ここまで無限ループが起こる原因・起きたときの簡単な対処方法を解説してきました。

ただ、無限ループがおきなければ、そもそも意識しなくてもいいですよね。

そのため、無限ループを起こさないための予防策を入れながら、開発する癖をつけるのがおすすめです!

予防策1:ループ処理のループ回数上限を事前に設定する

たとえば、Whileステートメント無限ループが起こる可能性があるため、以下のようにif文で必ず上限値を決めておくことで、無限ループを回避することができます。

予防策を入れたコード:

この例では、「Do While i > 0」のような無限ループを起こす条件でも、以下コードを入れていることにより、100回以降は強制的に処理を終了するようにしています。

このように、条件式とは別に上限値を決めておくのがおすすめです!

予防策2:キャンセルボタン + DoEvents関数を使う

ただ、条件式によっては上限値を決めるのが難しいケースもありますよね?

そんなときは、処理テスト用のユーザーフォーム(画面)を作り、実行ボタンキャンセルボタンを用意するのがおすすめです!

画面例:

上記のような画面の「実行ボタン」を推したときにループ処理を動くようにしてテストし、キャンセルボタンを押したときにDoEvents関数を使ってループ処理中でも必ず処理を終了させる処理を作ることで、強制的に処理を止めることができます。

ユーザーフォームの作り方・DoEvents関数を使ったキャンセル処理の作り方については、以下記事で詳しく解説しているので、気になる方はみてみてくださいね!


【ExcelVBA入門】DoEventsを使って処理を途中で止める方法を徹底解説!
更新日 : 2019年4月16日

まとめ

今回は、VBAで無限ループが起こる原因・対処方法・予防策について解説しました。

無限ループについて理解が深まれば、途中でデータが消えたり作業を止めることなく開発を進めることができます。

ちょっとした意識と対策だけで解決できるので、ぜひ意識してみてくださいね!

Excel VBAを最短で習得したい方へ

元々ITリテラシーの高い方やプログラムの学び方がわかっている方であれば、この記事通りに進めていけば、Excel VBAを独学で習得することができるでしょう。

ただし、実際の学習期間中はつまづいている時間がほとんどです。

「なかなかやり遂げられ無い、挫折してしまった」
「時間が足りない」
「情報が少なくどう調べればいいかわからない」
「エラーを解決することができない」

このような悩みを抱えている方も少なく無いと思います。

  • もう挫折したくない
  • 本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい
  • 自分だけのカリキュラムで効率的に勉強したい
そんな方はお気軽に侍エンジニア塾までご相談ください。

お一人お一人に専属のインストラクターがつくので、より深くExcel VBAについて学習することできます。

まずは『無料体験レッスン』で、弊社のコンサルタントと一緒にあなた専用の学習方やカリキュラムを考えてみませんか?

Excel VBAならではの学習方法や、現役エンジニアから貴重なアドバイスを受けることができます。

詳しくは下の画像をクリックして弊社サービス内容をご確認ください。

cta2_vba2

LINEで送る
Pocket

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

フリーランスエンジニア兼ライターのワキザカ サンシロウです。
ExcelVBAの自動化ツール開発、WEB開発をメインにエンジニア業務をこなしつつ、サムライエンジニアにてライター業務をしております。

プログラミングをこれからやってみたい方に向けて、ためになる記事を全力で書いていきますので宜しくお願い致します!

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説