
Google Apps Scriptでドロップダウンリスト(プルダウンメニュー)を作成する方法について解説いたします。 因みにドロップダウンリストとプルダウンメニューという名称に何か違いがあるのかと調べてみましたが、特には無さそうでした (個人的にはプルダウンの方をよく使います)。
ドロップダウンの作成手順
ドロップダウンリストは入力規則の一部です。それで入力規則のうち、関連する命令をまず見ておきます。
- range(s).clearDataValidations()
- 入力規則を消去します(入力規則は上書きされないため必要)。
- rule = SpreadsheetApp.newDataValidation()
- 入力規則のビルダを作成します。
- rule.requireValueInList( [配列] , true )
- メニューで表示するリストを配列の形で指定します。
- 第二引数はドロップダウンにするか否かを指定します。省略するとtrueになります。
- range.setDataValidation(rule)
- 該当セルにドロップダウンを作成します。
ということで、流れとしては以下のような感じです。
- 該当範囲のドロップダウンを削除
- 入力規則ビルダの作成
- メニュー項目を指定
- ドロップダウンの作成
ドロップダウンリストのサンプル
A1~C1セルに月・日・曜日を選択するドロップダウンメニューを作ってみます。
function dropdownmake(){ var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); //とりあえず該当箇所の入力規則を解除 sheet.getRange(1,1,1,3).clearDataValidations(); //入力規則ビルダの作成 var rule = SpreadsheetApp.newDataValidation(); //月の配列作成 var month = new Array(); month.push("-"); //pushは配列に項目を追加する命令 //日にちの配列作成 var day = new Array(); day.push("-"); for ( var i = 1 ; i <= 31 ; i++ ){ if( i <= 12 ){ month.push(i + "月"); } day.push(i + "日"); } //曜日の配列作成 var yobi = ["-","日","月","火","水","木","金","土"]; //A1セルに月のリストを表示 rule.requireValueInList(month); sheet.getRange("A1").setDataValidation(rule); //B1セルに日にちのリストを表示 rule.requireValueInList(day); sheet.getRange("B1").setDataValidation(rule); //C1セルに曜日のリストを表示 rule.requireValueInList(yobi); sheet.getRange("C1").setDataValidation(rule); }
<実行結果>

A1からC1のセルに無事ドロップダウンリストが作成できました。
ドロップダウンを連動させてみる
月の部分(A1セル)を選択すると、日にちの部分(B1セル)に該当月の日数に合ったリストを表示するようにしてみます。
function onEdit(e){ var cell = e.range; //編集されたセルの取得 var val = cell.getValue(); //値の取得 var row = cell.getRow(); //行の取得 var col = cell.getColumn(); //列の取得 //各月の日数を配列daysに収める(1つ目の項目はダミー) var days = [0,31,29,31,30,31,30,31,31,30,31,30,31]; //A1セル(行・列共に1)で、値が「-」以外の時 if( row == 1 && col == 1 && val != "-"){ var mon = parseInt(val); //値から数値を抜き取る //日にちのリスト作成 var day = new Array(); day.push("-"); //繰り返し回数は、配列daysの該当月の値を利用 for ( var i = 1 ; i <= days[mon] ; i++ ) { day.push( i + "日" ); } var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var b1 = sheet.getRange("B1"); //B1セルを変数b1に格納 b1.clearDataValidations(); //一度入力規則を解除 var rule = SpreadsheetApp.newDataValidation(); rule.requireValueInList(day); //新たな配列を指定して b1.setDataValidation(rule); //ドロップダウンを再作成する } }
<実行結果>

2月を選択すると、B1のリストが29日までになっているのが確認できます。