1. ホーム
  2. /
  3. [GAS]
  4. /
  5. GAS getDataValidations()で入力規則を一括操作!業務自動化テクニック

GAS getDataValidations()で入力規則を一括操作!業務自動化テクニック

GAS getDataValidations()で入力規則を一括操作!業務自動化テクニック

スプレッドシートで多数のセルに入力規則を設定していると、「一部のルールだけ一括で変更したい」「設定をバックアップしておきたい」といったニーズが出てきます。しかし、これらを手作業で行うのは非常に面倒で、ミスも起こりがちです。

そんな課題を解決するのが、Google Apps Script (GAS) の getDataValidations() メソッドです。

このメソッドを使えば、指定した範囲の入力規則をまとめて取得し、プログラムで効率的に操作できます。この記事では、getDataValidations() の基本から、設定の一括更新やバックアップといった実践的な自動化テクニックまで、詳しく解説します。

Google Apps Script 始め方 スプレッドシート 活用例
Google Apps Script 始め方 スプレッドシート 活用例 を各ショップで検索

getDataValidations()の基本 - 範囲の入力規則をごっそり取得

getDataValidations() は、Range オブジェクト(セルの範囲)に設定されたすべての入力規則を、DataValidation オブジェクトの二次元配列として取得します。

  • 入力規則があるセル: DataValidation オブジェクトが格納される
  • 入力規則がないセル: null が格納される

この二次元配列の構造は、スプレッドシートの行と列の配置にそのまま対応しているため、直感的に扱うことができます。

▼ 基本的な使い方 A1:C3 の範囲にあるすべての入力規則を取得し、その種類をログに出力するサンプルコードです。

function fetchAllValidations() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getRange('A1:C3');
  // 範囲内の入力規則を二次元配列で取得
  const validations = range.getDataValidations();

  // 二次元配列をループ処理
  validations.forEach((row, rowIndex) => {
    row.forEach((rule, colIndex) => {
      if (rule !== null) {
        // DataValidationオブジェクトから基準タイプを取得
        const criteriaType = rule.getCriteriaType();
        // セルの番地(A1形式)を計算して表示
        const cellAddress = String.fromCharCode(65 + colIndex) + (rowIndex + 1);
        console.log(`セル ${cellAddress} の規則: ${criteriaType}`);
      }
    });
  });
}

取得したDataValidationオブジェクトを解析する

取得した DataValidation オブジェクトからは、入力規則の様々な設定情報を読み取れます。これにより、ルールの詳細な分析が可能です。

主要なメソッド説明
getCriteriaType()規則の種類(例: DATE_BEFORE, VALUE_IN_RANGE)を取得
getCriteriaValues()規則の条件値(例: 日付、数値、リストの参照範囲)を配列で取得
getHelpText()セル選択時に表示されるヘルプテキストを取得
getAllowInvalid()無効なデータ入力を許可するかどうか(true/false)を取得

これらのメソッドを組み合わせることで、複雑な入力規則も正確に把握できます。

実践!特定の入力規則をピンポイントで取得する方法

getDataValidations() で取得した配列の中から、特定の種類の入力規則だけを抜き出して処理する方法を解説します。

1. ドロップダウンリスト(範囲参照)の選択肢を取得

ドロップダウンの選択肢が別シートの範囲を参照している場合、その参照先の値を取得します。

function getDropdownValues() {
  const cell = SpreadsheetApp.getActiveSheet().getRange('A1');
  const validation = cell.getDataValidation();

  // 基準タイプが「範囲内のリスト」かを確認
  if (validation && validation.getCriteriaType() === SpreadsheetApp.DataValidationCriteria.VALUE_IN_RANGE) {
    // 基準値から参照範囲(Rangeオブジェクト)を取得
    const sourceRange = validation.getCriteriaValues()[0];
    // 参照範囲の値を取得し、空のセルを除外して一次元配列に変換
    const values = sourceRange.getValues().flat().filter(String);
    console.log('ドロップダウンの選択肢:', values);
  }
}

2. チェックボックスのON/OFF時の値を取得

チェックボックスにカスタムで設定された「チェック時の値」と「未チェック時の値」を取得します。

function getCheckboxCustomValues() {
  const cell = SpreadsheetApp.getActiveSheet().getRange('B1');
  const checkboxValidation = cell.getDataValidation();

  if (checkboxValidation && checkboxValidation.getCriteriaType() === SpreadsheetApp.DataValidationCriteria.CHECKBOX) {
    // 基準値から [チェック時の値, 未チェック時の値] の配列を取得
    const [checkedValue, uncheckedValue] = checkboxValidation.getCriteriaValues();
    console.log(`チェック時の値: ${checkedValue}, 未チェック時の値: ${uncheckedValue}`);
  }
}

