スライドショー

【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

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。
Webアプリ、業務アプリ開発において、要件定義、設計、インフラ、製造、テスト、運用保守など、様々な経験あり。
また、侍ブログ編集部として、これまでに200記事以上の記事を執筆。
現在はフリーランスエンジニア兼テックライターとして活動中。