1

予定を追跡するためのスプレッドシートを作成しました。このスプレッド シート内には、動的に依存するドロップ ダウン リストがあるため、リスト 1 から選択すると、リスト 2 のオプションが入力されます。これは次のとおりです。

セル C2: クライアント - クライアント 1 またはクライアント 2 (これは例を使用するためのもので、実際のリストは展開されます。)

セル C2 = クライアント 1 の場合、アドレス ドロップダウンは次のようになります。

セル C3: 住所 - 住所 1 または住所 2。

セル C2 = クライアント 2 の場合、アドレス ドロップダウンは次のようになります。

セル C3: 住所 - 住所 3 または住所 4。

クライアント リストのデータ検証は、これが定数であり、列から列にコピーできるため簡単です。ただし、従属アドレス リストのデータ検証は、常に列 C を参照し、相対クライアント リストとの接続が失われるため、複数の列にコピーすることはできません。

セル C3 (アドレス リスト) の実際のデータ検証は以下のとおりです。

セル範囲 = '日記 (V-2.1)'!C3

基準 = '日記 (V-2.1)'!C53:C55

セル C53:C55 は、セル C2 のクライアントの選択に応じて関連するアドレスを並べ替えるフィルター式によって入力されます。これにより、C3 のアドレス リストが入力されます。

列ごとに 10 セットのこれらの予定スロット (1 日あたり 10 セット) があることに注意する価値があるかもしれません。したがって、これらの個別の予定のそれぞれにフィルター関数を使用して、それらが独立して機能するようにしましたが、これでも面倒なので、列 C から列 (またはデータ検証のみ) をコピーし、その列のフィルター関数に相対的なままにすることができます。

スプレッドシートの例への以下のリンクを参照してください。これはすべて意味があります。この例では、列 C を列 D にコピーし、住所リストのデータ検証を 10 の予定スロットすべてに対して切り離しました。(編集はどなたでも自由にできます。)

https://docs.google.com/spreadsheets/d/1sOlQEzG1D29RaY86YeR1Da--c8t94J-ZAGjv52U4dsY/edit#gid=1950191921

注: これらのセルは、この特定のスプレッドシートの機能のために、ドロップダウン リスト (範囲からのリスト) である必要があります。

誰かがこれを手伝うことができれば、フォーラムを熱心に調べて解決策を見つけることができないので、大いに感謝します. Javaスクリプトを使用してこれを達成しているように見えるこのビデオ(私の頭をはるかに超えています)を見ました:

https://www.youtube.com/watch?v=ZiYnuZ8MwgM&feature=youtu.be

4

2 に答える 2

9

現在、Google スプレッドシートには、データ検証参照または数式を相対的にコピー/入力するための組み込みソリューションがありません。しかし、このGoogle Docs フォーラムの投稿で、誰かが既に素晴らしいスクリプトを書いています。回答としてのリンクだけを避けるために、ここにスクリプトと手順をコピーします。Google ドキュメント フォーラムのAD:AMの功績によるものです。

スクリプトの使用方法:

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

スクリプトが既に含まれている元のソリューションの例の Google スプレッドシートへのリンク- 独自のコピーを保存してから使用を開始できます。

または、ゼロから再作成するには、次のスクリプトを使用します。

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);
}
于 2017-12-03T22:16:51.703 に答える