コピペで簡単!スプレッドシートの連動プルダウンを作成する方法を解説します
スプレッドシートで連動プルダウンをつくる方法を解説します。
こんな感じのやつです。
単一行ではなく、複数行です。
下画像は2~10行目のみに設定してますが、100行目まででも列全体でも大丈夫です。
※矢印クリックで再生
⇒大きい画像を開く
この記事の方法には、メリットとデメリットがあります。
- メリット
 →選択肢を自由にメンテナンスできる
 →その際の設定変更は不要
 →複数セルの同時入力にも対応
- デメリット
 →遅い
プログラム(Google Apps Script)を使いますが、コピペするだけなので、まったく分からない方でもOKです。
下記の5ステップで終わります。
ある程度スプレッドシートに慣れている方なら、10分後には連動プルダウンが動いているはずです。
- 入力シートと設定シートを作成
 ↓
- コードをコピペ
 ↓
- 定数を変更
 ↓
- データの入力規則を設定
 ↓
- 動作確認
Contents
コピペで簡単!スプレッドシートの連動プルダウンを作成する方法を解説します
ちなみに、自分はプログラマーです。
最低限の品質はあると思っています。
①入力シートと設定シートを作成
まずは、入力シートと設定シートをつくります。
下記の意味合いです。
- 入力シート
 →連動プルダウンをつくるシート
- 設定シート
 →プルダウンの選択肢を設定するシート
入力シートは、下画像と同じような構成でつくってください。
プルダウンの行列は、どこでも大丈夫です。
ヘッダーの項目名は、お好きなように…。

シートをつくったら、上画像の番号をメモしてください。
- ①シートの名前
 →なんでもOK
- ③プルダウン(ひとつ目)の列番号
 →Aなら1、Bなら2…
- ④プルダウン(ふたつ目)の列番号
 →Bなら2、Cなら3…
- ⑤プルダウンをつくる最初の行
 →2行目なら2、3行目なら3…
※上画像でいうと、①=入力シート、③=1、④=2、⑤=2 となります。
設定シートは、下画像と同じような構成でつくってください。
ひとつ目のプルダウンは1行目に設定し、選択肢を横向きに加えていきます(⑦のように)
ふたつ目のプルダウンは、ひとつ目にぶらさがる選択肢を縦向きに加えていきます(⑥のように)

選択肢の設定をはじめる行列は、どこでも大丈夫です。
また、選択肢の数に上限はありません。
シートをつくったら、上画像の番号をメモしてください。
- ②シートの名前
 →なんでもOK
- ⑥設定の開始列番号
 →Aなら1、Bなら2…
- ⑦設定の開始行番号
 →1行目なら1、2行目なら2…
※上画像でいうと、②=設定シート、⑥=1、⑦=1 となります。
②コードをコピペ
つぎに、プログラム(Google Apps Script)をコピーします。
なにも考えずに、下記のコードをまるごとコピーしてください。
const SHEET_TARGET = "入力シート";   //①連動プルダウンをつくるシート名
const SHEET_SETTINGS = "設定シート"; //②プルダウンの選択肢を設定するシート名
const COLUMN_TARGET_GROUP1 = 1;    //③入力シート 大分類プルダウンの列番号
const COLUMN_TARGET_GROUP2 = 2;    //④入力シート 小分類プルダウンの列番号
const ROW_TARGET_START = 2;        //⑤入力シート プルダウンをつくる最初の行番号
const COLUMN_SETTINGS_START = 1;   //⑥設定シート 最初の列番号
const ROW_SETTINGS_START = 1;      //⑦設定シート 最初の行番号
function onEdit(e) {
  
  //ほかの処理に干渉させないため、関数にする
  createDropdownList(e);
  
  //ほかの処理があれば続けて書く
  
}
function createDropdownList(e) {
  var sheetTarget = e.source.getActiveSheet();
  //対象外のシートは無視する
  if (sheetTarget.getName() !== SHEET_TARGET) {
    return;
  }
  
  //設定シートの大分類を読み込む
  var sheetSettings = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_SETTINGS);
  var rangeGroup1 = sheetSettings.getRange(ROW_SETTINGS_START, COLUMN_SETTINGS_START, 1, sheetSettings.getLastColumn() - COLUMN_SETTINGS_START + 1).getValues()[0];
  //入力シートの編集された範囲を取得(最初の行列、最後の行列)
  var columnStart = e.range.columnStart;
  var columnEnd = e.range.columnEnd;
  var rowStart = e.range.rowStart;
  var rowEnd = e.range.rowEnd;
  //コピーで複数セルに一括入力された場合に対応するため、編集された全セルをループする
  for (var c = columnStart; c <= columnEnd; c++) {
    
    //大分類プルダウンの列が編集された場合のみ処理する(ほかの場合は小分類プルダウンを作り直す必要がない)
    if (c !== COLUMN_TARGET_GROUP1) {
      continue;
    }
    
    for (var r = rowStart; r <= rowEnd; r++) {
      
      //プルダウンをつくらない行(ヘッダー行など)は無視する
      if (r < ROW_TARGET_START) {
        continue;
      }
      
      //大分類と小分類のセルを取得
      var cellGroup1 = sheetTarget.getRange(r, COLUMN_TARGET_GROUP1);
      var cellGroup2 = sheetTarget.getRange(r, COLUMN_TARGET_GROUP2);
      
      //小分類のセルを初期化(値とプルダウン設定)
      cellGroup2.clearContent();
      cellGroup2.clearDataValidations();
      //設定シートにおける大分類の場所を探す
      var index = rangeGroup1.indexOf(cellGroup1.getValue());
      
      //入力された大分類が設定シートになければ、プルダウンをつくらない(不正な値)
      if(index !== -1) {
        
        //小分類の設定を読み込む
        var rangeValidation = sheetSettings.getRange(ROW_SETTINGS_START + 1, COLUMN_SETTINGS_START + index, sheetSettings.getLastRow());
        var validation = SpreadsheetApp.newDataValidation().requireValueInRange(rangeValidation).build();
        
        //プルダウンをつくる
        cellGroup2.setDataValidation(validation);
        
      }
    }
  }
  
}
スプレッドシートに貼りつける方法は、下画像を参考にしてください。
保存を忘れずに。
※矢印クリックで再生
⇒大きい画像を開く
③定数を変更
「①入力シートと設定シートを作成」でメモしていただいた①~⑦を、プログラムの最初の部分に書いてください。
「const xxxx = yyyy;」の「yyyy」の部分のみ変えます。
ダブルクォーテーション(")やセミコロン(;)は、そのまま残してください。
保存を忘れずに。

④データの入力規則を設定
入力シートにもどって、ひとつ目のプルダウンを設定する範囲を選択し、データの入力規則を設定します。
下画像のとおりに進めてください。
以上で、連動プルダウンの完成です。
※矢印クリックで再生
⇒大きい画像を開く
⑤動作確認
「プルダウンが設定されないな…」という場合は、「③定数の変更」で変更した部分を見直してください。
シート名が間違っているか、行列番号がずれていることが原因だと思います。
連動プルダウンのサンプルスプレッドシートはこちら
連動プルダウンのサンプルをつくったので、デモ版として動かしたい方はお使いください。
下記のリンクからコピーできます。
⇒サンプルはこちら①「ファイル」 → 「コピーを作成」の順にクリック

②「OK」をクリック

