【ExcelVBA入門】処理が固まってしまった場合に強制終了する方法とは

こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。

皆さんは、VBAで処理を実行したときに、処理が止まらず困ってしまった経験はありませんか?

ちょっとしたミスでExcelが固まってしまい、最悪の場合途中まで書いていたコードが消えてしまうこともあります。

そのため、強制終了方法を覚えておくのがおすすめです!

そこで今回は、

・Excelが固まってしまう原因

・VBAの処理を強制終了する方法

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

・処理が止まらない場合の対応方法

・処理を強制終了したときにデータが消えるのをふせぐ方法

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

処理が固まってしまう原因とは

VBAでは、重たい処理をループ処理してしまったり、ループ処理の終了条件をミスして無限ループにしてしまうと処理が固まってしまいます。

普通の処理では、リセットボタンを押すことで処理を止めることができます。

リセットボタン:

ただ、先ほど説明した重たい処理のループ処理、無限ループではリセットボタンを押しても処理が止まりません。

処理が重たくて固まってしまうサンプルコード:

Sub Test()
  Dim i As Long
  Dim j As Long
  
  For i = 1 To 50000
    For j = 1 To 50000
      Cells(i, j).Select
      Selection.Copy
    Next j
  Next i
End Sub

このサンプルはFor文For文を入れたループ回数の多い処理の中に、セル選択・コピー処理を入れて重たい処理を書いているため、Excelが固まってしまいます。

このように重たい処理で固まってしまった場合は、処理を強制終了する必要があります。

処理が固まってしまった場合の強制終了方法とは

VBAで処理を強制終了する方法は、大きく分けて3つです。

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

それぞれ詳しく解説しますね。

EscまたはCtrl + Breakキーで処理を強制終了する

まずは、一番お手軽な強制終了方法です。

Escキーまたは、Ctrl + Breakキーを押すと、VBAの処理を強制終了することができます。

今まで書いたコードを残しつつ処理を途中で止めることができるので、この方法が一番おすすめです。

Excelの警告メッセージからファイルを閉じる

ただ、Breakキーがキーボードにない場合や、この方法では処理が止まらないケースもあります。

そんなときは、Excelが固まった時に出てくる以下警告メッセージから、「→プログラムを終了します」を選択して、ファイルを閉じます。

ただ、ファイルを強制的に閉じるので、途中まで書いたコードがなくなってしまう場合があります。

そのため、重たい処理の場合は少し待ってみて、処理が終わらない場合のみこの方法を使うのがおすすめです!

タスクマネージャから直接ファイルを閉じる

先ほどの警告メッセージがなかなか出てこないケースもよくあります。

そのため、最終手段としてタスクマネージャからファイルを閉じる方法を知っておくと便利です。

タスクマネージャからファイルを閉じる手順は、以下の通りです。

1. タスクバーの空いているところを右クリックし、メニューからタスクマネージャを選択

2. 使用中のExcelファイルを選択し、タスクの終了ボタンをクリック

これで強制的にファイルを閉じることができます。

この方法も警告メッセージから表示する場合と同じく、途中まで書いたコードが保存されずに消えてしまう可能性があります。

そのため、重たい処理の場合は少し待ってみて、処理が終わらない場合のみこの方法を使うのがおすすめです!

途中まで書いたコードが消えるのを防ぐ方法

ここまで強制終了する方法について解説してきましたが、3つの方法のうち2つの方法が途中まで書いたコードが消える可能性がありましたよね。

EscキーCtrl + Breakキーで止まらなかった時、書いたコードが消えてしまうのはかなり厳しいはず、、、

そんな方向けに、途中まで書いたコードが消えるのを防ぐ方法について、ご紹介します!

処理の先頭に名前を付けて保存するコードを入れておく

1つ目は、ファイルを別名で保存しておく方法です。

処理の先頭にファイルを保存するためのコードを入れておくことで、処理が固まってしまった場合でも保存したファイルから開発を続けることができます。

ファイルを名前を付けて保存する場合は、SaveAsメソッドを使います。

SaveAsメソッドを使ったサンプルコードは以下の通りです。

サンプルコード:

Sub TestSave1()
  'ファイル名作成
  Dim strFileName As String
  strFileName = " 開発ファイル_" & Format(Now, "yyyymmddhhmmssms") & ".xlsm"
  
  'ファイルパス指定
  Dim strFilePath As String
  strFilePath = ThisWorkbook.Path & "\" & strFileName
  
  'ファイル保存
  ThisWorkbook.SaveAs Filename:=strFilePath, _
                      FileFormat:=xlOpenXMLWorkbookMacroEnabled
                      
  'メインの処理------------------
  '
  '
  '
  '
  '
  '
  '
  '------------------------------
 
End Sub

マクロを実行しているファイルと同じフォルダに、「開発ファイル_ + 年月日時分秒ミリ秒.xlsm」でファイルを保存するサンプルです。

ファイル名に年月日時分秒ミリ秒まで入れている理由は、同じファイル名のファイルが作成されてエラーになるのをふせぐためです。

Format(Now, "yyyymmddhhmmssms")」とすることで、年月日時分秒ミリ秒を簡単に取得することができます。

また、「ThisWorkbook.Path」でマクロを実行しているファイルのフォルダパスを取得することができるので、ファイル名とつなげてファイルパスを指定しています。

処理を実行するたびにファイルができてしまうため容量は重くなってしまいますが、書いたコードが消える手間を考えると入れておいて損はないですよね。

DoEvents関数を使ってリセットボタンを押せるようにする

ただ、最後に説明した通りファイルを保存する処理を入れると実行するたびにファイルができてしまうため、フォルダの容量圧迫してしまいますよね。

そんな時におすすめなのが、DoEvents関数です。

ループ処理中でもOSに処理をわたすことができるので、リセットボタンを押して処理を止めることができるようになります。

例えば、次のようにループ処理の中でDoEvents関数を入れる場合は、次のように書きます。

サンプルコード:

Sub Test()
  Dim i As Long
  Dim j As Long
  
  For i = 1 To 50000
    For j = 1 To 50000
      DoEvents
      Cells(i, j).Select
      Selection.Copy
    Next j
  Next i
End Sub

この処理を実行するとExcelが固まってしまうのですが、リセットボタンを押すと処理を止めることができます。

DoEvents関数を入れておくだけで済むので、For文While文などのループ処理を書くときにDoEvents関数を入れる癖をつけておくと、開発時にExcelが固まって書いたコードが消えるのをふせぐことができるのでおすすめです!

SaveAsメソッドの使い方DoEvents関数の使い方については以下で詳しく解説しているので、気になる方は見てみてくださいね!

【ExcelVBA入門】SaveAsメソッドを使ったファイル保存方法を徹底解説!
更新日 : 2019年4月2日
【ExcelVBA入門】DoEventsを使って処理を途中で止める方法を徹底解説!
更新日 : 2019年4月16日

まとめ

今回は、VBAで処理が固まってしまったときの強制終了方法について解説しました。

せっかく書いていたコードが、ちょっとしたミスで消えてしまうのはとても悲しいですよね。

今回解説した強制終了する方法コードが消えるのをふせぐ方法を覚えておくだけで消えるリスクを減らすことができます。

どれも使い方は簡単なので、ぜひ使ってみてくださいね!

LINEで送る
Pocket

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

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

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

おすすめコンテンツ

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

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