【VBAリファレンス|実務向け】【実務効率化】VBAで「入力規則のリスト」を瞬時に設定するテクニック

スポンサーリンク

皆さん、こんにちは。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

入力規則の自動化は、単なる効率化だけでなく「誰が使ってもミスが起きない仕組み」を作るための強力な武器です。ぜひ、皆さんの業務シートにも組み込んでみてください。それでは、次回の講義でお会いしましょう。

タイトルとURLをコピーしました