Excelのドロップダウンリストを、テーブルで自動で広げる方法
担当者や科目をドロップダウンリストで選べるようにしたのに、項目を足すたびに入力規則を直している。元のリストをテーブルにしておけば、行を足すだけでリストが広がります。
更新日:2026年10月29日
1. よくある困りごと
- 入力規則の「元の値」を
=$A$2:$A$20のように範囲で指定していて、21行目に足した項目がリストに出てこない - 入力する側の表に行を足すと、新しい行にはドロップダウンが付いていない
- ほかのセルからコピーして貼り付けたら、リストにない値が入ってしまった(貼り付けは入力規則のチェックを通りません)
2. 元のリストをテーブルにして、名前を付ける
- リストの範囲(見出しを含む。例:「氏名」の列)を選んで Ctrl+T を押し、テーブルにします。
- 「テーブルデザイン」タブの左端の「テーブル名」を、「担当者」のようにわかる名前に変えます。
- 「数式」タブ→「名前の定義」を押し、名前に「担当者リスト」、参照範囲に
=担当者[氏名]と入れて OK を押します。
ポイント:入力規則の「元の値」に
=担当者[氏名] を直接は入れられません(エラーになります)。いったん名前を付けて、その名前を指定するのがコツです。INDIRECT を使う方法もありますが、揮発性関数でブックが重くなる原因になるので、名前を使う方法がおすすめです。3. 入力規則に名前を指定する
- ドロップダウンを付けたいセル(例:入力表の「担当」の列)を選びます。
- 「データ」タブ→「データの入力規則」を開きます。
- 「入力値の種類」で「リスト」を選び、「元の値」に
=担当者リストと入れて OK を押します。
これで、元のテーブルの下に行を足すと、テーブルが自動で広がり、ドロップダウンにもすぐ出てきます。入力規則を直す必要はありません。
入力する側もテーブルに:ドロップダウンを付けた表もテーブルにしておくと、行を足したときに入力規則も新しい行へ自動で引き継がれます。
4. 貼り付けですり抜けた値を見つける
入力規則がチェックするのは、キーボードで入力したときだけです。コピーして貼り付けた値は、リストにない値でもそのまま入ってしまいます(ふつうの貼り付けでは、入力規則そのものが上書きされて消えることもあります)。
- 確認したいシートを開きます。
- 「データ」タブ→「データの入力規則」の▼→「無効データのマーク」を選びます。
- ルールに合わない値のセルが、赤い丸で囲まれます。直したら、同じ▼から「入力規則マークのクリア」で丸を消します。
どこに入力規則が付いているかは、Ctrl+G→「セル選択」→「データの入力規則」→「すべて」で選んで確認できます。
注意:「無効データのマーク」は、開いているシートだけが対象です。シートが多いブックは、次の VBA でまとめて調べると早いです。
5. VBA で、ブック全体のルール違反を一覧にする
すべてのシートについて、入力規則に合わない値が入っているセルを、新しいシートに一覧にします。調べるだけで、ブックの中身は変えません。
Option Explicit
' 入力規則に合わない値が入ったセルを、新しいシートに一覧にする(調べるだけで、何も変えない)
Sub ListInvalidEntries()
Dim wb As Workbook, ws As Worksheet, out As Worksheet
Dim rng As Range, c As Range, r As Long, src As String, f2 As String
Set wb = ActiveWorkbook
Set out = wb.Worksheets.Add(After:=wb.Sheets(wb.Sheets.Count))
out.Range("A1:D1").Value = Array("シート", "セル", "入っている値", "入力規則の元の値・条件")
r = 2
For Each ws In wb.Worksheets
If Not ws Is out Then
Set rng = Nothing
On Error Resume Next ' 入力規則が1つもないシートではエラーになるため
Set rng = Intersect(ws.UsedRange, ws.Cells.SpecialCells(xlCellTypeAllValidation))
On Error GoTo 0
If Not rng Is Nothing Then
For Each c In rng
If c.Formula <> "" Then
If Not c.Validation.Value Then
src = ""
On Error Resume Next ' 元の値がない種類の入力規則もあるため
src = c.Validation.Formula1
f2 = ""
f2 = c.Validation.Formula2 ' 「1~100」のような範囲の上限
On Error GoTo 0
If f2 <> "" Then src = src & "~" & f2
out.Cells(r, 1).Value = ws.Name
out.Cells(r, 2).Value = c.Address(False, False)
out.Cells(r, 3).Value = "'" & c.Formula
out.Cells(r, 4).Value = "'" & src
r = r + 1
End If
End If
Next c
End If
End If
Next ws
out.Columns("A:D").AutoFit
MsgBox "入力規則に合わない値:" & (r - 2) & " か所" & vbCrLf & _
"一覧は「" & out.Name & "」シートにあります。", vbInformation
End Sub使い方(コードの貼り付け方・実行のしかた)は提出前のExcelを整えるVBAの「使い方」と同じです。一覧を見て直したら、一覧を作ったシートは削除してください。
6. あわせて気をつけたいこと
- 元のリストをほかのブックに置かない:入力規則がほかのファイルを参照していると、開くたびに「リンクの更新」を聞かれる原因になります。リストは同じブックの中のシートに置きます(外部参照を探して解除する方法)。
- リストのシートを非表示にするなら、提出前に確認:マスタのシートを隠しておくのはよくある方法ですが、社外に出すときは中身を見られても問題ないか確かめます(非表示の行・列・シートを見つける方法)。
- 重複のないリストを自動で作る(Microsoft 365):
=UNIQUE(担当者[氏名])を空いた列に入れ、入力規則の元の値に=$F$2#(#は結果が広がった範囲全体)を指定する方法もあります。
毎回の確認を、ボタン1つに
KoreDefo は、入力規則そのもの(ルールに合わない値や、入力規則に残った外部リンク)はチェックしません。上の「無効データのマーク」や VBA で確認してください。貼り付けで入り込みやすい「文字として入っている数字」(¥1,000、▲500 など)は、KoreDefo の「数値の文字列化」チェックで、ブック全体からボタン1つで見つけられます。
30日間無料で試すチェック項目の一覧を見る