【Excel VBA】一瞬でプルダウン(ドロップダウンリスト)を複数個作成する

Excelのプルダウン(ドロップダウンリスト)を作成ことは多いかと思います。

久しぶりに作ろうとしても、操作方法を忘れたりして、慌てて調べるなんてこともあるかと思います。

そんな中で面倒だなと思うことは、

・リストが大量にある場合入力がたいへん!
・複数個作るときに操作を繰り返さなければならない
・リストの更新が難しい

ではないでしょうか。

今回はそんなお悩みを解決する、
Excel VBAを使い、ボタンワンクリックで一瞬でプルダウン(ドロップダウンリスト)を複数個作成する方法
をご紹介します。



プルダウン(ドロップダウンリスト)のサンプルデータを準備する

プルダウン(ドロップダウンリスト)のサンプルデータを用意しましょう。

データの内容は何でもよいですが、

今回はサンプルで4つ用意しました。

1列目は国のリスト、
2列目は都市のリスト、
3列目は件数、
4列目は年代、

としています。

それをB列の8行目から入力しています。

なお、最大で255件までの登録となっていますので、255件以下にするようお願いします。

続いて、リストの上、

6行目に「タイトル」
7行目に「メッセージ」
を入力します。

2項目はプルダウンメニューをマウスオーバーした時に出てくる内容となります。

このような形になれば完成です。



VBAを実装する

続いてExcelのVisual Basic EditorへVBAを実装します。

Sub プルダウンを複数個作成()
   
  Dim list As Variant
  Dim n As Long
  
    '4列分のプルダウンを作成します
    For n = 2 To 5
      
      
            'プルダウンリストを取得します。最大100行まで取得します。
            list = Application.Transpose(Range(Cells(8, n), Cells(107, n)))
            
                '5行目のセルに挿入するプルダウンを設定します。
                With Cells(5, n).Validation
                
                    '既存のプルダウンがあれば削除します。
                    .Delete
                    
                    'リストを挿入します。
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Join(list, ",")
                    .IgnoreBlank = True
                    
                    'プルダウン形式を指定します。
                    .InCellDropdown = True
                    
                    'プルダウンのタイトルを指定します。
                    .InputTitle = Cells(6, n)
                    
                    'エラータイトルは空欄です。
                    .ErrorTitle = ""
                    
                    'マウスオーバー時のメッセージを指定します。
                    .InputMessage = Cells(7, n)
                    
                    'エラーメッセージは空欄です。
                    .ErrorMessage = ""
                    
                    .IMEMode = xlIMEModeNoControl
                    
                    .ShowInput = True
                    .ShowError = True
                
                End With

        
    Next
  
  MsgBox "5行目にプルダウンを作成しました", vbInformation
    
End Sub

実装手順は以下の通りです。

今回はExcel側にVBAを実装します。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。



VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし

プルダウンを複数個作成」を選択し、

実行」をクリックします。

②「5行目にプルダウンを作成しました」が表示され、

プルダウンが5行目に追加されますね!

なお、作成したプルダウンは

コピペで別のシートや別のExcelへ移すことが可能です!



VBAを実行するボタンを追加する

マクロを実行するボタンを追加しておくと

ボタンぽちで一瞬で実行されるのでめちゃ便利です!

よく使う場合はぜひ実装しておきましょう。

実装の仕方は、

リボンメニュ「開発」>「挿入」>「フォームコントロール」をクリックし、

右上のアイコンをクリックします。

ボタンが挿入されるので、ボタンを右クリックし「マクロの登録」を選択します。

マクロの登録ウインドウが出たら、「プルダウンを複数個作成」を選択して、

「OK」をクリックし、完了です!



VBAの説明

VBAの内容を説明します。

今回は、4列分のプルダウンメニューを作成しますので、
4回繰り返しています。
5列にしてたい場合は5→6にしてください。

For n = 2 To 5

シートに記載されているプルダウンリストを取得します。
最大100行まで取得する設定にしています。
255個まで行けますので、100個では足りない場合は、Cells(107, n)を増やしてください。

list = Application.Transpose(Range(Cells(8, n), Cells(107, n)))

プルダウンを挿入する場所を指定します。
5行目のセルを指定しています。

With Cells(5, n).Validation

既存の入力規則であるプルダウンがあれば削除します。
.Delete

リストを挿入します。
入力値のタイプは「リスト」です。
.Add Type:=xlValidateList,

エラーメッセージのスタイルを「停止」に設定します。
AlertStyle:=xlValidAlertStop,

入力値の値の範囲を設定します。
Operator:=xlBetween,

条件式1はLISTのセル範囲を指定します。
Formula1:=Join(list, “,”)

セル範囲への空白値の入力を許可します。
.IgnoreBlank = True

プルダウン形式を指定します。
.InCellDropdown = True

プルダウンのタイトルを指定します。
.InputTitle = Cells(6, n)

エラータイトルは空欄です。
.ErrorTitle = “”

マウスオーバー時のメッセージを指定します。
.InputMessage = Cells(7, n)

エラーメッセージは空欄です。
.ErrorMessage = “”

IMEコントロールはコントロールなしを指定します。
.IMEMode = xlIMEModeNoControl

入力時メッセージが表示されます。
.ShowInput = True

無効なデータを入力すると、エラー メッセージが表示されるようにします。
.ShowError = True



さいごに

いかがでしょうか。

今回のVBAで効率よくプルダウンが作成、更新ができますので、

ぜひ活用いただければと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です