2016-03-24 16 views
1

同じ行の別のセルに基づく内容のドロップダウンメニューを作成しようとしています。たとえば、A1 = 'yes'の場合​​、B2のドロップダウンで 'yes'または 'no'のオプションが表示されます。私はこれを行うことができます私はリストのデータを設定し、コードの作品を​​持っている。問題は、これを4枚の異なるシートで155回行う必要があることです。これを行うより速い方法は、各セルのデータ検証ルールを右クリックして編集するよりも簡単です。ここで私が働いているテストシートへのリンクです:Googleのシートに一括入力データ検証の方法はありますか

https://docs.google.com/spreadsheets/d/1rd_Ig_wpof9R_L0IiA1aZ9syO7BWxb6jvBhPqG8Jmm4/edit?usp=sharing

答えて

0

スクリプト、as documented hereとのデータ検証ルールを設定することができます。 starting with Apps scriptsの参照は次のとおりです。

私はあなたの説明どおりの機能を書いています。現在のスプレッドシートのシート「9th grade」の範囲B3:B157で動作します。それぞれに対して、妥当性検査ルールは、「List Data」シートの同じ行、B列およびC列の値に設定されます。

....... = listData.getRange(i+3, 2, 1, 2); 

の行は、検証のソース範囲が異なる場合に変更する必要があります。ここで、パラメータは、開始行、開始列、行数、列数です。したがって、2列目は2列目から、行番号はi + 3になります。

function setRules() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var grade = ss.getSheetByName('9th Grade'); 
    var listData = ss.getSheetByName('List Data'); 
    var range = grade.getRange('B3:B157'); 
    var rules = range.getDataValidations(); 
    for (var i = 0; i < rules.length; i++) { 
    var sourceRange = listData.getRange(i+3, 2, 1, 2); 
    rules[i][0] = SpreadsheetApp.newDataValidation().requireValueInRange(sourceRange).build(); 
    } 
    range.setDataValidations(rules); 
} 
+0

私は "TypeError:null"のメソッド "getRange"を呼び出すことはできません(行8、ファイル "コード") "の行8を参照してください。 – Chris

+0

メッセージは、シートポインタではなく、listDataがnullであることを示します。これは 'var listData = ss.getSheetByName( 'List Data');という行で取得されたもので、スプレッドシートに「List Data」という名前のシートがあるかどうかの疑問が生じます。 –

0

私はdiferent理由でこの問題に上陸:「1列にだけ質量DataValidationコピー(または更新)」。ありがとう、私に光をもたらすuser3717023。 誰かがこの単純化を助けることを願っています。

function setRules() { 
    //select spreadsheet 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var leads = ss.getSheetByName('Leads'); 

    //Select correct Datavalidation 
    var rangeNewDataValidation = leads.getRange('M2:M2'); 
    var rule = rangeNewDataValidation.getDataValidations(); 

    //Copy (or Update) Datavalidation in a specific (13 or 'M') column 
    var newRule = rule[0][0].copy(); 
    Logger.log(leads.getMaxRows()) 
    for(var i=3; i <= leads.getMaxRows(); i++){ 
    var range = leads.getRange(i, 13); 
    range.setDataValidations([[newRule.build()]]); 
    } 

} 
関連する問題