Python 業務自動化 | Excel業務自動化:Excel基本操作 - データ検証設定

Python Python
スポンサーリンク

データ検証設定は「入力ミスを防ぎ、Excelを“壊れないシート”にする」ための最強テクニック

Excel業務自動化では、データ検証(Data Validation)が非常に重要です。
なぜなら、次のような業務上の問題を防げるからです。

  • 入力欄に数字以外が入ってしまう
  • 選択肢以外の文字が入力されてしまう
  • 日付欄に未来日や過去日が入ってしまう
  • 入力漏れが発生してしまう

Pythonの openpyxl を使えば、
Excelの「データの入力規則」を自動で設定できます。

初心者でも理解しやすいように、基本から実務テンプレートまで丁寧に解説します。


数値のみ入力可能にする(最もよく使うデータ検証)

A列に「1〜100 の数値のみ」入力できるようにする

from openpyxl import load_workbook
from openpyxl.worksheet.datavalidation import DataValidation

wb = load_workbook("sample.xlsx")
ws = wb["Sheet1"]

dv = DataValidation(type="whole", operator="between", formula1="1", formula2="100")
dv.error = "1〜100の数値を入力してください"
dv.errorTitle = "入力エラー"

ws.add_data_validation(dv)
dv.add("A2:A100")

wb.save("sample.xlsx")
Python

深掘りポイント

  • type="whole" は「整数のみ」
  • operator="between" で範囲指定
  • formula1formula2 が下限・上限
  • errorerrorTitle でエラーメッセージを設定できる
  • Excelの「データの入力規則 → 整数 → 1〜100」と同じ動作

リストから選択させる(プルダウンメニュー)

B列に「完了 / 未完了 / 保留」のプルダウンを作る

from openpyxl.worksheet.datavalidation import DataValidation

dv = DataValidation(type="list", formula1='"完了,未完了,保留"')
dv.error = "選択肢から選んでください"

ws.add_data_validation(dv)
dv.add("B2:B100")
Python

深掘りポイント

  • type="list" でプルダウン
  • formula1='"A,B,C"' のように カンマ区切りで文字列を指定
  • Excelの「リスト」検証と同じ
  • ステータス管理で最も使われる

別シートのリストを参照する(実務で最も使う)

「マスタ」シートの A2:A10 をプルダウンにする

dv = DataValidation(type="list", formula1="=マスタ!$A$2:$A$10")

ws.add_data_validation(dv)
dv.add("C2:C100")
Python

深掘りポイント

  • =シート名!$A$2:$A$10 のように 絶対参照 を使う
  • マスタ管理(商品名・部署名・担当者名など)で必須
  • 選択肢をExcel側で管理できるため、運用が楽になる

日付の範囲を制限する(期限管理に最適)

今日以降の日付しか入力できないようにする

from openpyxl.worksheet.datavalidation import DataValidation

dv = DataValidation(type="date", operator="greaterThanOrEqual", formula1="=TODAY()")
dv.error = "今日以降の日付を入力してください"

ws.add_data_validation(dv)
dv.add("D2:D100")
Python

深掘りポイント

  • type="date" で日付検証
  • formula1="=TODAY()" で「今日以降」
  • 期限管理・スケジュール管理で非常に便利

文字数制限を設定する(入力フォームで必須)

E列に「最大20文字まで」の制限を付ける

dv = DataValidation(type="textLength", operator="lessThanOrEqual", formula1="20")
dv.error = "20文字以内で入力してください"

ws.add_data_validation(dv)
dv.add("E2:E100")
Python

深掘りポイント

  • type="textLength" で文字数制限
  • 入力フォームやコメント欄でよく使う

空欄禁止(必須入力項目)

F列を必須入力にする

dv = DataValidation(type="custom", formula1='=LEN(F2)>0')
dv.error = "必須項目です"

ws.add_data_validation(dv)
dv.add("F2:F100")
Python

深掘りポイント

  • type="custom" で自由な数式を使える
  • LEN(F2)>0 は「文字数が0より大きい=空欄ではない」
  • 入力漏れ防止に最適

例題①:売上入力シートに「数値+プルダウン+必須入力」を設定する

シナリオ

A列:商品名(必須)
B列:数量(1〜999)
C列:ステータス(完了/未完了)

# 商品名(必須)
dv1 = DataValidation(type="custom", formula1='=LEN(A2)>0')
ws.add_data_validation(dv1)
dv1.add("A2:A100")

# 数量(1〜999)
dv2 = DataValidation(type="whole", operator="between", formula1="1", formula2="999")
ws.add_data_validation(dv2)
dv2.add("B2:B100")

# ステータス(プルダウン)
dv3 = DataValidation(type="list", formula1='"完了,未完了"')
ws.add_data_validation(dv3)
dv3.add("C2:C100")
Python

解説

  • 入力ミスを完全に防げる
  • 売上入力フォームとしてそのまま使える

例題②:日付欄に「過去日禁止」の検証を付ける

dv = DataValidation(type="date", operator="greaterThanOrEqual", formula1="=TODAY()")
ws.add_data_validation(dv)
dv.add("A2:A100")
Python

解説

  • スケジュール管理・タスク管理で必須
  • 過去日を入力するとエラーが出る

例題③:マスタ参照のプルダウンを作る(実務で最強)

シナリオ

「部署マスタ」シートの A2:A20 を参照する

dv = DataValidation(type="list", formula1="=部署マスタ!$A$2:$A$20")
ws.add_data_validation(dv)
dv.add("B2:B100")
Python

解説

  • マスタを更新すればプルダウンも自動更新
  • 大規模Excelで最も使われるパターン

データ検証設定を業務で設計するときの視点

  • 数値・文字列・日付・リストなど、入力制限を細かく設定できる
  • エラーメッセージを付けるとユーザーが迷わない
  • マスタ参照のプルダウンは運用が圧倒的に楽
  • custom(数式)を使うと自由度が一気に上がる
  • pandasではデータ検証ができないため、openpyxlが必須

タイトルとURLをコピーしました