Excel VBAでエラー400が発生する原因と対処法|マクロ初心者でもわかる解決手順

Excel VBAでエラー400が発生する原因と対処法|マクロ初心者でもわかる解決手順

本記事には広告(PR)が含まれます。
くわしくは プライバシーポリシー をご確認ください。


Excelでマクロを実行したときに、

「Microsoft Visual Basic 400」

とだけ表示されて困ったことはありませんか?

VBAエラー400は「原因が表示されないエラー」の代表例です。

エラー番号だけが表示され、原因の説明がほとんど出ないため、

  • 何が原因なのかわからない
  • どこを直せばいいのかわからない
  • 他のエラー(9や1004)との違いも不明

といった状況になりやすいのが、このエラー400の特徴です。

このエラーは、
原因が1つに決まっているわけではなく、状況によって発生するケースが異なります。

ただし、その中でも
よくある原因や再現しやすいパターンは存在します。

この記事では、

  • VBAエラー400とは何か(意味と特徴)
  • 実際に発生する代表的な原因
  • 再現できるサンプルと具体例
  • 初心者でもできる対処法

を、マクロ初心者の方にもわかりやすく解説します。


VBAエラー400とは?意味と発生する仕組み

VBAエラー400とはどんなエラー?

VBAエラー400は、
マクロの実行中に問題が発生したときに表示されるエラーのひとつです。

ただし、他のエラーとは大きく違う特徴があります。

それは、

エラー内容がほとんど表示されないこと

です。

例えば、よくあるエラーでは

  • 実行時エラー ‘9’:インデックスが有効範囲にありません
  • 実行時エラー ‘1004’:アプリケーション定義またはオブジェクト定義のエラー

のように、原因のヒントが表示されます。

しかしエラー400の場合は、

▶「400」だけ表示されることがある

ため、原因の特定が非常に難しくなります。


VBAエラー400の特徴

主な特徴は次の通りです。

  • エラーメッセージが簡素(「400」のみ)
  • 原因が画面から判断しにくい
  • 発生条件が複数あり特定しづらい
  • 環境や操作方法によって発生することがある

つまり、

▶原因が画面から判断しにくいことが多いエラー

というのが、このエラーの一番の厄介なポイントです。


VBAエラー400の意味とは?

VBAエラー400は、一言でいうと

▶ 「処理はしようとしたけど、実行できない状態だった」エラー

です。

例えば、

  • すでに表示されているフォームをもう一度開こうとした
  • 必要なマクロブックが開いていない状態で実行しようとした
  • セキュリティ設定でマクロが実行できなかった

といったように、

「実行しようとしたけど、環境や状態が整っていなかった」

ときに発生することがあります。

少しイメージすると、

「もう開いていますよ」
「その処理は今できません」

と、Excelが言いづらそうに伝えているようなエラーです。

ただし、その内容ははっきり表示されません。

そのため、何が原因なのかは自分で確認する必要があります。

一見すると分かりにくいエラーですが、
実はよくある代表的な原因も存在します。


実は公式で確認できる代表的な原因がある

「原因が不明」と言われがちなエラー400ですが、
実はMicrosoftの情報として、明確に定義されているケースもあります。

それが、

▶すでに表示されているユーザーフォームを、もう一度モーダル表示しようとしたとき

です。

例えば、以下のようなコードです。

UserForm1.Show vbModal

このフォームがすでに表示されている状態で、
再び同じフォームを表示しようとすると、

▶実行時エラー400が発生します

まずは実際にエラーがどのように発生するのかを見てみましょう。

ここでは、代表的な原因である「ユーザーフォームの再表示」を使って再現します。


実際にエラー400が発生する例

実際に、エラー400は次のような流れで再現できます。

今回の再現では、以下のようなシンプルなユーザーフォームを使用します。

VBA UserFormとCommandButtonの配置画面 エラー400再現用フォーム
このようなシンプルな構成でも、エラー400は発生します。

マクロボタンには以下のようなコードを設定しています。

Sub ShowForm400()
 UserForm1.Show vbModal
End Sub

手順

  1. ユーザーフォームを表示する
  2. フォーム上のボタンをクリックする
  3. 同じフォームを再度表示しようとする

このとき、

▶「フォームは既に表示されているので、モーダル表示することはできません」

