ExcelVBA プルダウン(ドロップダウンリスト)をセルに設定する方法

 

Excelのプルダウン(ドロップダウンリスト)は、セルに入力可能な選択肢を制限するための機能です。VBAを使うことで、動的にプルダウンリストを作成したり、既存のリストを変更したりすることが可能になります。使い方や注意点など、サンプルコードをもとに具体的に解説します。

 

日常業務でExcelを多用し、手動作業を減らしたいと考えている方へ
本サイト参考:Excel VBAで自動化するコードのベースを習得したい方におすすめの記事

 

Excel VBA プルダウンをセルに設定する利用

以下のようなシーンで利用されます。

1.入力ミスの防止
選択肢を限定することで誤入力を防ぎます。

2.動的な選択肢の提供
データの内容に応じてリストを自動的に更新

3.ユーザーフォームの効率化
ユーザーが簡単に選択できるようにする。

使い方

VBAを使ったプルダウンの操作は、Validation オブジェクトを用いて行います。以下は基本的な流れです。

1. プルダウンを設定したいセル範囲を指定

2. Addメソッドを使用してリストの内容を設定

ポイント

1.リストの内容に制限
セルの値はリストの選択肢に限定されるため、適切な内容を設定する必要があります。

2.既存の設定をクリア
新しいリストを設定する場合、既存のデータ検証を削除してから追加します。

3.範囲指定に注意
セル範囲の設定が正確であることを確認してください。

4.日本語入力の問題
リストの内容に全角と半角が混在していると選択の誤りが起こる可能性があります。

 

Excel VBA プルダウンをセルに設定するのサンプルコード

基本的な文法やVBAの実践的な応用までを網羅的に学習できる方法は、ExcelVBAエキスパート資格の取得を目指すこと。学習を通して、より効率的に、着実に基礎を身につけることが可能です。資格取得すれば、スキルの証明にもなり、職場での評価アップにも繋がるため、勉強を進めるモチベーションにもなります。
本サイト参考:マクロ知識がないから「何から学べば良いのかわからない」という人におすすめの記事

固定リストを使用したプルダウンの作成

Option Explicit

Sub CreateDropdown()
    Dim ws As Worksheet
    Dim targetRange As Range
    
    ' シートと範囲を指定
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set targetRange = ws.Range("B2:B10")
    
    ' 既存のデータ検証を削除
    targetRange.Validation.Delete
    
    ' プルダウンリストを追加
    With targetRange.Validation
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="オプション1,オプション2,オプション3"
        .IgnoreBlank = True
        .InCellDropdown = True
    End With
    
    MsgBox "プルダウンを設定しました!"
End Sub

動的リストを使用したプルダウンの作成

Option Explicit

Sub CreateDynamicDropdown()
    Dim wsList As Worksheet
    Dim wsTarget As Worksheet
    Dim listRange As Range
    Dim targetRange As Range
    
    ' リストのデータがあるシートと範囲
    Set wsList = ThisWorkbook.Sheets("Sheet1")
    Set listRange = wsList.Range("A1:A5")
    
    ' プルダウンを設定するシートと範囲
    Set wsTarget = ThisWorkbook.Sheets("Sheet2")
    Set targetRange = wsTarget.Range("B2:B10")
    
    ' 名前付き範囲を設定
    ThisWorkbook.Names.Add Name:="DropdownList", RefersTo:=listRange
    
    ' 既存のデータ検証を削除
    targetRange.Validation.Delete
    
    ' プルダウンリストを追加
    With targetRange.Validation
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=DropdownList"
        .IgnoreBlank = True
        .InCellDropdown = True
    End With
    
    MsgBox "動的なプルダウンをSheet2に設定しました!"
End Sub

1.名前付き範囲の設定
・listRange(Sheet1 にあるリスト範囲)を名前付き範囲 DropdownList として定義しています。
・名前付き範囲はブック全体で参照可能になるため、別シートの検証範囲でも使用できます。

2.プルダウン設定先を Sheet2 に変更
・targetRange を Sheet2 に設定しました。

3.データ検証の範囲参照
データ検証のリスト参照式を =DropdownList として、名前付き範囲を使用しています。

実行後の確認

1.リスト範囲(Sheet1)
A1:A5 にリストの値が入力されている必要があります。

2.プルダウン範囲(Sheet2)
B2:B10 にドロップダウンが適用され、リストの値が選択できるようになります。

3.名前付き範囲:
Excelの「数式」タブ →「名前の管理」を開くと、DropdownList が登録されていることを確認できます。

固定リストは Formula1 に文字列を直接入力。動的リストはセル範囲を指定します。新しい設定を行う際に、古い検証を削除することでエラーを回避する。データが変わる場合はコードの更新が必要です。

このコードを使えば、セルごとに設定することなく、入力の効率化とミスの防止が簡単に実現できます。

Excel VBAで自動化するコードのベースを習得したい方におすすめ!

VBAエキスパート資格は、日常業務でExcelを多用し、手動作業を減らしたいと考えている方には価値あるものです。

ExcelVBAエキスパートベーシック
仕事の効率をあげるためにExcelVBAを利用する人が対象の問題集です。


ExcelVBAエキスパートスタンダード

ExcelVBAの開発を仕事にする人が対象の問題集です。

 

Excel  VBA エキスパート資格について知りたい方は、下記「Excel VBAスキルアップを目指すなら知っておきたいVBAエキスパート」をご確認ください。