Softex CelwareTech Blog
Excel VBA2026-06-01

エラー回避コードのひな形を生成するExcel VBA汎用プロシージャ MCCErrorEscape

イミディエイトウィンドウからMCCErrorEscapeを実行し、エラー回避用テンプレートをクリップボードへ生成してコードウィンドウへ戻るVBA開発補助プロシージャを解説します。

Excel VBA汎用プロシージャエラー処理イミディエイトウィンドウクリップボード

概要

MCCErrorEscapeは、Excel VBAの開発中に、エラーが起きそうな処理を囲むためのOn Error GoToテンプレートをすぐ作れるようにする汎用プロシージャです。

イミディエイトウィンドウMCCErrorEscapeを実行すると、エラー回避用のコードを生成し、クリップボードへ格納します。その後、コードウィンドウへ戻るため、任意の位置に貼り付けて、保護したい処理をテンプレート内へ移動できます。

本格的なログ基盤を作る前の段階で、「ここはエラーが出ても処理全体を止めたくない」「エラー内容だけイミディエイトウィンドウへ出しておきたい」という場面に向いた開発補助コードです。

使う場面

  • ファイル操作、外部ブック操作、図形操作など、実行環境によって失敗しやすい処理を一時的に囲みたい
  • 毎回On Error GoTo、エラーラベル、終了ラベルを手入力する手間を減らしたい
  • 開発中に発生したエラー内容をDebug.Printで確認したい
  • VBE上で、定型的なエラー処理テンプレートをすぐ貼り付けたい

処理イメージ図

MCCErrorEscapeでエラー回避コードのテンプレートを生成して貼り付ける流れ
イミディエイトウィンドウで実行し、生成されたテンプレートをコードウィンドウへ貼り付け、エラーを回避したい処理を内側へ移動します。

操作デモ

実際の操作では、イミディエイトウィンドウでMCCErrorEscapeを実行し、戻ってきたコードウィンドウ上で貼り付けます。

プロシージャの構成

今回のパッケージは、トップのMCCErrorEscapeから補助処理を呼び出す構成です。

MCCErrorEscape
├─ ClipText
└─ ShowCodeWindowDelay
   └─ ShowCodeWindow

ClipTextは生成した文字列をクリップボードへ入れます。ShowCodeWindowDelayApplication.OnTimeShowCodeWindowを呼び、イミディエイトウィンドウで実行したあとにコードウィンドウへ戻しやすくします。

使用例

標準モジュールへ実装コードを入れたあと、VBEのイミディエイトウィンドウで次のように実行します。

MCCErrorEscape

生成されるテンプレートは次のような形です。

    On Error GoTo ErrorEscape

    GoTo ErrorEscapeEnd

ErrorEscape:
    ''エラーが生じたらエラーメッセージをイミディエイトウィンドウに表示
    If Err.Description <> "" Then
        Debug.Print Err.Description, Now()
    End If
ErrorEscapeEnd:

貼り付けたあと、エラーを回避したい処理をOn Error GoTo ErrorEscapeGoTo ErrorEscapeEndの間へ移動します。

Private Sub Sample()

    On Error GoTo ErrorEscape

    '何かしらエラーが起きそうな処理 開始
    'ここにファイル操作、図形操作、外部ブック操作などを置く
    '何かしらエラーが起きそうな処理 終了

    GoTo ErrorEscapeEnd

ErrorEscape:
    ''エラーが生じたらエラーメッセージをイミディエイトウィンドウに表示
    If Err.Description <> "" Then
        Debug.Print Err.Description, Now()
    End If
ErrorEscapeEnd:

End Sub

サンプルブック

動作確認用のマクロ有効ブックも用意しています。

MCCErrorEscapeサンプルブックをダウンロード

.xlsm形式のため、Excelで開くときはマクロの有効化、保護ビュー、ダウンロードファイルのブロック解除を確認してください。

コピー可能な実装コード

下のコードは、MCCErrorEscapeClipTextShowCodeWindowDelayShowCodeWindowを1つにまとめた貼り付け用パッケージです。

MCCErrorEscape.bas
vba
コードを読み込み中...

初心者向けコード解説

MCCErrorEscapeの中心は、Str = Str & ...でテンプレート文字列を1行ずつ組み立てる部分です。vbLfで改行を入れ、最終的に貼り付けやすいVBAコードのまとまりにしています。

On Error GoTo ErrorEscapeは、実行中にエラーが発生したときにErrorEscape:ラベルへ移動する指定です。一方で、通常終了時にそのままエラー処理部分へ流れ込まないように、途中にGoTo ErrorEscapeEndを入れています。

ErrorEscape:内では、Err.Descriptionが空でない場合だけDebug.Printでエラー内容と時刻を出します。メッセージボックスを出さないため、開発中に何度も試す処理でも邪魔になりにくい構成です。

ClipText(Str)は、生成したテンプレートをクリップボードへコピーします。内部ではMSFormsForms.TextBox.1を一時的に作り、文字列を選択して.Copyしています。

ShowCodeWindowDelayは、すぐにShowCodeWindowを呼ばず、Application.OnTimeで少しタイミングをずらして実行します。イミディエイトウィンドウから起動した直後に画面フォーカスを戻す処理はタイミングの影響を受けやすいため、このように分けています。

ShowCodeWindowではVBIDEApplication.VBE.Windowsを調べ、最大化されているコードウィンドウを見つけてSetFocusします。これにより、生成コードを貼り付ける場所へ戻りやすくなります。

注意点

  • このプロシージャは開発者向けの補助マクロです。業務ロジックそのもののエラー設計を完全に代替するものではありません。
  • クリップボードを使うため、実行直前にコピーしていた内容は上書きされます。
  • ShowCodeWindowApplication.VBE.Windowsvbext_wt_CodeWindowvbext_ws_Maximizeを使います。コンパイルエラーになる場合は、VBEの「ツール」→「参照設定」でMicrosoft Visual Basic for Applications Extensibility 5.3を確認してください。
  • 環境によっては、Excelのトラストセンターで「VBAプロジェクト オブジェクト モデルへのアクセスを信頼する」の確認が必要になることがあります。
  • Forms.TextBox.1を使ってクリップボードへコピーするため、環境によってはMSForms関連の利用可否も確認してください。
  • On Error GoTo ErrorEscapeで囲む範囲は広げすぎない方が安全です。原因を追いたい処理までまとめて隠してしまうと、デバッグしづらくなります。

関連記事

軽いまとめ

MCCErrorEscapeは、エラー回避用テンプレートを毎回手入力せず、イミディエイトウィンドウから一発で生成して貼り付けるための小さな開発補助プロシージャです。

汎用プロシージャとして残しておくと、VBA開発中に「この処理だけ一時的に逃がしたい」「エラー内容だけ確認したい」という場面で、素早く同じ形のエラー処理を挿入できます。

この技術で業務改善しませんか?

Excel VBA・GAS・Webアプリで業務の自動化ツールを開発しています。 「こんなことできる?」というご相談だけでもお気軽にどうぞ。

無料相談はこちら →