2017-01-12 7 views
0

私が使用しています:データ検証スクリプト

function datavalidation(event) { 
    var ColA = 1; 
    var changedRange = event.source.getActiveRange(); 
    if (changedRange.getColumn() == ColA) { 
    var destinationRange = event.source.getActiveSheet().getRange(changedRange.getRow(),ColA+1); 

    var sourceRange = event.source.getActiveSheet().getRange(changedRange.getRow(),ColA+2,changedRange.getColumn(),10); 
    var rule = SpreadsheetApp.newDataValidation().requireValueInRange(sourceRange).build(); 
    var rules = destinationRange.getDataValidations(); 
    for (var i = 0; i < rules.length; i++) { 
    for (var j = 0; j < rules[i].length; j++) { 
    rules[i][j] = rule; 
    } 
} 
destinationRange.setDataValidations(rules); 
} 
} 

を1列が編集されたときに、列2のドロップダウンメニューを作成します。それは大部分はうまくいきますが、2列目のデータ検証を削除すると、予期せぬことが起こっています。これを実行すると、2行目の最初の行のスクリプトが実行されます列1を変更しないでください。ここで何が起こっているのかを理解しようとしています。おかげ

はここに公共のドキュメントを参照してください:ソース範囲を設定するためのhttps://docs.google.com/spreadsheets/d/1kYncT7bOYWp73yr3Lh4LQreTpRFc8lZL3siqpP4xsvA/edit?usp=sharing

+0

私はあなたがこの[DataValidation](https://developers.google.com/apps-script/reference/spreadsheet/data-validation)をチェックすることをお勧めして[DataValidationBuilder](https://developers.google .com/apps-script/reference/spreadsheet/data-validation-builder)を使用して、検証がコード内でどのように機能するかを確認します。それはそれを使用する方法を知るためのいくつかのサンプルコードを提供します。ドロップダウンメニューに関する問題については、これらの質問[Appsスクリプトを使用したデータ検証](http://stackoverflow.com/questions/17686068)と[Googleシートの依存ドロップダウン?](http://stackoverflow.com)を確認してみてください。/questions/21744547)を参照してください。 – KENdi

+0

あなたの提案をありがとう。このスクリプトはテストシートで動作しているようですが、他のシートでは機能しません。データvaladationの部分は正しいですが、私は主な問題はこれだと思います: ".getRange(changedRange.getRow()、ColA + 2、changedRange.getColumn()、10);"ソース範囲を設定するために別の方法を使用する必要があると私は信じています。 – user2969867

答えて

0

方法が間違っていました。

function datavalidation(event) { 
    var ColA = 1; 
    var changedRange = event.source.getActiveRange(); 
    if (changedRange.getColumn() == ColA) { 
    var destinationRange = event.source.getActiveSheet().getRange(changedRange.getRow(),ColA+1); 

    var sourceRange = event.source.getActiveSheet().getRange(changedRange.getRow(),2,1,10); 
    var rule = SpreadsheetApp.newDataValidation().requireValueInRange(sourceRange).build(); 
    var rules = destinationRange.getDataValidations(); 
    for (var i = 0; i < rules.length; i++) { 
    for (var j = 0; j < rules[i].length; j++) { 
    rules[i][j] = rule; 
    } 
} 
destinationRange.setDataValidations(rules); 
} 
}