【会員アンケートご協力のお願い】抽選で計5名様に役立つ書籍をプレゼント!

HOME > 即効テクニック > Excel VBA > セル操作関連のテクニック > セルの入力規則を設定する(Validationオブジェクト)

セルの入力規則を設定する(Validationオブジェクト)|Excel VBA

セル操作関連のテクニック

セルの入力規則を設定する(Validationオブジェクト)

(Excel 2000/2002/2003/2007/2010/2013/2016)

セルの入力規則を表すオブジェクトは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モードを設定することもできます。
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には名前付きセル範囲を指定してください。