【会員アンケートご協力のお願い】抽選で計5名様に役立つ書籍をプレゼント!
セルの入力規則を設定する(Validationオブジェクト)|Excel VBA |
セルの入力規則を表すオブジェクトはValidationオブジェクトです。
Validationオブジェクトは、RangeオブジェクトのValidationプロパティで取得します。
セルに入力規則を設定するには、ValidationオブジェクトのAddメソッドを使用します。
ただし、すでに入力規則が設定されているセルに対してAddメソッドを実行すると実行時エラーが発生するので、Addメソッドの前にDeleteメソッドで入力規則を削除しておきます。
次のマクロはセル範囲B2:B10に、1〜12の整数のみ入力可能な入力規則を設定します。
Sub Sample1()
With Range("B2:B10").Validation
.Delete
.Add Type:=xlValidateWholeNumber, _
Operator:=xlBetween, _
Formula1:=1, Formula2:=12 '---1〜12の間の整数
End With
End Sub
引数Typeは必ず指定する引数です。「xlValidateWholeNumber」を指定すると、整数のみ入力可能になります。
引数Operatorに「xlBetween」を指定すると、引数Formura1、Formura2で指定した2値の間の値のみが入力可能になります。引数Operatorには、「xlGreaterEqual(以上)」、「xlGreater(より大きい)」、「xlLessEqual(以下)」、「xlLess(未満)」、「xlNotBetween (2つの値以外)」、「xlNotEqual(以外)」を指定できます。
日付の規則を設定するには、引数Typeに「xlValidateDate」を指定します。
次のマクロはセルC2:C10に、今日以降の日付が入力可能な入力規則を設定します。
引数Formura1には日付を直接指定したり、VBAのDate関数を指定したりもできますが、ここではワークシート関数のToday関数を指定しています。
Sub Sample2()
With Range("C2:C10").Validation
.Delete
.Add Type:=xlValidateDate, _
Operator:=xlGreaterEqual, _
Formula1:="=TODAY()" '---今日以降の日付
End With
End Sub
リストにある値のみを入力可能にするには、引数Typeに「xlValidateList」を指定し、引数Formura1にリストを指定します。次のマクロはセルD2:D10に、入力可能なリストを設定します。
Sub Sample3()
With Range("D2:D10").Validation
.Delete
.Add Type:=xlValidateList, _
Operator:=xlEqual, _
Formula1:="ロンドン,東京,ニューヨーク"
End With
End Sub
リストはカンマ区切りの文字列や変数のほかに、次のようにセル範囲も設定できます。
このとき、"="から始め、セル範囲は絶対参照にしてください。
Formula1:="=$G$2:$G$4" ’セル範囲
Formula1:="=Sheet3!$H$2:$H$5" ’他のシートにあるセル範囲
Formula1:="=支店リスト" ' 名前付きセル範囲
セルにIMEモードを設定することもできます。
IMEモードを設定するには、ValidationオブジェクトのIMEModeプロパティを使用します。
入力値の制限は行わず、セルにIMEモードの設定だけをしたいときは、Addメソッドの引数Typeに「xlValidateInputOnly(すべての値)」を指定すればよいでしょう。
次のマクロは、セルE2:E20に入力値の条件なしで、IMEモードを半角英数に設定します。
Sub Sample4()
With Range("E2:E10").Validation
.Delete
.Add Type:=xlValidateInputOnly
.IMEMode = xlIMEModeAlpha
End With
End Sub
入力規則を設定するときは、Deleteメソッドで削除してからAddメソッドで設定するのがお約束ですが、ほんの1か所を変更するだけならModifyメソッドを使う方法もあります。
Modifyメソッドの引数はAddメソッドと同じです。ただし、引数Typeは省略可能になります。
次のマクロは、入力規則のリストをH列に入っているデータに設定し直します。
Sub Sample5()
Range("D2:D10").Validation.Modify _
Formula1:="=" & Range("H2", Cells(Rows.Count, 8).End(xlUp)).Address
End Sub
入力規則のリストにセル範囲を指定するとき、他のシートのセル範囲を指定できるのはExcel 2007以降です。Excel2003以前のバージョンで他のシートのセル範囲を指定する場合は、あらかじめリストを入力したセル範囲に名前を設定しておき、引数Formula1には名前付きセル範囲を指定してください。