Excelの1セルに「候補から選択」と「値の書式制限」の両方を求める場合、通常の入力規則ダイアログでリスト規則とユーザー定義規則を独立して重ねて保存することはできません。入力補助はリスト、品質確認は検査列に分けると運用しやすくなります。
入力規則だけで両方を強制できるか確認
たとえばA2に取引先コードを選びたい一方、コードはAB-1234型以外を受け付けたくないケースです。入力規則[リスト]には候補範囲を指定できますが、同じセルに別種類の入力規則を追加して二重判定する想定にはしません。入力者に候補だけを使わせたいか、取り込まれたデータも含めて書式を検査したいかを先に分けます。
候補表と検査列を分けて設計する
「マスター」シートのA列を正規のコード一覧にし、入力列B2:B100に[データ]→[データの入力規則]→[リスト]で候補を設定します。その右のC2に=IF(B2="","未入力",IF(COUNTIF(マスター!$A$2:$A$100,B2)=1,"OK","候補外"))を置きます。書式チェックも必要なら別列D2に=IF(B2="","",IF(AND(LEN(B2)=7,MID(B2,3,1)="-",ISNUMBER(IFERROR(VALUE(RIGHT(B2,4)),""))),"形式OK","形式NG"))を置きます。先頭2文字の英字制限が必要なら別条件を追加します。
選択値に対する形式チェックの具体例
候補表に同じコードが2回あると上のCOUNTIF(...)=1は「候補外」と判定します。このためマスター側も重複チェックを行います。AB-1234、AB1234、空欄、候補外コードをサンプル入力し、検査列の結果を確認してください。入力規則のエラーメッセージだけを完成条件にせず、取込前に「候補外」「形式NG」を0件にします。
貼り付けによる回避をどう検知するか
Excelではコピー貼り付けなどで入力規則が意図どおり機能しない場合があります。最終的なチェックを入力時の画面だけに任せず、検査列またはPower Queryの取込チェックで再判定します。マスター変更後は、現在の正規リストから外れた過去値を棚卸しします。LEFT等で書式を検査する場合、文字列として保存しておかないと先頭0が失われる点も確認してください。
