GASでユーザー入力ダイアログを簡単実装!ui.promptでスプレッドシートをインタラクティブに操作する方法

GAS

はじめに:スプレッドシートに「話しかける」GASアプリを作ろう

Google Apps Script(GAS)を使ってスプレッドシートを自動化する際、単に処理を自動化するだけでなく、ユーザーからの入力を受け取って動的に動作を変えたい場面は多々あります。

  • 「どのデータを処理しますか?」とユーザーに尋ねたい
  • 「処理を続行しますか?」と確認を取りたい
  • 特定のセルに入れる値をユーザーに直接入力させたい

このような時、スプレッドシート上に手軽にユーザー入力用のポップアップ(ダイアログ)を表示し、その値を受け取ることができれば、GASアプリの利便性は飛躍的に向上します。

本記事では、GASのui.promptメソッドを使って、スプレッドシート上にユーザー入力ダイアログを表示し、その値を受け取る方法を初級者の方にも分かりやすく解説します。現場で今すぐ使える具体的なサンプルコードを交えながら、インタラクティブなGASアプリの作り方をマスターしましょう!

ui.promptとは?ユーザーとの対話を可能にする魔法のメソッド

ui.promptは、Google Apps Scriptが提供するUiクラスのメソッドの一つです。このメソッドを使うと、スプレッドシートの画面上にシンプルなダイアログボックスを表示し、ユーザーからのテキスト入力や、OK/キャンセルなどのボタン選択を促すことができます。

このダイアログは、ユーザーがGASスクリプトを実行した際に、直接的なフィードバックや入力を求めるために非常に便利です。

ui.promptの基本的な構文

ui.promptメソッドは、以下のような形式で利用します。

SpreadsheetApp.getUi().prompt(title, prompt, buttons);
  • title (String): ダイアログのタイトルバーに表示される文字列です。
  • prompt (String): ダイアログ本体に表示される、ユーザーへの指示や質問のメッセージです。
  • buttons (Ui.ButtonSet): ダイアログに表示するボタンの種類を指定します。例えば、Ui.ButtonSet.OK_CANCELやUi.ButtonSet.YES_NOなどがあります。省略した場合はOKボタンのみが表示されます。

ユーザーがダイアログを操作した後、promptメソッドはButtonResponseオブジェクトを返します。このオブジェクトから、入力されたテキストや選択されたボタンの情報を取得します。

サンプル1:シンプルなテキスト入力ダイアログを表示し値を受け取る

まずは、最も基本的なテキスト入力ダイアログを作成し、ユーザーが入力した値と選択したボタンを取得する例を見てみましょう。

GASコード

function showSimpleInputDialog() {
  const ui = SpreadsheetApp.getUi();

  // ユーザーに名前の入力を促すダイアログを表示
  const response = ui.prompt(
    '名前の入力', // ダイアログのタイトル
    'お名前を入力してください:', // ユーザーへのメッセージ
    ui.ButtonSet.OK_CANCEL // OKボタンとキャンセルボタンを表示
  );

  // ユーザーの入力結果と選択したボタンを取得
  const button = response.getSelectedButton(); // 選択されたボタン (OK, CANCELなど)
  const text = response.getResponseText(); // 入力されたテキスト

  if (button === ui.Button.OK) {
    // OKボタンが押された場合
    if (text) {
      ui.alert('入力結果', `こんにちは、${text}さん!`, ui.ButtonSet.OK);
    } else {
      ui.alert('入力結果', '名前が入力されませんでした。', ui.ButtonSet.OK);
    }
  } else if (button === ui.Button.CANCEL) {
    // キャンセルボタンが押された場合
    ui.alert('操作中止', '入力がキャンセルされました。', ui.ButtonSet.OK);
  }
}

コードの解説

  • SpreadsheetApp.getUi()で、現在のスプレッドシートUIオブジェクトを取得します。
  • ui.prompt()でダイアログを表示し、その結果をresponse変数に格納します。
  • response.getSelectedButton()でユーザーが押したボタン(Ui.Button.OK, Ui.Button.CANCELなど)を取得します。
  • response.getResponseText()でユーザーが入力したテキストを取得します。
  • if文を使って、ユーザーがOKを押したかキャンセルを押したかで処理を分岐させています。
  • 入力されたテキストが空の場合も考慮しています。

