見出し画像

【QuickTips 21】Googleスプレッドシート 説明入りプルダウンを作成する方法

シンプルでちょっと便利な Quick Tips。マガジンにまとめていきます。



Googleスプレッドシートで説明入りプルダウンを作る

今回紹介するのは シンプルな小ネタです。

👆こんな感じで、選択する際に カッコ内に説明を入れてプルダウンを表示したい時ってありませんか?

ただ集計の都合上、選択前の段階では説明入りでも 選択を確定すると説明無しの短いテキストや数値だけがセルに入るようにしたい。

これがGAS無しで出来ます!(楽に設定したい場合はGASを組み合わせます)

こちらの作り方を解説していきましょう。



説明入りプルダウン作成方法 1(手動方法)

この 説明付きプルダウンは、セルの表示形式(カスタム数値形式)の応用技となります。

まず、作業セルに 最終的にプルダウン選択後に表示する説明無しのテキストを入力。

そのセルを選択した状態で

表示形式 > 数字 > カスタム数値形式 と進み

;;;@ を入れた後ろに "ダブルクォートで括って 説明用のテキストを入れます。

;;;@"説明テキスト"

入力欄下の テキストという箇所に表示されればOK(@部分はテキストと表示されます)


適用を押せば完成です。簡単ですね。

見た目は

5.大変満足(何度もリピートしたいと感じたらコレを選択) なのに

中身は

5.大変満足 

となっている、説明入りプルダウンの元となるセルが作成されます。

同じように他の選択肢も 設定して 説明入り表示形式のセル範囲が全て用意できたら

プルダウンを設定するセル(セル範囲)を選択して

挿入 > プルダウン でサイドパネルを開き

条件 プルダウン(範囲内)
範囲 D1:D5(説明を表示形式で設定したセル範囲)

と設定。

それぞれ適当な色を付けておくと良いでしょう。

これで説明入りプルダウンが完成です。

表示形式で設定した説明は、プルダウンの選択が確定するまでは表示されますが、選択確定となった段階で消える不思議な仕様となっています。



説明入りプルダウン作成方法 2(QUERY関数 応用)

1つ1つ表示形式設定は面倒だなと感じる場合は、プルダウン確定後に入る値が数値のみであれば、数値の表示形式を制御できる唯一無二の関数 QUERY関数 format句を使う方法もあります。

プルダウンで実際に使いたい数値(たとえば 5点満点の5~1)、隣のセルに表示したい説明を用意します。(範囲 E1:F5に設定したとする)

そして隣の列に 👇 こちらの数式を入れるだけ

=BYROW(E1:F5,LAMBDA(r,QUERY(INDEX(r,,1),"format Col1 '0[$"&INDEX(r,,2)&"]'")))

BYROW関数で行毎に QUERY関数のforrmat句を適用することで、それぞれ違う表示形式を一つの式で設定しています。

※ '0[$"&INDEX(r,,2)&"]' ← [$テキスト] はメタ文字を回避する為のカスタム数値形式のリテラル記法です(ダブルクォートで括るのと同じ)

クエリ文の中でダブルクォートを記述するのがやや面倒なので上記の記述法で代替しています。


これで見た目は子ども、頭脳は大人・・・ではなく、見た目はテキスト、中身は数値のプルダウンに利用するセル範囲がサクッと完成しました。



説明入りプルダウン作成方法 3(GASで生成する)

QUERY関数を使う方法は便利ですが、残念ながら選択肢が数値のケースでのみ利用できます。

選択肢をテキストとしたい場合は、最初に紹介した手動で一つ一つ設定する部分をもっと簡単に実現したいとなると、GASを利用するしかありません。

簡単なコードですが、AIを使って生成しちゃいましょう。

👇こんな感じのプロンプトで Geminiさんにコード作成を依頼

以下を実現する GASのコードを生成してください。

選択した2列のセル範囲の値を取得、行毎にその右隣りのセルに 1列目のテキストを書き込んだ上で、セルの表示形式で ;;;@"2列目の値" を設定。これを範囲の最終行まで繰り返す。

選択したセル範囲が2列でない場合、空白が含まれる場合はアラートでエラーを表示
上記処理をカスタムメニューから実行できるようにする

👇こんなん出ました

/**
 * スプレッドシートが開かれた際にカスタムメニューを追加します。
 */
function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu('カスタム操作')
    .addItem('選択範囲を処理する', 'processSelectedRange')
    .addToUi();
}

/**
 * 選択された2列の範囲を元に、右隣の列へ値の書き込みと表示形式の設定を行います。
 */
function processSelectedRange() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getActiveRange();
  const ui = SpreadsheetApp.getUi();

  // 1. 選択範囲が2列であるか確認
  if (range.getNumColumns() !== 2) {
    ui.alert('エラー', '2列の範囲を選択してください。', ui.ButtonSet.OK);
    return;
  }

  const values = range.getValues();
  const numRows = range.getNumRows();
  const startRow = range.getRow();
  const startCol = range.getColumn();
  
  // 2. 空白セルのチェック
  for (let i = 0; i < values.length; i++) {
    if (values[i][0] === '' || values[i][1] === '') {
      ui.alert('エラー', `${i + 1}行目に空白が含まれています。全てのセルを入力してください。`, ui.ButtonSet.OK);
      return;
    }
  }

  // 3. 処理の実行
  // 効率化のため、書き込み用のデータ配列と表示形式用の配列を準備します
  const outputValues = [];
  const outputFormats = [];

  for (let i = 0; i < values.length; i++) {
    const col1Value = values[i][0];
    const col2Value = values[i][1];
    
    // 右隣のセルに設定する値(1列目のテキスト)
    outputValues.push([col1Value]);
    
    // 表示形式の設定: ;;;@"2列目の値"
    // 文字列内のダブルクォーテーションをエスケープします
    const format = `;;;@"${col2Value}"`;
    outputFormats.push([format]);
  }

  // ターゲット範囲(選択範囲のすぐ右隣の1列分)を特定
  const targetRange = sheet.getRange(startRow, startCol + 2, numRows, 1);

  // 一括で値と表示形式を適用
  targetRange.setValues(outputValues);
  targetRange.setNumberFormats(outputFormats);

  ui.alert('完了', '処理が正常に終了しました。', ui.ButtonSet.OK);
}

実行して確認してみましょう。

チップ型プルダウン生成は、2026年1月時点ではGASで対応していないので、表示形式で説明入りとした選択肢セルの生成までをGAS処理として、プルダウン設定部分は手動としています。

以上、説明入りプルダウンを生成する3つの方法でした。


今回のQucik Tipsの関連 note

プルダウン機能についてマガジンにまとめています。


QUERY関数 format句の表示形式操作についてはコチラを。

行毎に処理する BYROW関数について

GAS関連のネタをまとめた マガジン


いいなと思ったら応援しよう!

mir チップ大歓迎です。やる気がアップしますw