こんにちは、もりです!
この記事では、GASでスプレッドシートにリスト(プルダウン)を作る方法を紹介します。
ここで作る「リスト」は、スプレッドシートの「データの入力規則」で作るリストのことです。
- リストを直接指定
- リストを範囲で指定
の2種類の方法を紹介します。
Contents
【リストを直接指定】選択肢を「配列」で指定する
リストの選択肢を「配列」で指定する方法です。
A1セルに、選択肢「VBA / GAS / Python」のリストを作成するスクリプトです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
function createList1() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('list'); //プルダウンの選択肢を配列で指定 const values = ['VBA', 'GAS', 'Python']; //入力規則を作成 const rule = SpreadsheetApp.newDataValidation().requireValueInList(values).build(); //リストをセットするセル範囲を取得 const cell = sheet.getRange('A1'); //セルに入力規則をセット cell.setDataValidation(rule); } |
スクリプトの実行結果です。
スプレッドシートの「データ」→「データの入力規則」で、設定内容を確認できます。
複数セルに一括してリストを作成する
12行目のgetRangeメソッドの引数を変更します。
・A1セル~A10セルにリストを作成する
const cell = sheet.getRange(‘A1:A10’);
・A列のすべてのセルにリストを作成する
const cell = sheet.getRange(1, 1, sheet.getMaxRows(), 1);
【リストを範囲で指定】選択肢を「セル範囲」で指定する
前項の方法では、リストの選択肢を変更したい場合、スクリプトエディタを開いて変更しなければなりません。
この項では、スプレッドシートの「セル」に選択肢を用意する方法を2つ紹介します。
①選択肢の「セル範囲」を固定する
このように、C2セル~C7セルの値をリストの選択肢にする方法です。
スクリプトがこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
function createList2() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('list'); //選択肢を列挙したセル範囲 const range = sheet.getRange('C2:C7'); //入力規則を作成 const rule = SpreadsheetApp.newDataValidation().requireValueInRange(range).build(); //リストをセットするセル範囲を取得 const cell = sheet.getRange('A1'); //セルに入力規則をセット cell.setDataValidation(rule); } |
「データ」→「データの入力規則」で設定内容を確認します。「リストを範囲で指定」しているので、セルの値を変更すると、リストの選択肢も変更されます。
②選択肢の「セル範囲」をシートの最終行まで確保する
前項では、「C2セル~C7セル」と、セル範囲を固定しました。これでは、選択肢を追加したいときに不便です。
そこで、「2行目~シートの最終行のセル」を選択肢の範囲にする方法も紹介します。6行目のgetRangeメソッドの引数を変更しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
function createList2_2() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('list'); //選択肢を列挙したセル範囲 const range = sheet.getRange(2,3,sheet.getMaxRows()-1,1); //C列2行目~シートの最終行 //入力規則を作成 const rule = SpreadsheetApp.newDataValidation().requireValueInRange(range).build(); //リストをセットするセル範囲を取得 const cell = sheet.getRange('A1'); //セルに入力規則をセット cell.setDataValidation(rule); } |
C2セル~C1000セル(シートの最終行が1000の場合)が、範囲として指定されました。
選択肢のセル範囲を広く確保した場合でも、空白のセルは無視され、値のみがリストに表示されます。