【応用】業務を効率化する自動化スクリプト例

getDataValidations() を活用すれば、手動では時間がかかる作業も一瞬で完了できます。

1. 入力規則の一括更新

シート全体の「今日より前の日付」という日付規則を、常に最新の状態に更新します。

function updateAllDateValidations() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getDataRange();
  const rules = range.getDataValidations();
  
  const newRules = rules.map(row => {
    return row.map(rule => {
      // 日付が指定日より前であるかチェックする規則のみを対象
      if (rule && rule.getCriteriaType() === SpreadsheetApp.DataValidationCriteria.DATE_BEFORE) {
        const today = new Date(); // 新しい基準日として今日の日付を設定
        // 既存のルールをコピーして新しい基準で再構築
        return rule.copy().withCriteria(rule.getCriteriaType(), [today]).build();
      }
      return rule; // 対象外のルールはそのまま返す
    });
  });
  
  // 更新した入力規則の二次元配列を範囲に再設定
  range.setDataValidations(newRules);
}

2. 入力規則の設定をバックアップ・複製する

シートのすべての入力規則をJSON形式でエクスポートします。これにより、設定のバックアップや、他のシートへの複製が容易になります。

function exportValidationsToJson() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getDataRange();
  const rules = range.getDataValidations();
  const validationsData = {};
  
  rules.forEach((row, rowIndex) => {
    row.forEach((rule, colIndex) => {
      if (rule) {
        const cellAddress = range.getCell(rowIndex + 1, colIndex + 1).getA1Notation();
        validationsData[cellAddress] = {
          criteria: rule.getCriteriaType().toString(),
          values: rule.getCriteriaValues().map(v => (v.constructor.name === 'Range' ? v.getA1Notation() : v)),
          helpText: rule.getHelpText()
        };
      }
    });
  });
  
  // JSON文字列として出力
  console.log(JSON.stringify(validationsData, null, 2));
}

パフォーマンスに関する注意点

getDataValidations()setDataValidations() は、APIへのリクエストを伴うため、数千〜数万といった大量のセルに対して実行すると処理が遅くなることがあります。

大規模なシートでパフォーマンスが問題になる場合は、一度に処理する範囲を小さく分割する「バッチ処理」を検討しましょう。

まとめ

getDataValidations() は、スプレッドシートの入力規則をプログラムで柔軟に扱うための強力な武器です。

  • 一括取得: 面倒なルールの棚卸しや分析を自動化
  • 一括更新: 仕様変更にも迅速に対応
  • 設定のエクスポート: バックアップや他シートへの展開が容易に

このメソッドを使いこなし、データ管理の品質と効率をさらに向上させましょう。

Google Apps Script 始め方 スプレッドシート 活用例
Google Apps Script 始め方 スプレッドシート 活用例 を各ショップで検索
Spreadsheet Service | Apps Script | Google for Developers

【GAS】スプレッドシートのデータの入力規則機能まとめ【サンプルソース付】

GAS開発者向けにスプレッドシートのデータの入力規則機能をすべてまとめました。変なデータを入力させたくない時など、入力に制限をかけたい時、メチャクチャ便利ですね。GASのインプットにセルの値を使用する場合はガチガチにガードをかけておくと、実

関連記事

GASで入力規則をマスター!getDataValidation()徹底活用術【入門から応用まで】

GASで入力規則をマスター!getDataValidation()徹底活用術【入門から応用まで】

スプレッドシートでのデータ入力時、「入力ミスが多くて困る」「決められたフォーマットで入力してほしい」といった課題はありませんか? Google Apps Script (GAS) の getDataValidation() メソッドを使えば、こうした悩みを解決し、データ品質を飛躍的に向上させることができます。

このメソッドは、セルに設定された入力規則をスクリプトで取得・操作するための強力なツールです。

この記事では、getDataValidation() の基本的な使い方から、実務で役立つ応用テクニックまで、具体的なサンプルコードを交えながら徹底的に解説します。GAS初心者の方でも理解できるよう、丁寧に説明していくのでご安心ください。

GASでフィルターを自動操作!getFilter()でデータ絞り込みを効率化する方法

GASでフィルターを自動操作!getFilter()でデータ絞り込みを効率化する方法

スプレッドシートで大量のデータを扱う際、「特定の条件で絞り込んで表示する」フィルター機能は欠かせません。しかし、毎日同じ条件でフィルターをかけ直したり、データが追加されるたびに範囲を再設定したりするのは、地味に面倒な作業です。

Google Apps Script (GAS) の getFilter() メソッドを使えば、こうしたフィルター操作を完全に自動化できます。

この記事では、getFilter() の基本から、既存フィルターの更新や、スクリプト実行時に特定の条件で自動的にデータを絞り込む応用テクニックまで、分かりやすく解説します。