こんにちは、Ryoです。
Excelの便利な機能の1つとして、任意のセルへの入力に条件を設定できる「入力規則」がありますが、この機能はVBAでも扱うこともできます。今回はその「入力規則」の設定や削除、変更方法など基本的な内容について書いていきます。
1.入力規則を設定
先ずは対象のセルに設定する方法ですが、例として下の画像に示す表のセルB2~B4に入力規則を設定してみます。
≪実行前≫

≪実行後≫

このように指定セルに入力規則を設定することができます。
◆サンプルコード
Sub Sample1()
'セルB2~B4に入力規則を設定
With Range("B2:B4").Validation
'対象範囲に対して先ずは削除を実行しておく
.Delete
'エラー時は中止アイコンを表示
'入力可データとして「製品A」「製品B」「製品C」
.Add Type:=xlValidateList, _
AlertStyle:=xlValidAlertStop, _
Formula1:="製品A,製品B,製品C"
End With
End Sub
指定したセル範囲に入力規則を設定するにはValidationオブジェクト/Addメソッドを利用します。
構文:オブジェクト.Validation.Add(Type, AlertStyle, Operator, Formula1, Formula2)
Addメソッドの引数については以下の通りです。
≪Addメソッドの引数≫
| 引数 | 内容 |
| Type | 入力規則の種類を指定(指定する値はXlDVTypeクラスの定数) |
| AlertStyle | 入力規則でのエラーのスタイルを指定(指定する値はXlDVAlertStyleクラスの定数) |
| Operator | データ入力規則の演算子を指定(指定する値はXlFormatConditionOperatorクラスの定数) |
| Formula1 | データ入力規則での条件式の最初の部分を指定 |
| Formula2 | データ入力規則での条件式の2番目の部分を指定。引数OperatorがxlBetweenまたはxlNotBetween以外の場合、この引数は無視される。 |
≪Addメソッドの引数Typeに指定するXlDVTypeクラスの定数≫
| 定数 | 内容 |
| xlValidateCustom | 任意の数式を使用してデータを検証 |
| xlValidateDate | 日付値 |
| xlValidateDecimal | 数値 |
| xlValidateInputOnly | 値が変更された場合のみ検証 |
| xlValidateList | 指定したリストに値が存在 |
| xlValidateTextLength | 文字列の長さ |
| xlValidateTime | 時間値 |
| xlValidateWholeNumber | 全数値 |
≪Addメソッドの引数AlertStyleに指定するXlDVAlertStyleクラスの定数≫
| 定数 | 内容 |
| xlValidAlertInformation | 情報アイコン |
| xlValidAlertStop | 中止アイコン |
| xlValidAlertWarning | 警告アイコン |
≪Addメソッドの引数Operatorに指定するxlFormatConditionOperatorクラスの定数≫
| 定数 | 内容 |
| xlBetween | 二つの数式が指定されている場合のみ使用可 |
| xlEqual | 等しい |
| xlGreater | 次の値より大きい |
| xlGreaterEqual | 以上 |
| xlLess | 次の値より小さい |
| xlLessEqual | 以下 |
| xlNotBetween | 次の値の間以外(xlBetween同様に二つの数式が指定されている場合のみ使用可) |
| xlNotEqual | 等しくない |
このサンプルコードを実行するとセルB2~B4に入力規則が設定され、リストと入力できる値「製品A」「製品B」「製品C」が表示されます。
また、設定された値以外が入力された際にエラー表示となりますが、ここでは中止アイコンを設定しているので、以下のように表示されます。

その他には情報アイコンと警告アイコンがありますが、その場合は指定外の値でも「OK」や「はい」を選択することで入力出来てしまうので、入力を制限したい場合はxlValidAlertStopを指定すると良いと思います。
≪情報アイコン xlValidAlertInformation≫

≪警告アイコン xlValidAlertWarning≫

2.入力規則の削除
1項のサンプルコード内に記述していますが、Validationオブジェクトに対してDeleteメソッドを利用することで入力規則を削除することができます。
構文:オブジェクト.Delete
指定したセル範囲の入力規則を削除するのみであれば、サンプルコードとしては以下の通りになります。
◆サンプルコード
Sub Sample2()
'セルB2~B4の入力規則を削除
Range("B2:B4").Validation.Delete
End Sub
実行することで入力規則が削除されます。
≪実行前≫

≪実行後≫

1項で入力規則の設定を行っていますが、その際に既に入力規則が設定されていた場合はエラーになりますので、そのエラーを防ぐ上でも先にDeleteメソッドを使用して対象範囲の入力規則を削除しておくと良いです。
3.入力規則の変更
入力規則を変更したい場合はModifyメソッドを利用します。このModifyメソッドの引数は1項のAddメソッドと同様になります。
構文:Modify(Type, AlertStyle, Operator, Formula1, Formula2)
例として「Product Name」欄に設定されている入力規則を変更します。ここには予め「製品A」「製品B」「製品C」が入力できるように入力規則が設定されていますが、それを「製品D」「製品E」「製品F」に変更します。
◆サンプルコード
Sub Sample3()
With Range("B2:B4").Validation
'Modify⇒入力規則を変更
.Modify Type:=xlValidateList, _
AlertStyle:=xlValidAlertStop, _
Formula1:="製品D,製品E,製品F"
End With
End Sub
実行すると設定されている入力規則が指定した内容に変更されます。
≪実行前≫

≪実行後≫

このように入力規則を変更することが可能です。
4.まとめ
入力規則は入力ミスを防止したり、入力する手間を省いたりできますので何かと使用するケースは多いのではないかと思います。
今回書いた通りVBAでの設定や削除自体は基本的な内容であれば簡単に設定できますので、利用機会があればご活用くださいませ。ただ、上にも書いた通り、既に設定されたセルに対して入力規則を設定しようとするとエラーになりますので削除してから実行するか、または変更として処理するということを覚えておくと良いと思います。
以上、入力規則の設定/削除/変更についてでした!今回の記事が何かの参考になれば幸いです。
Ryo

