スプレッドシートでのデータ入力時、「入力ミスが多くて困る」「決められたフォーマットで入力してほしい」といった課題はありませんか? Google Apps Script (GAS) の getDataValidation() メソッドを使えば、こうした悩みを解決し、データ品質を飛躍的に向上させることができます。
このメソッドは、セルに設定された入力規則をスクリプトで取得・操作するための強力なツールです。
この記事では、getDataValidation() の基本的な使い方から、実務で役立つ応用テクニックまで、具体的なサンプルコードを交えながら徹底的に解説します。GAS初心者の方でも理解できるよう、丁寧に説明していくのでご安心ください。

getDataValidation()メソッドの基本:まずはここから!
まずは、getDataValidation() メソッドの基本的な使い方をマスターしましょう。特定のセルの入力規則を取得する方法と、範囲内の複数セルの規則をまとめて取得する方法について解説します。
1. 単一セルの入力規則を取得する
getDataValidation() は、指定したセルに設定されている入力規則(DataValidation オブジェクト)を取得するメソッドです。もしセルに入力規則がなければ、null を返します。
▼ サンプルコード
以下のコードは、アクティブなシートのセル B5 から入力規則を取得し、その「種類」と「ヘルプテキスト」をログに出力する例です。
function checkSingleCellValidation() {
// B5セルを取得
const cell = SpreadsheetApp.getActive().getRange('B5');
// 入力規則を取得
const validation = cell.getDataValidation();
if (validation !== null) {
// 規則が存在する場合の処理
console.log('入力規則のタイプ:', validation.getCriteriaType());
console.log('ヘルプテキスト:', validation.getHelpText());
} else {
// 規則が存在しない場合の処理
console.log('このセルには入力規則が設定されていません。');
}
}
2. 複数セルの入力規則をまとめて取得する (getDataValidations)
複数のセルの入力規則を一つずつ処理するのは非効率です。getDataValidations() メソッドを使えば、指定した範囲(レンジ)全体の入力規則を二次元配列として一括で取得できます。
▼ サンプルコード
‘サンプル’という名前のシートの A1:D10 の範囲にあるすべての入力規則を取得し、ログに出力します。
function processRangeValidations() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('サンプル');
const range = sheet.getRange('A1:D10');
const validations = range.getDataValidations();
// 取得した二次元配列をループ処理
validations.forEach((row, rowIndex) => {
row.forEach((validation, colIndex) => {
if (validation !== null) {
// セルのアドレスを「A1形式」で取得
const cellAddress = range.getCell(rowIndex + 1, colIndex + 1).getA1Notation();
console.log(`セル ${cellAddress} の入力規則タイプ:`, validation.getCriteriaType());
}
});
});
}
実践!入力規則を活用したデータ管理テクニック
基本を理解したところで、次に応用的な使い方を見ていきましょう。入力規則を動的に扱うことで、より高度なデータ管理が実現できます。
1. 入力規則の「条件」に応じて処理を分岐させる
getCriteriaType() を使って取得した入力規則の種類に応じて、処理を分岐させることができます。これにより、「数値が特定の範囲内か」「チェックボックスか」といった条件別に異なるアクションを実行できます。
▼ サンプルコード
セル C3 の入力規則を調べ、その種類に応じたメッセージをログに出力します。
function validateInputCriteria() {
const cell = SpreadsheetApp.getActive().getRange('C3');
const validation = cell.getDataValidation();
if (validation) {
switch(validation.getCriteriaType()) {
// 数値が「〜の間」の場合
case SpreadsheetApp.DataValidationCriteria.NUMBER_BETWEEN:
const [min, max] = validation.getCriteriaValues();
console.log(`数値範囲が設定されています: ${min} から ${max} まで`);
break;
// チェックボックスの場合
case SpreadsheetApp.DataValidationCriteria.CHECKBOX:
console.log('チェックボックス形式の入力規則です。');
break;
// それ以外の場合
default:
console.log('その他の入力規則が設定されています。');
}
}
}
2. 動的な入力値バリデーションシステムを構築する
入力規則を使い、ユーザーが入力した値がルールに準拠しているかをリアルタイムでチェックする「バリデーションエンジン」を作成できます。入力ミスを即座に検知し、ユーザーに通知する仕組みを構築しましょう。
▼ サンプルコード
セル E5 の値が、設定された入力規則を満たしているかチェックし、違反している場合はアラートを表示します。
function dynamicValidationEngine() {
const cell = SpreadsheetApp.getActive().getRange('E5');
const validation = cell.getDataValidation();
if (!validation) return; // 規則がなければ終了
const currentValue = cell.getValue();
const criteria = validation.getCriteriaType();
const params = validation.getCriteriaValues();
let isValid = false;
// 規則のタイプに応じて検証ロジックを分岐
switch(criteria) {
case SpreadsheetApp.DataValidationCriteria.NUMBER_NOT_EQUAL:
isValid = currentValue !== params[0];
break;
case SpreadsheetApp.DataValidationCriteria.TEXT_CONTAINS:
isValid = String(currentValue).includes(params[0]);
break;
case SpreadsheetApp.DataValidationCriteria.DATE_AFTER:
isValid = new Date(currentValue) > new Date(params[0]);
break;
}
// 検証結果が不正な場合
if (!isValid) {
SpreadsheetApp.getUi().alert('入力値が設定された入力規則に違反しています。');
}
}
【応用編】getDataValidation()で業務を自動化する設計例
getDataValidation() のポテンシャルはこれだけではありません。さらに高度な自動化システムの設計例を2つ紹介します。
1. チェックボックスの状態管理システム
スプレッドシート上の大量のチェックボックスの状態を一元管理するシステムです。例えば、タスク管理シートで「完了」チェックボックスがオンになったら、関連する他のセルの入力規則を「編集不可」に動的に変更する、といった連携処理が可能です。
2. 入力規則を設計図にした動的なフォーム生成
スプレッドシートを「フォームの設計図」として利用し、Googleフォームを自動生成するシステムです。「リストから選択」の入力規則を読み取り、対応するフォームのプルダウン項目を自動で作成することができます。フォームの項目が頻繁に変わる場合に非常に便利です。
まとめ
getDataValidation() は、スプレッドシートの入力規則をGASで柔軟に操作するための重要なメソッドです。このメソッドを使いこなせば、以下のようなメリットがあります。
- データ品質の向上: 入力ミスやフォーマットの揺れを防ぐ
- 業務プロセスの自動化: 手作業によるチェックや修正作業を削減
- 高度なシステムの構築: 動的なデータ管理や他サービスとの連携
本記事で紹介した基本から応用までのテクニックを参考に、あなたのスプレッドシート業務をさらに効率化・自動化してみてください。


はじめに 大勢が共有して利用するシートにおいて、人的ミスは避けられない。(※繰り返し) 以前に投稿した『Google Apps Scriptを用いたスプレッドシート保護の設定を行う』では、編集可能な人を制限することでシートの不用意な改変の防止を試みた。 本稿では、指定範囲...