このスクリプトを実行すると、スプレッドシート上に「名前の入力」というダイアログが表示され、テキスト入力欄と「OK」「キャンセル」ボタンが現れます。入力後、選択したボタンに応じたメッセージがさらにui.alertで表示されます。

サンプル2:入力値をスプレッドシートに書き込む応用例

次に、ユーザーに入力させた値を直接スプレッドシートの特定のセルに書き込む例を見てみましょう。この機能は、データ入力の補助や、マスタ更新などに活用できます。

GASコード

function inputDataToSheet() {
  const ui = SpreadsheetApp.getUi();
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // ユーザーに書き込みたい値を尋ねるダイアログを表示
  const response = ui.prompt(
    'データ入力',
    'A1セルに書き込むデータを入力してください:',
    ui.ButtonSet.OK_CANCEL
  );

  const button = response.getSelectedButton();
  const inputText = response.getResponseText();

  if (button === ui.Button.OK) {
    if (inputText) {
      // A1セルにユーザーの入力値を書き込む
      sheet.getRange('A1').setValue(inputText);
      ui.alert('完了', `A1セルに「${inputText}」を書き込みました。`, ui.ButtonSet.OK);
    } else {
      ui.alert('エラー', '何も入力されませんでした。', ui.ButtonSet.OK);
    }
  } else if (button === ui.Button.CANCEL) {
    ui.alert('操作中止', 'データ入力がキャンセルされました。', ui.ButtonSet.OK);
  }
}

コードの解説

  • SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()で、現在アクティブなシートを取得します。
  • ユーザーがOKボタンを押し、かつ何かしらのテキストが入力されていれば、sheet.getRange('A1').setValue(inputText)でA1セルに入力値を書き込んでいます。
  • キャンセル時や未入力時のエラーハンドリングも行っています。

このスクリプトを実行すると、ユーザーが入力した値がスプレッドシートのA1セルに自動的に反映されます。非常にシンプルですが、データ入力の自動化において強力な一歩となるでしょう。

ui.promptを使う上での注意点

ui.promptは非常に便利な機能ですが、いくつか注意点があります。

  • 実行環境の制約: ui.promptは、ユーザーがGASスクリプトを直接実行した場合(スクリプトエディタから実行、カスタムメニューから実行、図形に割り当てて実行など)にのみ機能します。onEditやonSelectionChangeのようなシンプルなトリガーでは、uiオブジェクトにアクセスできないため、ui.promptは使えません。時間駆動型トリガーでも同様です。
  • 入力検証: ui.promptで受け取った値は、常に文字列として扱われます。数値や日付として利用する場合は、parseInt()やnew Date()などで適切に型変換し、入力値が期待する形式であるか検証する処理を追加することが重要です。
  • 過度な使用は避ける: 頻繁にダイアログを表示すると、ユーザーエクスペリエンスを損なう可能性があります。本当にユーザーの入力が必要な場面でのみ利用するようにしましょう。

まとめ:ui.promptでGASアプリの可能性を広げよう

本記事では、Google Apps Scriptのui.promptメソッドを使って、スプレッドシート上にユーザー入力ダイアログを表示し、その値を受け取る方法を詳しく解説しました。

ui.promptを活用することで、ユーザーからのテキスト入力やボタン選択に基づいて処理を分岐させたり、入力された値をスプレッドシートに書き込んだりすることが可能になります。これにより、単なる自動化ツールから、ユーザーと対話しながら動作する、より柔軟で実用的なGASアプリへと進化させることができます。

今回紹介したサンプルコードを参考に、ぜひあなたのGASプロジェクトにui.promptを組み込んでみてください。インタラクティブなGASアプリ開発の第一歩として、この知識が役立つことを願っています。

コメント

タイトルとURLをコピーしました