こんにちは、もりです!
下記の記事で、GASでリストを作る方法を紹介しました。
【GAS】セルにリスト(プルダウン)を作成するGASを使って、スプレッドシートのセルにリストを作る方法を紹介しています。「データの入力規則」で「リストを直接指定」する方法、「リストを範囲で指定」する方法の2通りあります。...
この記事では「応用編」として、2つのリストを連動させる方法を紹介します。
【例】A列のリストで「東北」を選択すると、それに応じたリストがB列に作成される
A列のリストで「関東」を選択すると、B列のリストの内容が変わる
動作イメージは下記の動画をご覧ください(※再生しても音は出ません)
スポンサーリンク
リストの選択値に応じて新しいリストを作る
それでは作り方を紹介していきます。
【事前準備】リストの値を別シートに用意する
まずは、リストの値を別シートに設定します。
- 1行目:「大分類」の値を入力
- 2行目以降:「小分類」の値を、選択肢の数、入力
(例)B列
大分類のリストで「東北」を選択したら、小分類のリストに「青森,岩手,宮城,秋田,山形,福島」の選択肢を表示させたい
【データの入力規則】大分類のリストを作成する
大分類(東北,関東,中部,近畿)のリストは、スプレッドシートの「データの入力規則」で作ります。
上記で用意したシートの1行目に、「名前付き範囲」で名前をつけます。ここでは「大分類」という名前にします。
「データの入力規則」で、名前付き範囲の「大分類」を設定します。
【スクリプト】GASでリストを作成する
A列の値に応じて、B列にリストを作るスクリプトです。
イベントトリガーの「onEdit」を使用して、スプレッドシートのセルの編集内容を検知します。編集されたセル・値に応じて、B列にリストを作ります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
function onEdit(e) { // 編集されたセルの情報を取得 const cell = e.range; const value = e.value; // [memo]onEditはスプレッドシートのすべての編集を検知するので、 // 想定外の動作が起こらないよう、シート名・行列をチェックする const sheet = e.source.getActiveSheet(); if (sheet.getName() !== '選択') return; const row = cell.getRow(); const col = cell.getColumn(); //A列2行目以降が編集された場合、小分類のリストを作る if (col === 1 && row >= 2) createList_(value,row); } /* * 「大分類」の選択値に連動して「小分類」のリストを作成する * * @param {string} 大分類の選択値 * @param {number} セルの行番号 */ function createList_(major_value,row) { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet_list = ss.getSheetByName('分類表'); const sheet_target = ss.getSheetByName('選択'); // 「小分類」のリストを作るセルをクリア const target_cell = sheet_target.getRange(row,2,1,1); target_cell.clearContent(); // 選択された大分類の値が「分類表」シートの何列目にあるか検索 let major_class = sheet_list.getRange(1,1,1,sheet_list.getMaxColumns()).getValues(); major_class = major_class.flat(); const col = major_class.indexOf(major_value) + 1; //検索値が無い場合 -1 if (col === 0) return; //分類表に無い場合、処理終了 // 「小分類」の選択肢 let small_class = sheet_list.getRange(2, col, sheet_list.getMaxRows()-1, 1).getValues(); small_class = small_class.flat(); small_class = small_class.filter(element => element !== ''); //空白を除去 // 入力規則を作成してセルに設定 const rule = SpreadsheetApp.newDataValidation().requireValueInList(small_class).build(); target_cell.setDataValidation(rule); } |
以上です!GASを使って、選択値に応じた動的リストを作ってみましょう!
スポンサーリンク
スポンサーリンク