worksheet.datavalidation【入力規則】モジュール

メモ ( 概要 基本 formula【式】の設定値 注意事項 )
関数 クラス: DataValidation【入力規則】 DataValidationList【入力規則リスト】

メモ

概要

基本

formula【式】の設定値

  • formula1【式1】formula2【式2】の設定値は下記参照
    type
    【入力値の種類】
    operator
    【関係演算子】
    formula1
    【式1】
    formula2
    【式2】
    設定値
    None【すべての値】
    'list'【リスト】元の値 ・カンマ区切りの項目
    ・項目のセル範囲アドレス
    名前定義
    'custom'【ユーザー設定】数式数式 (結果が真:入力可能)
    その他'between'【次の値の間】
    'notBetween'【次の値の間以外】
    最小値最大値 ・定数
    ・値のセルアドレス
    ・値になる数式
    名前定義 (単一セル)
    'equal'【次の値に等しい】
    'notEqual'【次の値に等しくない】
    'greaterThan'【次の値より大きい】
    'greaterThanOrEqual'【次の値以上】
    最小値
    'lessThan'【次の値より小さい】
    'lessThanOrEqual'【次の値以下】
    最大値

注意事項

  • Excel で別シートのセルを参照すると、拡張仕様として保存
    • openpyxl で読み込むと未サポートとなり、該当の入力規則を削除
    • 代替:別シートのセルを名前定義し、名前定義で参照

関数〔

関数備考
collapse_cell_addresses(
    cells,
    input_ranges=())
セルアドレス折りたたみ (連続したセルをセル範囲に変換)
※ 現状は、列方向のみ
戻り値 (str)セル範囲アドレス (複数:スペース区切り / 順不同)
cells単一セルアドレスのコレクション
input_ranges追加セルアドレスのコレクション (変換なし)
expand_cell_ranges(
    range_string)
セルアドレス展開 (セル範囲を単一セルに変換)
戻り値 (set)単一セルアドレスの集合型
range_stringセルアドレス (範囲指定可 / 複数:スペース区切り / 順不同)

DataValidation【入力規則】クラス

クラス定義

