データの入力規則
Excelで「データの入力規則」を使う場面は多いと思います。
メニューから使用する場合が殆どだと思いますが、今回はVBAから設定する方法を紹介します。
といっても、設定しなければならない項目が多いので、今回は「マクロの記録」を使ってそこからVBAに落とし込むようにします。
マクロの記録を使う
まずはマクロの記録で入力規則を設定した場合、どのようなコードを吐き出すか見てみます。
入力規則を設定したいセルを選択した状態で、メニューの「データ」>「データツール」「データの入力規則」をクリックします。
ダイアログが表示されたら以下のように設定してください。
今回は入力メッセージやエラーメッセージなどがどのように反映されるか確かめるために値を入力してみます。

設定タブ
入力値の種類は、「リスト」を選択。元の値には、「◎,〇,×,△,□」と入力します。

ここまでの設定だけでもOKですが、今回はその他の設定がどのように表示されるか見るために他の項目にも値を入れていきます。
入力時のメッセージタブ
タイトルには、「記号の入力」。入力時のメッセージには、「○,◎,×,△,□のどれかを入力してください。」と入力します。

エラーメッセージタブ
タイトルには、「記号化違います」。エラーメッセージには、「○,◎,×,△,□のいずれかを入力してください。」と入力します。

日本語入力
ここでは変更はありません。

生成されたマクロ
マクロの記録で以下のようなコードが生成されました。
最後の Range(“D5”).Select は今回の処理とは関係ないので削除してOKです。
Sub Macro1()
'
' Macro1 Macro
'
'
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="○,◎,×,△,□"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "記号の入力"
.ErrorTitle = "記号が違います"
.InputMessage = "○,◎,×,△,□のどれかを入力してください。"
.ErrorMessage = "○,◎,×,△,□のいずれかを入力してください。"
.IMEMode = xlIMEModeNoControl
.ShowInput = True
.ShowError = True
End With
Range("D5").Select
End Sub
最初の Selection の部分に入力規則を割り当てています。
SelectionはRnageに置き換えられますので、他の場所にも同じ入力規則を設定したい場合には、ここを書き換えれば良いでしょう。
結果は以下のように表示されます。入力時のメッセージが表示されていますね。

エラーの場合は以下のように表示されます。

入力規則を扱うオブジェクト
入力規則は、Validationオブジェクトのメソッドやプロパティで設定します。
種類がたくさんあるので今回使用するもを紹介します。
Validationのメソッド
・Delete オブジェクトを削除します。
・Add 入力規則を追加します。
Addメソッドは以下のような引数を取ります。
Validation.Add(Type, AlertStyle, Operator, Formula1, Formula2)
Type 入力規則の種類
AlertStyle 入力規則エラーのスタイル
Operator データの扱い
Formula1,Formula2 入力規則に使用されている値などを指定します
Validationのプロパティ
今回 Validation で使用しているプロパティは以下の通りです。
IgnoreBlank 空白値の入力を許可
InCellDropdown ドロップダウン リストの表示
InputTitle 入力時のタイトル
ErrorTitle エラー時のタイトル
InputMessage 入力時のメッセージ
ErrorMessage エラー時のメッセージ
IMEModel 日本語の入力規則の設定
ShowInput 入力メッセージの表示
ShowError エラーメッセージの表示
汎用的に使えるサンプルコード
最後に、ご自身のプログラムで汎用的に使えるサンプルコードを紹介します。
'引数のRangeに入力規則のリストを設定
Sub myValidation(rng As Range)
With rng.Validation
.Delete
.Add Type:=xlValidateList, _
AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, _
Formula1:="○,◎,×,△,□"
.IgnoreBlank = True '空白値の入力を許可
.InCellDropdown = True 'ドロップダウン リストの表示
.InputTitle = "" '入力時のタイトル
.ErrorTitle = "" 'エラー時のタイトル
.InputMessage = "" '入力時のメッセージ
.ErrorMessage = "" 'エラー時のメッセージ
.IMEMode = xlIMEModeNoControl '日本語の入力規則の設定
.ShowInput = True '入力メッセージの表示
.ShowError = True 'エラーメッセージの表示
End With
End Sub
下線部分を入力したいリストに変更し、必要なら他のオプションも設定しておきます。
プルダウンリストを設定したい範囲(Range)を指定すればOKです。
Sub setValdat()
Call myValidation(Range("B7:B10"))
End Sub
まとめ
今回は、マクロの記録を使ってセルの入力規則の設定をプログラムコードにしてみました。
こうする事で面倒なプロパティの設定などは自動で済ませることができます。
あとは、Selection部分をRnageに置き換えて好きな場所に設定していけば良いでしょう。
また、Formula1の部分をプログラムで変更することもできます。
マクロの記録は、プログラミングの習得に使うのではなく、このような使い方をすれば重宝します。
以下のコンテンツも参考にしてみてください。
・入力規則で空白を選択できるようにする
・入力規則が設定されているか調べる