ちょっとした入力値をユーザーから受け取りたい──
Google Apps Scriptを使っていて、そんな場面に出くわしたことはありませんか?
そんな場面で役立つのが、入力欄付きダイアログをその場で表示できる ui.prompt() です。
本記事では、ui.prompt()の使い方とサンプルコードを初心者にもわかりやすく解説します。
なぜGASでテキスト入力ダイアログを使うのか?
簡易な入力が必要なシーンとは?
Google Apps Scriptでは、スクリプト実行中に一時的な値を受け取りたいケースがあります。
たとえば、
- 担当者名を入力して記録したい
- 対象の月を入力して集計処理をしたい
- 管理用のパスワードを入力させて検証したい
こうした処理に対応するために、ui.prompt() を活用することで、素早く入力を取得することができます。
フォームよりも手軽に使える理由
Google フォームのようなツールもありますが、作成・共有・集計などに手間がかかります。ui.prompt() なら、スクリプト内でダイアログをその場で表示できるため、手軽にインタラクティブな入力処理を実現できます。
ui.promptの基本と構文解説
prompt()の3つの書き方と使い分け
ui.prompt() には3つの呼び出し方があります。目的に応じて使い分けることができ、それぞれの構文は後述のコード例とともに解説します。
① メッセージのみ
function sample() {
const ui = SpreadsheetApp.getUi();
const res = ui.prompt("名前を入力してください");
const input = res.getResponseText();
}

② メッセージ+ボタンセット
function sample() {
const ui = SpreadsheetApp.getUi();
const res = ui.prompt("担当者を入力してください", ui.ButtonSet.OK_CANCEL);
const input = res.getResponseText();
}

③ タイトル+メッセージ+ボタンセット
function sample() {
const ui = SpreadsheetApp.getUi();
const res = ui.prompt("担当者入力", "処理を実行する担当者の名前を入力してください。", ui.ButtonSet.OK_CANCEL);
const input = res.getResponseText();
}

ButtonSetで選べるボタンの種類
ui.prompt() では、ユーザーに表示するボタンの組み合わせを ButtonSet で指定できます。
利用できるボタンセットは以下の通りです:
ui.ButtonSet.OKui.ButtonSet.OK_CANCELui.ButtonSet.YES_NOui.ButtonSet.YES_NO_CANCEL
この4種類が提供されており、処理内容に応じて最適なボタンセットを選ぶことができます。
PromptResponseオブジェクトの扱い方
ui.prompt() の戻り値は PromptResponse オブジェクトで、getResponseText() や getSelectedButton() などのメソッドを使って、ユーザーの入力や選択内容を取得できます。
戻り値である PromptResponse オブジェクトから以下の情報を取得できます:
getResponseText():入力値を取得getSelectedButton():押されたボタンを判定(Button で定義)
実用サンプルコードで学ぶui.prompt
入力を取得してスプレッドシートに記録する例
function recordName() {
const ui = SpreadsheetApp.getUi();
const res = ui.prompt("名前入力", "記録する名前を入力してください", ui.ButtonSet.OK_CANCEL);
if (res.getSelectedButton() === ui.Button.OK) {
const name = res.getResponseText();
SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A1").setValue(name);
}
}
入力内容によって処理を分岐させる例
function chooseSheet() {
const ui = SpreadsheetApp.getUi();
const res = ui.prompt("シート名入力", "表示したいシート名を入力してください", ui.ButtonSet.OK_CANCEL);
if (res.getSelectedButton() === ui.Button.OK) {
const name = res.getResponseText();
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(name);
if (sheet) sheet.activate();
else ui.alert("シートが見つかりませんでした。");
}
}
入力が空白だった場合のバリデーション
function validateInput() {
const ui = SpreadsheetApp.getUi();
const res = ui.prompt("入力確認", "値を入力してください", ui.ButtonSet.OK_CANCEL);
if (res.getSelectedButton() === ui.Button.OK) {
const value = res.getResponseText();
if (!value) {
ui.alert("入力が空です。再実行してください。");
} else {
Logger.log("入力値: " + value);
}
}
}
inputBoxとの違いと使い分け
ui.prompt() と似た関数として Browser.inputBox() があります。両者には使用環境や戻り値の違いがあり、目的に応じて使い分けることが重要です。
詳しくは、Browser.inputBox()を使った入力ダイアログの具体例を以下の記事で解説しています。
使用できる環境(バインド型とスタンドアロン)
ui.prompt():スプレッドシート、ドキュメントなどにバインドされたスクリプトで使用Browser.inputBox():どのスクリプト形式でも使用可能
戻り値の取り扱いの違い
ui.prompt():PromptResponseオブジェクト(入力値とボタン)inputBox():入力値を直接文字列で返す(キャンセルは空文字)
どちらを使うべきかの判断基準
- スプレッドシート操作と一体で使いたい:
ui.prompt() - スタンドアロンで汎用的に使いたい:
Browser.inputBox()
よくある質問(FAQ)
- Qスタンドアロンで使えますか?
- A
いいえ。
ui.prompt()はバインド型(スプレッドシート等)専用です。スタンドアロンではBrowser.inputBox()を使いましょう。
- Qボタンの判定はどうやって行う?
- A
getSelectedButton()を使って押されたボタンを判定できます。OKならui.Button.OK、キャンセルならui.Button.CANCEL、×で閉じた場合はui.Button.CLOSEが返ります。
- Q入力が空だった場合の処理方法は?
- A
入力値が空の場合は
if (!input)などでチェックし、再入力を促すアラートを表示するのが一般的です。
- QpromptとinputBox、どちらが便利?
- A
スプレッドシートにバインドされている場合は、複数ボタンの処理も可能な
ui.prompt()の方が柔軟に使えます。
- Qプレースホルダーを入れるには?
- A
ui.prompt()ではプレースホルダーは使用できません。必要な場合は HTMLService を用いて独自にダイアログを構築する必要があります。
- Q複数行に改行して表示できますか?
- A
メッセージ内で
\nを使うことで改行できます。たとえば"1行目\n2行目"のように記述すると、メッセージが複数行で表示されます。
まとめ
ui.prompt() は、スプレッドシートをはじめとする Google Apps Script のバインド型スクリプトにおいて、ユーザーからの入力を簡単に取得するために非常に便利な関数です。
OK・キャンセルなどのボタンセットを指定できることで、ユーザーの選択に応じた分岐処理が可能になり、業務フローに柔軟に対応できます。
また、PromptResponse オブジェクトを使えば、ユーザーが入力した値だけでなく、どのボタンを押したのかも取得できるため、安全な処理分岐を実現できます。
使用環境によっては Browser.inputBox() との使い分けも重要です。
スプレッドシートと連携したスクリプトでは ui.prompt() を、スタンドアロンでの利用や単純な入力には inputBox() を活用することで、目的に合った入力処理を実装できます。
ui.prompt() をうまく活用すれば、確認処理やパラメータ入力など、さまざまなシーンでユーザーとのやりとりをスムーズに行うことができるでしょう。





