2017-11-21 7 views
0

Googleシートのデータ検証を使用して次の状況を達成しようとしています。私は下の画像に切り捨てられた状況を提示しました。他のセルの値に基づいた動的データ検証、各行の相対的な下向きの検証基準のコピー/充填(Googleシート)

私は、列C(または同じ行の複数の列)のオプションを自動的にチェックして、その行のドロップダウンメニューを設定する列Bでデータ検証をセットアップしたいと考えています。

Googleシートにデータ検証画面の数式オプションがあり、このエリアに配列式を書き込もうとしましたが、何らかの出力が得られていません。

このメニューではできない場合は、スクリプトを使用してこれを達成する方法がわかります。これを達成するための

Spreadsheet illustrating situation

答えて

0

一つの方法は、データの検証エディタの「基準」セクションでlist from a rangeを選択することです。次に、値を表示するセルをドロップダウンに選択します。

Example Data Validation settings

唯一の問題は、あなたが列全体でこれをフィルダウンしようとすると、Googleシートが基準範囲を更新しないということです。 list from a rangeに基づいたデータの検証を使用して、セルB2

  1. と基準が範囲としてD2:F2を選択します。あなたは次の操作を行うと言います。今B2のドロップダウンを使用すると、セルB3のためのドロップダウンを開くと、それはまだ意志
  2. 列全体渡ってダウンし、このセルを下に記入したりコピーし、次にオプションジョンのママ、ジョンのお父さん、ジョンのおばあちゃん
  3. を持っていますオプションジョンのママ、ジョンのお父さん、ジョンのおばあちゃん

は、残念ながら、Googleスプレッドシートでは、現在、私の知る限りでは、比較的データ検証の参照や数式を充填/コピーための組み込みソリューションを持っていないしています。しかし、誰かが既にこの素敵なスクリプトを書いているようです。Google Docs forum post。答えとしてリンクだけを避けるために、ここでスクリプトと指示をコピーします。 Google DocsフォーラムのAD:AMへの寄付。

そのスクリプトを使用する方法

  1. は、データ検証ルールをコピーする間でセルの範囲を選択し、比較的
  2. 検証+カスタムメニューから、適切なオプション(すべてを選択します相対参照、左上のセルの検証が範囲の残りの部分にコピーされる
  3. 列絶対、または行を絶対)

Link to original solution's example Google Sheets with script already included - 自分のコピーを保存してから使用することができます。

または最初から再作成するには、ここにスクリプトがあります。

function onOpen() 
{ 
    SpreadsheetApp.getActiveSpreadsheet().addMenu 
    (
    "Validation+", 
    [ 
     {name: "Copy validation (all relative references)", functionName: "copyValidation"}, 
     {name: "Copy validation (relative rows, absolute columns)", functionName: "copyValidationColumnsAbsolute"}, 
     {name: "Copy validation (absolute rows, relative columns)", functionName: "copyValidationRowsAbsolute"} 
    ] 
); 
} 

function copyValidation(rowsAbsolute, columnsAbsolute) 
{ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var r = ss.getActiveRange(); 
    var dv = r.getDataValidations(); 
    var dvt = dv[0][0].getCriteriaType(); 
    if (dvt != SpreadsheetApp.DataValidationCriteria.VALUE_IN_RANGE) return; 
    var dvv = dv[0][0].getCriteriaValues(); 
    Logger.log(dvv); 
    for (var i = 0; i < dv.length; i++) 
    { 
    for (var j = i ? 0 : 1; j < dv[0].length; j++) 
    { 

     dv[i][j] = dv[0][0].copy().withCriteria(dvt, [dvv[0].offset(rowsAbsolute ? 0 : i, columnsAbsolute ? 0 : j), dvv[1]]).build(); 
    } 
    } 
    r.setDataValidations(dv); 
} 

function copyValidationRowsAbsolute() 
{ 
    copyValidation(true, false); 
} 

function copyValidationColumnsAbsolute() 
{ 
    copyValidation(false, true); 
} 
関連する問題