GASで「ReferenceError: MsgBox is not defined」エラーが発生する原因と解決策
最終更新日: 2026-08-27
30秒でわかる原因と解決策
原因: Excel VBAなどで使用される
MsgBox関数を、JavaScript(Google Apps Script)の環境でそのまま呼び出そうとしたため、「未定義の関数(ReferenceError)」としてエラーになっています。 解決策: GASでポップアップメッセージを表示したい場合は、Browser.msgBox("メッセージ")またはSpreadsheetApp.getUi().alert("メッセージ")に書き換えてください。
修正コード(Before / After)
❌ エラーが発生するコード
function showAlert() {
// VBAの書き方をそのまま流用するとエラーになる
MsgBox("処理が完了しました。");
}
⭕ 修正後の推奨コード
function showAlert() {
// GASの標準的なポップアップ表示方法(シンプルUI)
Browser.msgBox("処理が完了しました。");
// または、より高機能なUIダイアログを使用する場合(スプレッドシート連携)
// var ui = SpreadsheetApp.getUi();
// ui.alert("処理が完了しました。");
}
よくある発生パターンと解説
1. Excel VBAからの移行時によく起きるミス
Google Apps Script (GAS) はJavaScriptをベースにした言語です。そのため、VBAの組み込み関数である MsgBox や InputBox(大文字・小文字の区別や構文の違い含む)はそのままでは動作しません。
2. GASにおけるダイアログ表示の選択肢
GASでユーザーにメッセージを通知・確認したい場合、主に以下の2つの方法があります。
Browser.msgBox()- 最も手軽に使える簡易的なモーダルダイアログです。
- 「OK」ボタンや「Yes/No」ボタン付きのポップアップを簡単に表示できます。
SpreadsheetApp.getUi().alert()- Googleスプレッドシート専用のカスタムUI機能です。
- メニューの追加などと合わせて、より洗練されたUIを構築する際に適しています。
よくある質問 (FAQ)
Q1: Browser.msgBox で「Yes」「No」のボタンを出し、ユーザーの選択によって処理を分岐させることはできますか?
A: はい、可能です。以下のように記述することで、ユーザーが押したボタンの判定ができます。
function confirmAction() {
var ui = Browser.msgBox("確認", "処理を実行しますか?", Browser.Buttons.YES_NO);
if (ui == "yes") {
// 「はい」が押された場合の処理
Browser.msgBox("実行しました。");
} else {
// 「いいえ」が押された場合の処理
Browser.msgBox("キャンセルしました。");
}
}
Q2: MsgBox 以外のVBA関数(例: Cells や Range の記述など)でも同様のエラーになりますか?
A: はい、VBA固有の構文や関数はGASでは基本的にそのまま動きません。GAS固有のAPI(SpreadsheetApp や Logger など)に書き換える必要があります。