ドロップダウンリストの作成

作成日:2020.08.26
  1. HOME
  2. 趣味のページ
  3. ドロップダウンリストの作成
タイトル:ドロップダウンリストの作成

Google Apps Scriptでドロップダウンリスト(プルダウンメニュー)を作成する方法について解説いたします。 因みにドロップダウンリストとプルダウンメニューという名称に何か違いがあるのかと調べてみましたが、特には無さそうでした (個人的にはプルダウンの方をよく使います)。

ドロップダウンの作成手順

ドロップダウンリストは入力規則の一部です。それで入力規則のうち、関連する命令をまず見ておきます。

range(s).clearDataValidations()
入力規則を消去します(入力規則は上書きされないため必要)。
rule = SpreadsheetApp.newDataValidation()
入力規則のビルダを作成します。
rule.requireValueInList( [配列] , true )
メニューで表示するリストを配列の形で指定します。
第二引数はドロップダウンにするか否かを指定します。省略するとtrueになります。
range.setDataValidation(rule)
該当セルにドロップダウンを作成します。

ということで、流れとしては以下のような感じです。

  1. 該当範囲のドロップダウンを削除
  2. 入力規則ビルダの作成
  3. メニュー項目を指定
  4. ドロップダウンの作成

ドロップダウンリストのサンプル

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から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月を選択すると、日にちのリストが29日までに変わる

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

Google Apps Script関連本(楽天Books) Google Apps Script目的別リファレンス 実践サンプルコード付き Google Apps Script実践プログラミング OD>サーバーレスでお手軽自動化!Google Apps Script活用入門(2018年最新改訂版) Google Apps Script Webアプリ開発 超入門 詳解 GoogleAppsScript完全入門 【POD】仕事で使える!Google Apps Script

Supported by Rakuten Developers