openpyxl で入力規則(ドロップダウンリストなど)を設定する方法

Excel シートに 入力規則 を設けると、ユーザーが誤った値を入力するリスクを大幅に減らせます。Python の openpyxl を利用すれば、ドロップダウンリストや数値範囲などをスクリプトから一括設定できます。本記事では「ステータス列」にドロップダウンリストを追加する例を中心に、代表的なバリデーション種別(wholedecimaldatetextLengthlisttimecustom)の概要をまとめます。


目次

動作環境

項目内容
Python3.9 以上
ライブラリopenpyxl(pip install openpyxl
入力ファイル例task_tracker.xlsx
出力ファイル例task_tracker_validated.xlsx

1. ドロップダウンリスト(list)を列に設定する

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

# ① ワークブックを読み込み
wb = load_workbook('task_tracker.xlsx')
ws = wb.active

# ② 入力規則(ドロップダウン)を定義
#    候補は「Open,InProcess,Closed」
dv_status = DataValidation(
    type='list',
    formula1='"Open,InProcess,Closed"',
    allow_blank=False
)

# ③ 適用範囲を追加(E 列の 3 行目〜20 行目)
dv_status.add('E3:E20')

# ④ シートへ登録
ws.add_data_validation(dv_status)

# ⑤ 保存
wb.save('task_tracker_validated.xlsx')

解説

ステップ説明
type='list'ドロップダウンリスト形式を指定します。
formula1='"Open,InProcess,Closed"'候補値をカンマ区切りで記述します。セル参照や名前定義も利用可能です。
allow_blank=False空欄を拒否する場合に False を指定します。

2. 主なバリデーション種別と活用例

type主な用途設定例
whole整数のみ許可DataValidation(type='whole', operator='between', formula1=1, formula2=100)
decimal小数を含む数値下限 0.0 以上:operator='greaterThanOrEqual', formula1=0
date日付入力に限定DataValidation(type='date', formula1='2025-01-01', formula2='2025-12-31')
time時刻入力に限定開始時刻〜終了時刻で制限可能
textLength文字数制限formula1=1, formula2=50 で 1〜50 文字
listドロップダウンリスト本記事の例
custom複雑な数式判定DataValidation(type='custom', formula1='=LEN(A1)=5')

3. よくある質問

質問回答
複数列に同じルールを適用できますか。dv_status.add('E3:E20,F3:F20') のようにカンマ区切りで複数範囲を指定できます。
セル参照で候補を外部シートに置けますか。可能です。例:formula1='Sheet2!$A$1:$A$10' と指定します。
入力規則を解除したい場合は。ws.data_validations.dataValidation = [] でシートの全バリデーションを削除できます。

まとめ

  • DataValidation クラスを用いると、Excel の「データの入力規則」を Python から簡単に設定できます。
  • list 形式はドロップダウンを生成し、定型入力を強制したいときに有効です。
  • 数値範囲や日付制限など、用途に合わせて typeoperator を使い分けることで、入力ミスを防止し、データ品質を高められます。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次