プルダウンリストを作成する ①

複数の選択肢から一つを選ばせたい場合、幾つか方法がある。中でも一般的なものの一つとして、「プルダウン」による選択肢表示があるだろう。

f:id:Infoment:20190617215317p:plain

プルダウンリストの設定方法は、思いつく限り、以下の三通りがある。
(きっと、もっとあるに違いない)。

  1. リストを直接入力する。
  2. リスト範囲を指定する。
  3. マクロで設定する。
1.リストを直接入力する。

最も単純で直感的に理解できるのが、この方式だろう。
f:id:Infoment:20190617215529p:plain
ただしこの方式は、セル毎の設定であることから、幾つか難点がある。

  1. 設定に手間が掛かる
  2. 変更に手間が掛かる
  3. 複数セルに設定されている場合、一つずつ修正する必要がある(または、一つを修正してコピー&ペースト)

様々な手間を考えると、よほど単純で一時的な用途で無ければ、個人的にはお勧めしない。

2.リスト範囲を指定する。

最も一般的に用いられるのが、この方式ではないだろうか。あらかじめプルダウンに表示する項目をリスト化し、その範囲を選択して指定する。

f:id:Infoment:20190617215727p:plain

リストの内容を変更すれば、複数のセルに設定されたプルダウンリストを一度に修正することもできる。

欠点として、リスト範囲が拡張されるような項目の追加に、上手く追従できない点がある。対応策としては、

  1. リスト範囲に名前をつけておき、同範囲を正しく拡張する。
  2. リスト範囲をテーブル化しておく。

などがある。

3.マクロで設定する。

マクロを用いて、プルダウンリストを設定する。例えば、こんな感じだ。
この例では指定範囲に、配列をプルダウンリストとして設定している。

Sub SetList(target_range As Range, arr As Variant)
    target_range.Validation.Delete
    target_range.Validation.Add Type:=xlValidateList, _
                                AlertStyle:=xlValidAlertStop, _
                                Operator:=xlBetween, _
                                Formula1:=Join(arr, ",")
End Sub

テストしてみよう。選択範囲(複数可)に、先程と同じプルダウンリストを設定している。

Sub test()
    Dim arr As Variant
        arr = Array("牛肉", "豚肉", "鶏肉", "馬肉", "羊肉", "タイ", "シャケ", "カツオ", "ブリ", "カワハギ", "大根", "人参", "胡瓜", "南瓜", "茄子")
        SetList Selection, arr
End Sub

何某かの条件で、リストの内容が変化するような場合などに有効だ。

どれを使うかは、時と場合とお好みで。

参考まで。