クラス備考
親:openpyxl.descriptors.serialisable.Serialisable
class DataValidation(
    type=None,
    formula1=None,
    formula2=None,
    showErrorMessage=True,
    showInputMessage=True,
    showDropDown=None,
    allowBlank=None,
    sqref=(),
    promptTitle=None,
    errorStyle=None,
    error=None,
    prompt=None,
    errorTitle=None,
    imeMode=None,
    operator=None,
    allow_blank=None,
入力規則
type (str)入力値の種類
formula1式1
formula2式2
showErrorMessage (bool)エラーメッセージの表示有無
showInputMessage (bool)入力時メッセージの表示有無
showDropDown (bool)ドロップダウンリストの表示有無
allowBlank (bool)空白無視の指定 (allow_blank)
sqref選択範囲シーケンス
promptTitle (str)タイトル (入力時メッセージ)
errorStyle (str)スタイル (エラーメッセージ)
error (str)エラーメッセージ
prompt (str)メッセージ (入力時メッセージ)
errorTitle (str)タイトル (エラーメッセージ)
imeMode (str)日本語入力モード
operator (str)関係演算子
allow_blank (bool)空白無視の指定 (優先)

プロパティ

プロパティ備考
allowBlankbool空白無視の指定
allow_blankboolallowBlank【空白無視の指定】のエイリアス
cellsMultiCellRangesqref【選択範囲シーケンス】のエイリアス
errorstrメッセージ (エラーメッセージ)
errorStyle str スタイル (エラーメッセージ)
スタイル備考
None
'stop'停止
'warning'注意
'information'情報
errorTitlestrタイトル (エラーメッセージ)
formula1str
(設定:str 自動変換)
式1 (詳細は、formula【式】の設定値)
formula2str
(設定:str 自動変換)
式2 (詳細は、formula【式】の設定値)
hide_drop_downboolshowDropDown【ドロップダウンリストの表示有無】のエイリアス
imeMode str 日本語入力モード
モード備考
None
'noControl'コントロールなし
'off'オフ (英語モード)
'on'オン
'disabled'無効
'hiragana'ひらがな
'fullKatakana'全角カタカナ
'halfKatakana'半角カタカナ
'fullAlpha'全角英数字
'halfAlpha'半角英数字
operator str 関係演算子
関係演算子備考
None(次の値の間)
'between'次の値の間
'notBetween'次の値の間以外
'equal'次の値に等しい
'notEqual'次の値に等しくない
'greaterThan'次の値より大きい
'lessThan'次の値より小さい
'greaterThanOrEqual'次の値以上
'lessThanOrEqual'次の値以下
promptstrメッセージ (入力時メッセージ)
promptTitlestrタイトル (入力時メッセージ)
rangessqref【選択範囲シーケンス】のエイリアス
showDropDownboolドロップダウンリストの表示有無 (入力値の種類:リスト)
showErrorMessageboolエラーメッセージの表示有無
showInputMessagebool入力時メッセージの表示有無
sqrefMultiCellRange 選択範囲シーケンス
単一セルアドレス・セル範囲アドレス の下記形式が有効
・tuplr【タプル】
・list【リスト】
・文字列 (スペース区切り)
参照:add【対象セル追加】
tagnamestrタグ名 ('dataValidation')
type str 入力値の種類
種類備考
Noneすべての値 (入力時メッセージの指定可)
'whole'整数
'decimal'小数点数
'list'リスト
'date'日付
'time'時刻
'textLength'文字列 (長さ指定)
'custom'ユーザー設定
validation_typestrtype【入力値の種類】のエイリアス

操作

操作備考
cell in DataValidation 存在判定
cell判定対象セル
    単一セルアドレス
    セル範囲アドレス
    Cell【セル】(単一)

メソッド

メソッド備考
add(cell) 対象セル追加
cell (str | Cell)対象セル
    単一セルアドレス
    セル範囲アドレス
    Cell 参照:sqref【選択範囲シーケンス】

DataValidationList【入力規則リスト】クラス

メモ

クラス定義

クラス備考
親:openpyxl.descriptors.serialisable.Serialisable
class DataValidationList(
    disablePrompts=None,
    xWindow=None,
    yWindow=None,
    count=None,
    dataValidation=() )
入力規則リスト
disablePrompts
xWindow
yWindow
count
dataValidation

プロパティ

プロパティ備考
count 入力規則 数
dataValidationDataValidation のシーケンス
disablePromptsbool(未使用)
tagnamestrタグ名 ('dataValidations')
xWindowint(未使用)
yWindowint(未使用)

操作

操作備考
len( DataValidationList )入力規則 数

メソッド

メソッド備考
append(
    dv)
入力規則を追加
dv (DataValidation)入力規則
Worksheet【ワークシート】add_data_validation【入力規則 追加】で間接的に使用
to_tree(tagname=None)


基本

from openpyxl import Workbook
from openpyxl.worksheet.datavalidation import DataValidation

# ワークブック作成
WORKBOOK = 'sample.xlsx'
wb = Workbook()
ws = wb.active

# 入力規則作成 (セル指定なし)
validation = DataValidation(
    type='whole',
    operator='between',
    formula1=1,
    formula2=9,

    showInputMessage=True,
    promptTitle='タイトル (入力メッセージ)',
    prompt='入力メッセージ',

    showErrorMessage=True,
    errorTitle='タイトル (エラーメッセージ)',
    error='エラーメッセージ',
)

# 対象セル追加 (Cell 指定)
cell = ws['B2']
cell.value = 1
validation.add(cell)

# 対象セル追加 (セルアドレス 指定)
ws['B3'] = 2
validation.add('B3')

# 対象セル追加 (プロパティ 指定)
# validation.sqref = ('B2', 'B3')
# validation.sqref = ['B2', 'B3']
# validation.sqref = 'B2 B3'

# ワークシートに入力規則 追加
ws.add_data_validation(validation)

# 入力規則作成 (セル指定)
ws['C2'] = 3
ws['C3'] = 4
ws['C4'] = 5
ws['C6'] = 6
validation = DataValidation(
    type='whole',
    operator='between',
    formula1=1,
    formula2=9,
    showInputMessage=True,
    promptTitle='タイトル (入力メッセージ)',
    prompt='入力メッセージ',

    sqref=('C2:C4', 'C6'),
    # sqref=['C2:C4', 'C6'],
    # sqref='C2:C4 C6',
)

# ワークシートに入力規則 追加
ws.add_data_validation(validation)

# 各種チェック
print('C4' in validation)
# 出力:True
print('C5' in validation)
# 出力:False
print(ws['C6'] in validation)
# 出力:True
print('C2:C4' in validation)
# 出力:True
print('C2:C5' in validation)
# 出力:False
print(ws.data_validations.count)
# 出力:2
print(len(ws.data_validations))
# 出力:2

# ワークブック保存
wb.save(WORKBOOK)

入力規則 (基本) のサンプル画像


formula【式】の設定値

from openpyxl import Workbook
from openpyxl.worksheet.datavalidation import DataValidation
from openpyxl.styles import borders, Border, Side

# ワークブック作成
WORKBOOK = 'sample.xlsx'
wb = Workbook()
ws = wb.active

# 罫線
COLOR_BORDER = '000000FF'
side = Side(
    border_style=borders.BORDER_THICK,
    color=COLOR_BORDER)
border = Border(side, side, side, side)

# 入力規則設定 (すべての値:入力時メッセージ)
validation = DataValidation(
    type=None,
    showInputMessage=True,
    promptTitle='タイトル (入力メッセージ)',
    prompt='入力メッセージ',
)
ws['B2'] = 'B-2'
ws['B3'] = 'B-3'
ws['B2'].border = border
ws['B3'].border = border
validation.add('B2:B3')
ws.add_data_validation(validation)

# 入力規則設定 (リスト:カンマ区切りの項目)
validation = DataValidation(
    type='list',
    formula1='"List1,List2,List3"',
)
ws['C2'] = 'List2'
ws['C2'].border = border
validation.add('C2')
ws.add_data_validation(validation)

# 入力規則設定 (リスト:項目のセル範囲アドレス)
ws['D4'] = 'ListA'
ws['D5'] = 'ListB'
ws['D6'] = 'ListC'
validation = DataValidation(
    type='list',
    formula1='D4:D6',
)
ws['D2'] = 'ListB'
ws['D2'].border = border
validation.add('D2')
ws.add_data_validation(validation)

# 入力規則設定 (リスト:名前定義)
ws['E4'] = 'ListX'
ws['E5'] = 'ListY'
ws['E6'] = 'ListZ'
NAME_LIST = 'name_list'
wb.create_named_range(NAME_LIST, None, 'Sheet!$E$4:$E$6')
validation = DataValidation(
    type='list',
    formula1=NAME_LIST,
)
ws['E2'] = 'ListY'
ws['E2'].border = border
validation.add('E2')
ws.add_data_validation(validation)

# 入力規則設定 (ユーザー設定:偶数のみ有効)
validation = DataValidation(
    type='custom',
    formula1='=MOD(F2,2)=0',
    prompt='偶数のみ有効'
)
ws['F2'] = 2
ws['F2'].border = border
validation.add('F2')
ws.add_data_validation(validation)

# 入力規則設定 (小数点数:次の値の間・定数)
validation = DataValidation(
    type='decimal',
    operator='between',
    formula1=1.0,
    formula2=2.0,
    prompt='小数点数:1.0 ~ 2.0'
)
ws['B9'] = 1.5
ws['B9'].border = border
validation.add('B9')
ws.add_data_validation(validation)

# 入力規則設定 (文字列の長さ指定:次の値に等しい・値のセルアドレス)
ws['C11'] = 5
validation = DataValidation(
    type='textLength',
    operator='equal',
    formula1='C11',
    prompt='文字列 (長さ指定):[B9]の値'
)
ws['C9'] = 'ABCDE'
ws['C9'].border = border
validation.add('C9')
ws.add_data_validation(validation)

# 入力規則設定 (日付:次の値より小さい・値になる数式)
validation = DataValidation(
    type='date',
    operator='lessThan',
    formula1='=TODAY()',
    prompt='日付:本日より前'
)
ws['D9'] = '2001/2/3'
ws['D9'].border = border
validation.add('D9')
ws.add_data_validation(validation)

# 入力規則設定 (時刻:次の値以上・名前定義)
from datetime import time
ws['E11'] = time(12, 0, 0)
NAME_TIME = 'name_time'
wb.create_named_range(NAME_TIME, ws, '$E$11')
validation = DataValidation(
    type='time',
    operator='greaterThanOrEqual',
    formula1=NAME_TIME,
    prompt=f'時刻:[{NAME_TIME}] 値以上'
)
ws['E9'] = time(12, 34, 56)
ws['E9'].border = border
validation.add('E9')
ws.add_data_validation(validation)

# ワークブック保存
wb.save(WORKBOOK)

入力規則 (式) のサンプル画像


関数

from openpyxl.worksheet.datavalidation import (
    collapse_cell_addresses,
    expand_cell_ranges,
)

# collapse_cell_addresses
lst_cells = ['A1', 'A2', 'A3', 'B1', 'B2', 'B3']
adr = collapse_cell_addresses(lst_cells)
print(adr)
# 出力:A1:A3 B1:B3
tpl_cells = ('A1', 'A2', 'A3', 'B3', 'B4', 'B5')
adr = collapse_cell_addresses(tpl_cells)
print(adr)
# 出力:A1:A3 B3:B5
cells = ['A1', 'B1', 'C1']
adr = collapse_cell_addresses(cells)
print(adr)
# 出力:A1 B1 C1
cells = ['A1', 'A3', 'A5', 'A4', 'A2']
adr = collapse_cell_addresses(cells)
print(adr)
# 出力:A1:A5

# collapse_cell_addresses (input_ranges 指定)
cells = ['A3', 'A2', 'A1', 'C2', 'C1', 'C3']
lst_input = ['B1', 'B3', 'B2']
adr = collapse_cell_addresses(cells, lst_input)
print(adr)
# 出力:B1 B3 B2 A1:A3 C1:C3
tpl_input = ('A4', 'B4', 'C4')
adr = collapse_cell_addresses(cells, tpl_input)
print(adr)
# 出力:A4 B4 C4 A1:A3 C1:C3

# expand_cell_ranges
adr = expand_cell_ranges('A1:A5')
print(type(adr))
# 出力:<class 'set'>
print(adr)
# 出力:{'A3', 'A2', 'A1', 'A5', 'A4'}
adr = expand_cell_ranges('A1:A2 B1:B2')
print(adr)
# 出力:{'A1', 'B2', 'A2', 'B1'}