セルをリスト形式(リストボックス)にする。
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■実行結果