という内容のエラー400が発生します。

VBA 実行時エラー400 フォームは既に表示されています の画面
すでに表示中のユーザーフォームを再度表示しようとすると、エラー400が発生します
特にユーザーフォームを扱うマクロでは、このエラーが発生しやすいため注意が必要です。
実務でフォームを使う場合は、表示状態のチェックを習慣づけておきましょう。

エラー400は他の原因でも発生することがある

エラー400は、ユーザーフォーム以外にも

  • クイックアクセスツールバーからマクロを実行したとき
  • 別ブックに保存されたマクロを呼び出したとき
  • Excel起動時のマクロで問題が起きたとき

など、さまざまな場面で発生することがあります。

ただしこれらは、

必ずエラー400になるとは限らず、別のエラーになる場合もあります。

そのためこの記事では、

・ユーザーフォームによるエラー → 確実に再現できる代表例
・その他 → 確定ではないが、発生することがある例

として紹介します。


VBAエラー400の対処法と回避方法

まずはデバッグで止まる行を確認する

エラー400は、
原因が画面に表示されないため、デバッグがとても重要です。

エラーが出たときに「デバッグ」をクリックすると、
問題のあるコードの行が黄色で表示されます。

▶ この行が原因特定のヒントになります

VBA エラー400発生時にデバッグで該当行が黄色表示される画面
デバッグをクリックすると、エラーが発生した行が黄色で表示されます

初心者の方はまず、

  • どの行で止まっているか
  • 直前に何をしようとしているか

を確認することから始めましょう。


ユーザーフォームの再表示を見直す

エラー400で最も多く、かつ再現しやすい原因がこれです。

すでに表示されているフォームを再度表示している

例えば、以下のコード:

UserForm1.Show vbModal

このフォームがすでに開いている状態で、
同じコードを実行するとエラーになります。

対処方法

フォームが表示されているかを確認してから実行します。

If UserForm1.Visible = False Then
 UserForm1.Show vbModal
End If
VBA UserFormの表示状態をIf文で確認してエラー400を防ぐコード例
UserFormの表示状態を確認してから実行することで、二重表示によるエラー400を防ぐことができます

このように、処理を実行する前に状態を確認することで、エラーを未然に防ぐことができます。

エラー400は「発生してから対応する」よりも、「事前に防ぐ」ことが重要です。

HideとUnloadの違いを理解する

ユーザーフォームを扱うときに重要なのが、
HideとUnloadの違いです。

まずは違いを簡単に表で確認しておきましょう。

方法 動作
Hide 非表示にするだけ(フォームは残る ※入力内容も保持)
Unload フォームを完全に閉じる ※閉じる前まで編集していた内容も消えてしまいます

Hide は、フォームを一時的に見えなくする処理です。
フォーム自体は残るため、入力中の内容も保持されます。

一方、Unload はフォームを完全に閉じる処理です。
再度開いたときは、基本的に初期状態から始まります。

たとえば、入力フォームで作業中にシートの内容を確認したい場合は、
Hide でいったんフォームを隠す方法が便利です。

UserForm1.Hide

隠したフォームは、あとで次のように再表示できます。

UserForm1.Show

一方、入力を終了してフォームを閉じたい場合や、
最初からやり直したい場合は Unload を使います。

Unload UserForm1

エラー400の対策では、
すでに表示中のフォームを再度開こうとしていないかを確認することが大切です。


クイックアクセスツールバーや別ブック実行時の注意点

エラー400は、フォーム以外にも
実行環境の違いによって発生することがあります。

例えば、

  • クイックアクセスツールバーに登録したマクロ
  • 別ブックに保存されたマクロ
  • 個人用マクロブック(PERSONAL.XLSB)

このようなケースでは、

▶ マクロの保存先が開いていない状態で実行される

ことがあります。

その結果、

  • マクロが正常に呼び出せない
  • 内部処理が中断される

といった状況になり、エラー400が出ることがあります。

Excel セキュリティ警告 リンクの自動更新が無効にされた画面
外部リンクやマクロの状態によっては、このようなセキュリティ警告が表示されることがあります

この画面で「無効にする」や「×」を選択すると、マクロが実行されずエラーが発生する場合があります

