LoginSignup
Roukwa256
@Roukwa256

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

GASのエラー(App Scriptでドロップダウンリストを作りたい)

解決したいこと

https://www.youtube.com/watch?v=s-I8Z4nTDak
上の動画を参考に、
Google Sheets上でDependent Drop Down Listを実現するべく
コーデイング(ほぼ丸写しした・・・はずですが)しましたが、実行すると以下のエラーが発生します。

Exception: The parameters (null,number) don't match the method signature for SpreadsheetApp.Sheet.getRange

var mainWsName = "Input";
var optionsWsName = "Product List";
var firstLevelColumn = 2;
var secondLevelColumn = 3;
var thirdLevelColumn = 4;


var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(mainWsName);
var wsOptions = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(optionsWsName);
var options = wsOptions.getRange(2, 1,wsOptions.getLastRow()-1,3).getValues();



function onEdit(activeCell){
  var activeCell = ws.getActiveCell();
  var val = activeCell.getValue();
  var r = activeCell.getRow();
  var c = activeCell.getColumn();
  var wsName = activeCell.getSheet().getName();
  if(wsName === mainWsName && c === firstLevelColumn && r > 1){
    applyFirstLevelValidation(val,r);   
  } else if(wsName === mainWsName && c === secondLevelColumn && r > 1){
    applySecondLevelValidation(val,r); 
  } 


} //end onEdit

function applyFirstLevelValidation(val,r){

   if(val === ""){
      ws.getRange(r, secondLevelColumn).clearContent();
      ws.getRange(r, secondLevelColumn).clearDataValidations();     
    } else {
      ws.getRange(r, secondLevelColumn).clearContent();
      ws.getRange(r, secondLevelColumn).clearDataValidations();
      var filteredOptions = options.filter(function(o){ return o[0] === val });
      var listToApply = filteredOptions.map(function(o){ return o[1] });
      var cell = ws.getRange(r, secondLevelColumn);
      applyValidtionToCell(listToApply,cell); 
    } 

}





function applyValidtionToCell(list,cell){


 var rule = SpreadsheetApp
 .newDataValidation()
 .requireValueInList(list)
 .setAllowInvalid(false) 
 .build();

  cell.setDataValidation(rule);
}

自分で試したこと

英語&国語でググってみましたが、解決策は見つからず。GASでプログラム初学者なので
完全に手詰まりです。
Google Sheetsは2行目で製品のジャンルを選択するとそのジャンルの製品が3...4行目のドロップダウンメニューに表示されるSheetを目指しています。
一応動くのですが、エラーが気になってこの質問を投稿しました。
同じ問題が起こっている方、解決できた方、お知恵&ご助言いただければ幸ひです。

0

1Answer

動画内のコメントや上記サイトでも同じ質問が上がってましたね。

動いている人もいる?ようなので、
GASあるある、V8を利用しているかどうかによって変わるかもしれないですね。
(動画はUI見る限り利用していない旧版)

1

Comments

  1. @Roukwa256

    Questioner
    harmless_3d6さん
    お時間を割いていただきありがとうございます。
    GASあるあるなんですね、V8を利用する/しないで
    そんなに違ふんですね。もう少し研究してみます。

Your answer might help someone💌