実現したいこと
スプレッドシート上の表の要素をもとに複数箇所にドロップダウンリストを生成したい
発生している問題・分からないこと
同じ表を参照し複数箇所に内容の同じドロップダウンリストを生成し、リストを選択したとき片方だけ無効判定になる
エラーメッセージ
error
1無効: 指定したリスト上のアイテムを入力してください
該当のソースコード
GAS
1const ss = SpreadsheetApp.getActiveSpreadsheet(); //スプレッドシート(ss<定数>)を取得 2const sh1 = ss.getSheetByName("分類・撮影者識別記号設定"); //シート「分類・撮影者識別記号設定」(sh1<定数>)を取得 3const sh2 = ss.getSheetByName("分類設定"); //シート「分類設定」(sh2<定数>)を取得 4 5function dropDown() { 6 let gameName = sh1.getRange('B3:B32').getDisplayValues(); //sh1B3:B32セルの値の二次元配列(gameName,分類名)を取得 7 let teamName = sh1.getRange('E3:E32').getDisplayValues(); //sh1E3:E32セルの値の二次元配列(teamName,チーム名)を取得 8 let opponentTeamName = sh1.getRange('E3:E32').getDisplayValues(); //sh1E3:E32セルの値の二次元配列(opponentTeamName,チーム名)を取得 9 10 sh2.getRange('C6').clearDataValidations(); //sh2C6セルの入力規則をクリア 11 let dropDownGame = SpreadsheetApp.newDataValidation(); //新規入力規則を作成 12 dropDownGame.requireValueInList(gameName); //gameNameを元にプルダウンリストを作成 13 sh2.getRange('C6').setDataValidation(dropDownGame); //sh2C6セルにプルダウン(分類)を記述 14 15 sh2.getRange('G2').clearDataValidations(); //sh2G2セルの入力規則をクリア 16 let dropDownTeam = SpreadsheetApp.newDataValidation(); //新規入力規則を作成 17 dropDownTeam.requireValueInList(teamName); //teamNameを元にプルダウンリストを作成 18 sh2.getRange('G2').setDataValidation(dropDownTeam); //sh2G2セルにプルダウン(チーム)を記述 19 20 sh2.getRange('E7').clearDataValidations(); //sh2E7セルの入力規則をクリア 21 let dropDownOpponentTeam = SpreadsheetApp.newDataValidation(); //新規入力規則を作成 22 dropDownOpponentTeam.requireValueInList(opponentTeamName); //opponentTeamNameを元にプルダウンリストを作成 23 sh2.getRange('E7').setDataValidation(dropDownOpponentTeam); //sh2E7セルにプルダウン(対戦チーム)を記述 24}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
一番最初
GAS
1function dropDown() { 2 let gameName = sh1.getRange('B3:B32').getDisplayValues(); //sh1B3:B32セルの値の二次元配列(gameName,分類名)を取得 3 let teamName = sh1.getRange('E3:E32').getDisplayValues(); //sh1E3:E32セルの値の二次元配列(teamName,チーム名)を取得 4 5 sh2.getRange('C6').clearDataValidations(); //sh2C6セルの入力規則をクリア 6 let dropDownGame = SpreadsheetApp.newDataValidation(); //新規入力規則を作成 7 dropDownGame.requireValueInList(gameName); //gameNameを元にプルダウンリストを作成 8 sh2.getRange('C6').setDataValidation(dropDownGame); //sh2C6セルにプルダウン(分類)を記述 9 10 sh2.getRange('G2').clearDataValidations(); //sh2G2セルの入力規則をクリア 11 let dropDownTeam = SpreadsheetApp.newDataValidation(); //新規入力規則を作成 12 dropDownTeam.requireValueInList(teamName); //teamNameを元にプルダウンリストを作成 13 sh2.getRange('G2').setDataValidation(dropDownTeam); //sh2G2セルにプルダウン(チーム)を記述 14 15 let opponentTeamName = teamName; 16 sh2.getRange('E7').clearDataValidations(); //sh2E7セルの入力規則をクリア 17 let dropDownOpponentTeam = SpreadsheetApp.newDataValidation(); //新規入力規則を作成 18 dropDownOpponentTeam.requireValueInList(opponentTeamName); //opponentTeamNameを元にプルダウンリストを作成 19 sh2.getRange('E7').setDataValidation(dropDownOpponentTeam); //sh2E7セルにプルダウン(対戦チーム)を記述 20}
一回修正後
GAS
1function dropDown() { 2 let gameName = sh1.getRange('B3:B32').getDisplayValues(); //sh1B3:B32セルの値の二次元配列(gameName,分類名)を取得 3 let teamName = sh1.getRange('E3:E32').getDisplayValues(); //sh1E3:E32セルの値の二次元配列(teamName,チーム名)を取得 4 5 sh2.getRange('C6').clearDataValidations(); //sh2C6セルの入力規則をクリア 6 let dropDownGame = SpreadsheetApp.newDataValidation(); //新規入力規則を作成 7 dropDownGame.requireValueInList(gameName); //gameNameを元にプルダウンリストを作成 8 sh2.getRange('C6').setDataValidation(dropDownGame); //sh2C6セルにプルダウン(分類)を記述 9 10 sh2.getRange('G2').clearDataValidations(); //sh2G2セルの入力規則をクリア 11 let dropDownTeam = SpreadsheetApp.newDataValidation(); //新規入力規則を作成 12 dropDownTeam.requireValueInList(teamName); //teamNameを元にプルダウンリストを作成 13 sh2.getRange('G2').setDataValidation(dropDownTeam); //sh2G2セルにプルダウン(チーム)を記述 14 15 sh2.getRange('E7').clearDataValidations(); //sh2E7セルの入力規則をクリア 16 let dropDownOpponentTeam = SpreadsheetApp.newDataValidation(); //新規入力規則を作成 17 dropDownOpponentTeam.requireValueInList(teamName); //opponentTeamNameを元にプルダウンリストを作成 18 sh2.getRange('E7').setDataValidation(dropDownOpponentTeam); //sh2E7セルにプルダウン(対戦チーム)を記述 19}
補足
・スプレッドシートを読み込み直すとエラーが消えます。
・G2以外の二つでは異常は発生しません。
・試しにG3セルにリストを生成してみるようにしても同じような結果になりました。
・G2セルに生成するプログラムとE7セルに生成するプログラムの順番を逆にしてもG2セルのみエラーが出ました
・このfunctionのトリガーはonEdit関数によってsh1(画像1枚目)シートが編集された時に処理されるように設定しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/06/15 04:39
2024/06/15 05:03
2024/06/15 05:56