当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

【Excel VBA】プルダウンリスト(ドロップダウンリスト)

予め決められたリストの中からデータを選んでセルに入力する場合、プルダウンリスト(ドロップダウンリスト) を使用することで誤入力を防ぐことができますよ。

【Excel】プルダウンリスト(ドロップダウンリスト)

プルダウンで入力するセル範囲を選択した状態で、[データ] タブをクリックして、[データの入力規則]、[データの入力規則] の順に選択します。
 
Excelデータの入力規則でプルダウンリストを作成
 
下の図のように、[設定] の [入力値の種類] から [リスト] を選んで、[元の値] にたとえば「こばと,真理子,涼音」というように、項目を半角カンマで区切って入力しておきます。
 
Excelデータの入力規則ダイアログの設定
 
設定したセルをクリックすると右横に [▼] が現れるので、リストから選んでデータを入力してくださいな。
 
Excelドロップダウンリストからデータを入力
 
適当なセルに予めリストを作っておいて、それをプルダウンリストの項目にすることもできますよ。たとえば下の図のように B 列に「クッキー、チョコレート、ヨーグルト」というリストを作っておきます。
 
Excel予めプルダウンの項目を作成する

先ほどと同じように [データ] タブをクリックして、[データの入力規則]、[データの入力規則] の順に選択して、[設定] の [入力値の種類] から [リスト] を選びます。そして [元の値] の入力ボックスをクリックしてから、セル B2:B4 を選択します。すると下の図のように、入力内容をプルダウンリストから選ぶことができるようになりますよ。
 
Excel今日のおやつをプルダウンリストで選択

【VBA】Validationでプルダウンリストを作成する

VBA でプルダウンを作成することもできます。以下のサンプルコードを参考にしてください。

'[VBA] プルダウン作成サンプルコード

Sub CreateDropDown()
    Dim rng As Range
    Dim ws As Worksheet
    Dim dropDownCell As Range
    Dim listRange As Range
    
    ' ドロップダウンリストを作成するセルを指定
    Set dropDownCell = Range("B1")
    
    ' ドロップダウンリストの選択肢を設定する範囲を指定
    Set listRange = Range("A1:A3")
    
    ' ドロップダウンリストを作成するシートを指定
    Set ws = dropDownCell.Worksheet
    
    ' ドロップダウンリストを作成するセルをクリア
    dropDownCell.Clear
    
    ' ドロップダウンリストを作成するセルにデータの検証を設定
    With dropDownCell.Validation
        .Delete  ' 以前に設定されたデータの検証を削除
        
        ' プルダウンリストのデータの検証を追加
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=" & listRange.Address
        
        .IgnoreBlank = True  ' 空白セルを無視
        .InCellDropdown = True  ' セル内にプルダウンリストを表示
        .ShowInput = False  ' データの入力メッセージを非表示
        .ShowError = True  ' エラーメッセージを表示
    End With
End Sub

CreateDropDown マクロでは、Validationオブジェクトを使用して、指定したセルにプルダウンリストを作成するためのデータ検証を設定しています。これにより、ユーザーが指定された選択肢以外の値を入力できなくなります。
 
Validation(データ検証)は、特定のセル範囲に入力されるデータの制約や条件を設定します。データ検証を使用すると、ユーザーがセルに入力する値を制限したり、特定の形式に合致するようにしたりできます。たとえば、以下のような様々な制約を設定できます:
 
・数値範囲の制約:指定した数値範囲内の値のみを許可する。
・リストの制約:あらかじめ指定した値の中からのみ選択可能にする。
・文字列の制約:指定した文字数や形式に合致するようにする。
・日付や時刻の制約:指定した範囲内の日付や時刻のみを許可する。
・エラーメッセージの表示:特定の条件に合致しない場合にエラーメッセージを表示する。
 
データ検証は、特にデータ入力の制御やエラーの予防に役立ちます。例えば、プルダウンリストを作成したり、数値の範囲を制限したり、特定の文字列の長さを制約したりする場合に使用できます。

