前提・実現したいこと
A列セルのプルダウン選択により、B列セルプルダウン内容が変わり、
同じようにB列のプルダウン選択により、C列プルダウンの内容を変えたい。
発生している問題・エラーメッセージ
2階層(A列→B列)の連動はできるが、
3階層以上(A列→B列→C列)はできない
該当のソースコード
/** * グローバル変数の定義 */ var USE_SHEET_NAME = "入力用"; var SETTING_SHEET_NAME = "マスターデータ"; var CATEGORY1_COL_NUM = 1; /** * 本体 */ function onEdit(e) { if (!isTargetCol(e)) return; var category1Value = e.value; var changedRow = e.range.getRow(); var changedCol = e.range.getColumn(); var useSheet = e.source.getSheetByName(USE_SHEET_NAME); // 設定シート のデータ(二次元配列) var settingData = e.source.getSheetByName(SETTING_SHEET_NAME).getDataRange().getValues(); // カテゴリ1に対応するカテゴリ2を入れておくところ let catgory2List = []; // 設定シート のデータの中から、「選択されたカテゴリ1」に対応するカテゴリ2を取り出すところ settingData.forEach( row => { if (row[0] === category1Value) { catgory2List.push(row[1]); } }); if(catgory2List.length === 0) return; // 編集されたセルの右のセルにカテゴリ2のプルダウンをセットする var range = useSheet.getRange(changedRow, changedCol + 1); var rule = SpreadsheetApp.newDataValidation().requireValueInList(catgory2List, true); rule.setAllowInvalid(false).build(); range.setDataValidation(rule); } /** * プルダウン連動をさせる列かどうかの判断 */ function isTargetCol(e) { // 値が削除されたときはvalueが undefになるので無視 if (!e.range.getValue()) return false; // ※1 // 関係ないシートのとき if (e.source.getSheetName() !== USE_SHEET_NAME) return false; // 列が違うとき if (e.range.getColumn() != CATEGORY1_COL_NUM) return false; return true; }
試したこと
上記コードをコピペをするもA列→B列の連動が作動せず、
B列→C列のみ作動してしまう。
補足情報(FW/ツールのバージョンなど)
あなたの回答
tips
プレビュー