Excel マクロ実行時に400エラーが表示される画面 クイックアクセスツールバー実行例
マクロの実行環境によっては、エラー400が表示されることがあります

対処方法

  • マクロが保存されているブックを事前に開く
  • アドインや個人用マクロの状態を確認する
  • ボタンやクイックアクセスツールバーからの実行もテストする

エラー400を防ぐための予防ポイント

最後に、エラー400を未然に防ぐためのポイントをまとめます。

① フォーム表示処理を1か所にまとめる

  • あちこちで Show を書かない
  • 呼び出し専用の処理を作る

② 同じフォームを二重に開かない設計にする

  • Visibleチェックを入れる
  • フラグ管理する

③ 実行環境を意識する

  • ボタンやクイックアクセスツールバー(リボン上のショートカット)からの実行もテストする
  • 別ブック参照は特に注意

④ エラー処理を入れておく

On Error GoTo ErrHandler

 '処理

Exit Sub

ErrHandler:
 MsgBox "エラーが発生しました:" & Err.Number

こうしておくことで、

▶ 原因の特定がしやすくなります

VBA On Errorを使ったエラー処理で400エラーを表示する例
エラー処理を設定しておくと、発生したエラー番号を確認できます

エラー処理については以下の記事で詳しく紹介しています。


VBAエラーに強くなりたい方へ(独学のおすすめ)

ここまでエラー400の原因と対処法を解説してきましたが、

実務では今回のようなエラー以外にも、

  • 実行時エラー9
  • エラー1004
  • オブジェクト関連のエラー

など、さまざまなトラブルに遭遇します。

そのたびに調べて対応することもできますが、
基礎から体系的に理解しておくと、原因の特定が格段に早くなります。

「エラーの原因を自分で判断できるようになりたい」
「マクロをもっとスムーズに書けるようになりたい」

という方は、独学で一度しっかり学んでおくのもおすすめです。

▼ VBAの基礎からエラー対応までまとめて学びたい方はこちら

VBAを独学で学ぶには?初心者でもわかるマクロの勉強手順とおすすめ教材


まとめ:VBAエラー400は「原因を切り分ける」が重要

VBAエラー400は「原因が表示されないエラー」の代表例です。

そのため最初は戸惑いやすいですが、
ポイントを押さえれば対応は難しくありません。

特に重要なのは、

「フォームの再表示」と「実行元の違い」

この2つを意識することです。

この視点を持つだけでも、原因の切り分けが一気にしやすくなります。

まずはデバッグで止まる行を確認しながら、
1つずつ原因を整理していきましょう。


FAQ:VBAエラー400に関するよくある質問

VBAエラー400とは何ですか?

VBAエラー400は、マクロの実行中に問題が発生したときに表示されるエラーのひとつです。
ただし、他のエラーと違い「400」としか表示されないことが多く、原因が分かりにくいのが特徴です。


VBAエラー400はなぜ原因が表示されないのですか?

VBA内部で処理エラーが発生した場合でも、詳細なメッセージが表示されないケースがあり、その結果「400」のみ表示されることがあります。
そのため、デバッグ機能を使って原因を特定することが重要です。


VBAエラー400がよく出る原因は何ですか?

代表的な原因は以下の通りです。

  • 表示中のユーザーフォームを再度表示しようとした
  • クイックアクセスツールバーからの実行時の不整合
  • 別ブックのマクロを呼び出した際の状態不一致

特に「ユーザーフォームの二重表示」は、公式にも確認されている原因です。


VBAエラー400は初心者でもよく発生しますか?

頻繁に出るエラーではありませんが、

  • フォームを使ったマクロ
  • 複数のブックをまたぐ処理

を扱う場合には発生することがあります。


VBAエラー400を防ぐ方法はありますか?

以下のポイントを意識することで防ぐことができます。

  • フォームを二重に表示しない
  • マクロの実行環境(ブック・アドイン)を確認する
  • エラー処理(On Error)を設定する

【関連記事】

※外部リンク※

※参考書籍 (PR)

※本ボックスにはアフィリエイトリンク(PR)が含まれます。
くわしくは プライバシーポリシー へ。

Excel VBAでエラー400が発生する原因と対処法|マクロ初心者でもわかる解決手順
最新情報をチェックしよう!