本記事には広告(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は次のような流れで再現できます。
今回の再現では、以下のようなシンプルなユーザーフォームを使用します。

マクロボタンには以下のようなコードを設定しています。
Sub ShowForm400()
UserForm1.Show vbModal
End Sub
手順
- ユーザーフォームを表示する
- フォーム上のボタンをクリックする
- 同じフォームを再度表示しようとする
このとき、
▶「フォームは既に表示されているので、モーダル表示することはできません」
という内容のエラー400が発生します。

実務でフォームを使う場合は、表示状態のチェックを習慣づけておきましょう。
エラー400は他の原因でも発生することがある
エラー400は、ユーザーフォーム以外にも
- クイックアクセスツールバーからマクロを実行したとき
- 別ブックに保存されたマクロを呼び出したとき
- Excel起動時のマクロで問題が起きたとき
など、さまざまな場面で発生することがあります。
ただしこれらは、
▶ 必ずエラー400になるとは限らず、別のエラーになる場合もあります。
そのためこの記事では、
・ユーザーフォームによるエラー → 確実に再現できる代表例
・その他 → 確定ではないが、発生することがある例
として紹介します。
VBAエラー400の対処法と回避方法
まずはデバッグで止まる行を確認する
エラー400は、
原因が画面に表示されないため、デバッグがとても重要です。
エラーが出たときに「デバッグ」をクリックすると、
問題のあるコードの行が黄色で表示されます。
▶ この行が原因特定のヒントになります

初心者の方はまず、
- どの行で止まっているか
- 直前に何をしようとしているか
を確認することから始めましょう。
ユーザーフォームの再表示を見直す
エラー400で最も多く、かつ再現しやすい原因がこれです。
▶すでに表示されているフォームを再度表示している
例えば、以下のコード:
UserForm1.Show vbModal
このフォームがすでに開いている状態で、
同じコードを実行するとエラーになります。
対処方法
フォームが表示されているかを確認してから実行します。
If UserForm1.Visible = False Then
UserForm1.Show vbModal
End If

このように、処理を実行する前に状態を確認することで、エラーを未然に防ぐことができます。
HideとUnloadの違いを理解する
ユーザーフォームを扱うときに重要なのが、
HideとUnloadの違いです。
まずは違いを簡単に表で確認しておきましょう。
| 方法 | 動作 |
|---|---|
| Hide | 非表示にするだけ(フォームは残る ※入力内容も保持) |
| Unload | フォームを完全に閉じる ※閉じる前まで編集していた内容も消えてしまいます |
Hide は、フォームを一時的に見えなくする処理です。
フォーム自体は残るため、入力中の内容も保持されます。
一方、Unload はフォームを完全に閉じる処理です。
再度開いたときは、基本的に初期状態から始まります。
たとえば、入力フォームで作業中にシートの内容を確認したい場合は、Hide でいったんフォームを隠す方法が便利です。
UserForm1.Hide
隠したフォームは、あとで次のように再表示できます。
UserForm1.Show
一方、入力を終了してフォームを閉じたい場合や、
最初からやり直したい場合は Unload を使います。
Unload UserForm1
エラー400の対策では、
すでに表示中のフォームを再度開こうとしていないかを確認することが大切です。
クイックアクセスツールバーや別ブック実行時の注意点
エラー400は、フォーム以外にも
実行環境の違いによって発生することがあります。
例えば、
- クイックアクセスツールバーに登録したマクロ
- 別ブックに保存されたマクロ
- 個人用マクロブック(PERSONAL.XLSB)
このようなケースでは、
▶ マクロの保存先が開いていない状態で実行される
ことがあります。
その結果、
- マクロが正常に呼び出せない
- 内部処理が中断される
といった状況になり、エラー400が出ることがあります。

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

対処方法
- マクロが保存されているブックを事前に開く
- アドインや個人用マクロの状態を確認する
- ボタンやクイックアクセスツールバーからの実行もテストする
エラー400を防ぐための予防ポイント
最後に、エラー400を未然に防ぐためのポイントをまとめます。
① フォーム表示処理を1か所にまとめる
- あちこちで
Showを書かない - 呼び出し専用の処理を作る
② 同じフォームを二重に開かない設計にする
- Visibleチェックを入れる
- フラグ管理する
③ 実行環境を意識する
- ボタンやクイックアクセスツールバー(リボン上のショートカット)からの実行もテストする
- 別ブック参照は特に注意
④ エラー処理を入れておく
On Error GoTo ErrHandler
'処理
Exit Sub
ErrHandler:
MsgBox "エラーが発生しました:" & Err.Number
こうしておくことで、
▶ 原因の特定がしやすくなります

エラー処理については以下の記事で詳しく紹介しています。
VBAエラーに強くなりたい方へ(独学のおすすめ)
ここまでエラー400の原因と対処法を解説してきましたが、
実務では今回のようなエラー以外にも、
- 実行時エラー9
- エラー1004
- オブジェクト関連のエラー
など、さまざまなトラブルに遭遇します。
そのたびに調べて対応することもできますが、
基礎から体系的に理解しておくと、原因の特定が格段に早くなります。
「エラーの原因を自分で判断できるようになりたい」
「マクロをもっとスムーズに書けるようになりたい」
という方は、独学で一度しっかり学んでおくのもおすすめです。
▼ VBAの基礎からエラー対応までまとめて学びたい方はこちら
まとめ:VBAエラー400は「原因を切り分ける」が重要
VBAエラー400は「原因が表示されないエラー」の代表例です。
そのため最初は戸惑いやすいですが、
ポイントを押さえれば対応は難しくありません。
特に重要なのは、
▶「フォームの再表示」と「実行元の違い」
この2つを意識することです。
この視点を持つだけでも、原因の切り分けが一気にしやすくなります。
まずはデバッグで止まる行を確認しながら、
1つずつ原因を整理していきましょう。
FAQ:VBAエラー400に関するよくある質問
VBAエラー400は、マクロの実行中に問題が発生したときに表示されるエラーのひとつです。
ただし、他のエラーと違い「400」としか表示されないことが多く、原因が分かりにくいのが特徴です。
VBA内部で処理エラーが発生した場合でも、詳細なメッセージが表示されないケースがあり、その結果「400」のみ表示されることがあります。
そのため、デバッグ機能を使って原因を特定することが重要です。
代表的な原因は以下の通りです。
- 表示中のユーザーフォームを再度表示しようとした
- クイックアクセスツールバーからの実行時の不整合
- 別ブックのマクロを呼び出した際の状態不一致
特に「ユーザーフォームの二重表示」は、公式にも確認されている原因です。
頻繁に出るエラーではありませんが、
- フォームを使ったマクロ
- 複数のブックをまたぐ処理
を扱う場合には発生することがあります。
以下のポイントを意識することで防ぐことができます。
- フォームを二重に表示しない
- マクロの実行環境(ブック・アドイン)を確認する
- エラー処理(On Error)を設定する
【関連記事】
- VBAの実行時エラーとは?原因と対処法まとめ|よくあるエラー一覧も解説
- VBA 実行時エラー9の原因と直し方|「インデックスが有効範囲にありません」を初心者向けに解説
- Excel VBAのエラー処理とは?On Errorの使い方とエラーハンドリングの基本を解説
※外部リンク※
※参考書籍 (PR)※
※本ボックスにはアフィリエイトリンク(PR)が含まれます。
くわしくは プライバシーポリシー へ。