コメント

  1. あとりえこばと より:

    本文の補足です。Validation 機能で使用される AlertStyle, Operator, Formula1, Formula2 プロパティについて、ChatGPT に解説してもらいました。

    【VBA】Validation.AlertStyle

    [ChatGPT] AlertStyle(アラートスタイル)は、Excelのデータの検証(Validation)機能で使用されるプロパティの一つです。このプロパティは、検証に違反した場合に表示されるアラートメッセージのスタイルを指定します。AlertStyle プロパティには、以下の3つの設定があります:
     
    xlValidAlertStop: これはデフォルトの設定であり、検証に違反した場合に停止のアイコンと共にエラーメッセージを表示します。ユーザーは違反した値を変更するまで作業を続けることができません。
     
    xlValidAlertWarning: これは警告のアイコンと共にエラーメッセージを表示します。ユーザーは違反した値を変更せずに作業を続けることができますが、警告が表示されます。

    xlValidAlertInformation: これは情報のアイコンと共にエラーメッセージを表示します。ユーザーは違反した値を変更せずに作業を続けることができますが、情報が表示されます。
     
    AlertStyleプロパティを使用することで、データの検証に違反した場合にユーザーに通知する方法を選択できます。これにより、適切なアラートメッセージを表示して、ユーザーが入力を修正することが求められるかどうかを示すことができます。
     
    CreateDropDownマクロでは、AlertStyle:=xlValidAlertStop を使用して、検証に違反した場合に停止のアイコンとエラーメッセージを表示するように設定しています。つまり、プルダウンリストの選択肢以外の値が入力された場合、ユーザーはその値を変更するまで作業を続けることができません。

    【VBA】Validation.Operator

    [ChatGPT] Operator(オペレータ)は、Excelのデータの検証(Validation)機能で使用されるプロパティの一つです。このプロパティは、データの検証ルールで使用される比較演算子を指定します。Operator プロパティには、以下のいくつかの設定があります:
     
    xlBetween:指定した範囲内の値を許可します。Formula1 と Formula2 の値を使用して範囲を指定します。
     
    xlNotBetween:指定した範囲外の値を許可します。Formula1 と Formula2 の値を使用して範囲を指定します。
     
    xlEqual:指定した値と等しい値を許可します。Formula1 の値を使用して等しい値を指定します。
     
    xlNotEqual:指定した値と等しくない値を許可します。Formula1 の値を使用して等しくない値を指定します。

    他にも演算子がありますが、上記は一般的によく使用されるものです。Operator プロパティを使用することで、データの検証ルールで適用する比較演算子を指定することができます。これにより、選択した演算子に基づいて、セルの値と検証ルールを比較することができます。CreateDropDownマクロでは、Operator:=xlBetween を使用して、プルダウンリストの選択肢の範囲内の値を許可するように設定しています。この場合、Formula1 として指定した listRange.Address で指定したセル範囲内の値が選択肢として有効となります。

    Validation.Formula1

    [ChatGPT] Formula1 は、Excelのデータの検証(Validation)機能で使用されるプロパティの一つです。このプロパティは、データの検証ルールにおける比較や条件を設定するために使用されます。Formula1 プロパティは、検証ルールに関連する値や式を指定します。具体的には、以下のような目的で使用されます:
     
    ・数値範囲の指定:Formula1 プロパティを使用して、許可する数値範囲を指定します。例えば、Formula1:=”10″ と指定すると、値が10と等しい場合にのみ許可されます。
     
    ・リストの指定:Formula1 プロパティを使用して、プルダウンリストやドロップダウンリストの選択肢となるリスト範囲を指定します。例えば、Formula1:=”Sheet2!$A$1:$A$5″ と指定すると、Sheet2のA1からA5までのセルの値が選択肢として表示されます。
     
    ・文字列の条件指定:Formula1 プロパティを使用して、文字列の条件を指定します。例えば、Formula1:=”=LEN(A1)>5″ と指定すると、A1セルの文字列が5文字より長い場合にのみ許可されます。
     
    日付や時刻の条件指定:Formula1 プロパティを使用して、日付や時刻の条件を指定します。例えば、Formula1:=”>DATE(2023,1,1)” と指定すると、2023年1月1日より後の日付のみ許可されます。Formula1 プロパティは、比較演算子(Operator プロパティ)と組み合わせて使用されることが一般的です。検証ルールにおいて特定の条件を表現するために使用されます。
     
    CreateDropDownマクロでは、Formula1:=”=” & listRange.Address を使用して、プルダウンリストの選択肢となるリスト範囲を指定しています。listRange.Address は、指定したセル範囲のアドレスを取得するために使用され、そのアドレスを Formula1 に代入することで、指定したセル範囲内の値が選択肢として表示されます。

    Validation.Formula2

    [ChatGPT] Formula2 プロパティは、主に Operator プロパティが xlBetween や xlNotBetween の場合に使用されます。これらの演算子は範囲を指定するため、Formula1 と Formula2 の両方を使用して、範囲の開始点と終了点を指定することができます。具体的には、以下のような目的で使用されます:
     
    ・数値範囲の指定:Formula1 プロパティが最小値を指定し、Formula2 プロパティが最大値を指定します。例えば、Formula1:=”5″ および Formula2:=”10″ と指定すると、値が5から10の範囲内にある場合にのみ許可されます。
     
    ・日付や時刻の条件指定:Formula1 プロパティが範囲の開始日付または時刻を指定し、Formula2 プロパティが範囲の終了日付または時刻を指定します。例えば、Formula1:=”2023/01/01″ および Formula2:=”2023/12/31″ と指定すると、2023年1月1日から2023年12月31日までの範囲内の日付のみ許可されます。
     
    ・Formula2 プロパティは、特定の範囲を指定するために使用され、データの検証ルールによって異なる方法で利用されます。通常、範囲指定が必要な場合にのみ使用されます。
     
    なお、一部のデータの検証ルールでは Formula1 プロパティだけで条件を指定することができ、Formula2 プロパティは使用されません。