GASでプルダウンメニューを連動・取得・変更する完全ガイド

GASでプルダウンメニューの使い方を知りたいんだけど、どうやって連動させるのかな?
猫男
猫男
catman
catman
よし、catmanが「GASでプルダウンメニューを連動させる方法」を教えてやろう!まずは、プルダウンメニューを取得する方法から始めるぞ!

GASでプルダウンメニューを取得する方法

GASでは、スプレッドシートに設定されたデータ検証リストからプルダウンメニューを取得することができます。

プルダウンメニューの取得

まずはシートのセルからプルダウンメニューを取得する方法だ。


function getDropdownOptions() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var cell = sheet.getRange('A1');
  var validation = cell.getDataValidation();
  if (validation) {
    var criteria = validation.getCriteriaValues();
    Logger.log(criteria); // プルダウンのオプションをログに出力
  }
}

getActiveSpreadsheet()は現在のスプレッドシートを取得するメソッドだ。そして、getDataValidation()を使ってセルのデータ検証オブジェクトを取得し、プルダウンメニューのオプションをログに出力する。

なるほど…!GASだとそんな簡単にプルダウンメニューを取得できるんだね!
猫男
猫男

GASでプルダウンメニューを連動させる方法

基本的な仕組み

次に、プルダウンメニューを連動させる方法を説明しよう。


function setLinkedDropdown() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var cell = sheet.getRange('A1');
  var linkedCell = sheet.getRange('B1');
  
  var parentOptions = ['Fruit', 'Vegetable'];
  var childOptions = {
    'Fruit': ['Apple', 'Banana'],
    'Vegetable': ['Carrot', 'Broccoli']
  };
  
  var parentValue = cell.getValue();
  
  if (parentOptions.includes(parentValue)) {
    var validationRule = SpreadsheetApp.newDataValidation()
      .requireValueInList(childOptions[parentValue])
      .build();
    linkedCell.setDataValidation(validationRule);
    linkedCell.setValue(''); // リストを更新した後、セルの値をクリアする
  }
}

✅ ここでは、親プルダウンの値に応じて子プルダウンの内容を設定する。newDataValidation()メソッドを使い、子プルダウンを生成し、セルの値が変更された際にリストを更新するようにしているんだ。

プルダウンが変わるたびに連動して別のプルダウンが変わるなんてすごい!これでどんな場面にも応用できそうだね!
猫男
猫男

GASでプルダウンメニューを変更する方法

プルダウンメニューの変更方法も見てみよう。

プルダウンオプションの変更

すでに設定されているプルダウンメニューのオプションを変更する方法だ。


function changeDropdownOptions() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var cell = sheet.getRange('A1');
  
  var newOptions = ['Cat', 'Dog', 'Bird'];
  var validationRule = SpreadsheetApp.newDataValidation()
    .requireValueInList(newOptions)
    .build();
  
  cell.setDataValidation(validationRule);
}

newDataValidation()は新しいデータ検証ルールを作成することができ、requireValueInList()で新しいリストを指定してプルダウンの内容を変更することができる。

ほんとに簡単にプルダウンメニューを変更できるんだね!これなら使いやすい!
猫男
猫男

練習問題:GASでプルダウンメニューを操作しよう

ここまでの内容を確認するため、簡単な練習問題を用意したよ!

  1. 「Color」という親プルダウンをセルA1に、「Shade」という子プルダウンをセルB1に設定し、それぞれ連動させてください。親の選択肢には「Red」,「Blue」、それぞれの子の選択肢には「Red」には「Light Red」「Dark Red」、「Blue」には「Light Blue」「Dark Blue」を設定してください。

解答・解説


function setColorDropdown() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var colorCell = sheet.getRange('A1');
  var shadeCell = sheet.getRange('B1');
  
  var colorOptions = ['Red', 'Blue'];
  var shadeOptions = {
    'Red': ['Light Red', 'Dark Red'],
    'Blue': ['Light Blue', 'Dark Blue']
  };
  
  var colorValidationRule = SpreadsheetApp.newDataValidation()
    .requireValueInList(colorOptions)
    .build();
  colorCell.setDataValidation(colorValidationRule);

  var colorValue = colorCell.getValue();
  
  if (shadeOptions[colorValue]) {
    var shadeValidationRule = SpreadsheetApp.newDataValidation()
      .requireValueInList(shadeOptions[colorValue])
      .build();
    shadeCell.setDataValidation(shadeValidationRule);
    shadeCell.setValue('');
  }
}

✅ このスクリプトでは、まず親セル(A1)に色の選択肢を設定し、選択した色に合わせて子セル(B1)のプルダウンを変更するように記述しています。newDataValidation()で新しいデータ検証を作成し、親の選択肢に応じて適切な子オプションが表示されるように仕組みを作っています。