皆さん、こんにちは。Excel VBA講師です。
日々の業務で、特定のセルにドロップダウンリスト(データの入力規則)を設定することは非常に多いですよね。しかし、項目が増えたり、管理するシートが複数あったりすると、手作業での設定はミスのもとです。今回は、VBAを使って「柔軟かつ一瞬で」入力規則を設定する実務的な手法を伝授します。
なぜVBAで設定するのか
最大の理由は「メンテナンス性」です。リストの元データが別シートにあったり、項目が頻繁に変更されたりする場合、手作業で範囲を選択し直すのは手間がかかります。VBAなら、コードを一度書いておけば、ボタン一つで最新のリスト状態に更新できます。
基本のコード構成
まず、特定のセルにリストを設定する標準的なコードを見てみましょう。
Sub SetValidationList()
With Range(“B2″).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=”A案,B案,C案”
End With
End Sub
これは非常にシンプルですが、実務では「リストの項目を動的に変えたい」というケースがほとんどです。
実務で差がつく!「動的リスト」の実装例
例えば、「マスタ」シートのA列に入力されている値を、そのままリストの選択肢にする場合を想定します。データが増えても自動で追従させるのがプロのやり方です。
Sub SetDynamicList()
Dim lastRow As Long
Dim wsMaster As Worksheet
Set wsMaster = ThisWorkbook.Sheets(“マスタ”)
‘A列の最終行を取得
lastRow = wsMaster.Cells(wsMaster.Rows.Count, “A”).End(xlUp).Row
‘リスト範囲を文字列で指定(マスタ!$A$1:$A$10 のような形式)
Dim rngAddress As String
rngAddress = “=” & wsMaster.Range(“A1:A” & lastRow).Address(External:=True)
With Range(“B2”).Validation
.Delete
.Add Type:=xlValidateList, Formula1:=rngAddress
End With
End Sub
ここで重要なのは.Address(External:=True)です。これを付けることで、シートを跨いでリストを指定してもエラーが出ないようになります。
講師からのアドバイス:エラーハンドリングを忘れずに
実務でこのコードを運用する際、必ず考慮すべきなのが「リストの元データが空だった場合」です。元データがない状態でリストを設定しようとするとVBAが止まってしまうことがあります。
コードの冒頭に以下のような判定を挟むだけで、安定感が格段に変わります。
If lastRow < 1 Then Exit Sub
入力規則の自動化は、単なる効率化だけでなく「誰が使ってもミスが起きない仕組み」を作るための強力な武器です。ぜひ、皆さんの業務シートにも組み込んでみてください。それでは、次回の講義でお会いしましょう。
