セルをリスト形式(リストボックス)にする

セルをリスト形式(リストボックス)にする。

VBAでセルをリスト形式(リストボックス)で表示させたい場合は、Validationオブジェクトを利用することでリスト形式の表示にすることができます。

リストにするにはValidationオブジェクトのAddメソッドのTypeに xlValidateList を設定し、同じValidationオブジェクトのInCellDropdownプロパティに True を設定する必要があります。
リストの値を設定するにはAddメソッドのFormula1 に表示させたい値を設定します。
複数の値をFormula1 に設定する場合は個々の値を ,(カンマ)区切りにすることで複数の項目を設定できます。
AddメソッドのAlertStyleには無効なデータが入力された場合に表示するアラート表示の種別になりますが、ShowErrorプロパティにFalseを指定している場合はアラートが表示されなるので意味がない設定になります。
AlertStyleに設定できる定数は以下になります。

定数説明
xlValidAlertStop停止
xlValidAlertInformation情報
xlValidAlertWarning警告

リストボックスのセルが選択された場合にメッセージ表示をさせたい場合は、ShowInputプロパティに True を設定し、表示させたいメッセージのタイトルとメッセージ内容はInputTitleプロパティ、InputMessageプロパティに設定します。

またリストボックスの値以外が入力などされた場合に警告メッセージ表示をさせたい場合はShowErrorプロパティに True を設定し、表示させたい警告のタイトルとメッセージ内容はErrorTitleプロパティ、ErrorMessageプロパティに設定します。
※警告メッセージが表示された時のアイコンは、AddメソッドのAlertStyleに設定された種類のメッセージボックスで表示されます。

リストボックスの値以外を直接入力できるようにしたい場合は、ShowErrorプロパティに Flase を設定してください。

サンプルコードではシンプルな設定、メッセージ設定あり、リストの値を他のセルから取得して設定する方法を記載しています。
各処理の最初にDeleteメソッドを実行しているのは、既にリストボックス表示の設定がされているセルにAddメソッドを使うとエラーとなるため、設定前に設定した内容を削除させています。

 ●リストボックス設定

'******************************************************************
' リストボックス設定
'******************************************************************
Sub SetListbox1()
    
    With Sheets("Sheet1").Cells(1, 1).Validation
        .Delete '初期化
        
        'リストボックス設定
        .Add Type:=xlValidateList, _
             Formula1:="1,2,3,4,5,6,7,8,9,10,11,12"
        .InCellDropdown = True
        
        'メッセージ表示
        .ShowInput = False
        
        '警告メッセージ表示
        .ShowError = False
    End With

End Sub

 ■実行結果

リスト形式で表示


 ●リストボックス設定(入力、警告メッセージメッセージあり)

'******************************************************************
' リストボックス設定(入力、警告メッセージメッセージあり)
'******************************************************************
Sub SetListbox2()
    
    With Sheets("Sheet1").Cells(1, 3).Validation
        .Delete '初期化
        
        .Add Type:=xlValidateList, _
             Formula1:="1,2,3,4,5,6,7,8,9,10,11,12", _
             AlertStyle:=xlValidAlertWarning
        .InCellDropdown = True 
        .ShowInput = True
        .InputTitle = "月指定"
        .InputMessage = "リストから選択してください"
        
        .ShowError = True
        .ErrorTitle = "エラー"
        .ErrorMessage = "リストの値以外は選択、入力できません。"
    End With

End Sub
リスト形式で表示(メッセージ表示あり)
リスト以外の値を入力した場合は警告メッセージが表示される。


 ●リストボックス設定(リスト値を他のセルから取得)

'******************************************************************
' リストボックス設定(リスト値を他のセルから取得)
'******************************************************************
Sub SetListbox3()
    
    With Sheets("Sheet1").Cells(1, 5).Validation
        .Delete '初期化
        
        'リストボックス設定
        .Add Type:=xlValidateList, _
             Formula1:="=データ!$C$1:$C$12"
        .InCellDropdown = True
        
        'メッセージ表示
        .ShowInput = False
        
        '警告メッセージ表示
        .ShowError = False
    End With

End Sub

 ■実行結果

リスト形式で表示(他のシート、セルから値を取得)
値の設定元(C列の値を元にリスト作成)