はじめに
セルにデータの入力規則が設定されているかを調べる方法はいくつか存在するようですが、
Range.Validation.Type
を使った方法がわかりやすいと思いますので、この方法を説明します。
入力規則のタイプ
データの入力規則を開くと、入力値の種類を選択することになります。


これらの種類は、上記のように数値が割り当てられています。
最初の「すべての値」が 0 で、それよりも大きい場合には、入力規則が設定されていると見れば良いでしょう。
ただ、何も設定されていないセルに対して、Validation.Type を実行すると実行時エラーとなりますので、エラーを回避する手段を取らなければなりません。

プログラムコード
以下のコードは、現在選択されているセルに入力規則が設定されていればメッセージを出します。
Selection を Range(), Cells() に書き変えて使う事ができます。
Sub TestCode()
'入力規則が設定されているか調べる(単一セル)
Dim t As Long
t = 0
On Error Resume Next
t = Selection.Item(1).Validation.Type
On Error GoTo 0
Debug.Print t 'タイプ番号を表示
If t > 0 Then
MsgBox "入力規則が設定されています。"
End If
End Sub
この例では、 Selection が複数セルである場合があるので、先頭のセルを Item(1) として、単一のセルのみで調べるようにしています。
Validation.Type は入力規則が設定されていない場合、実行時エラーとなるので、
On Error Resume Next
On Error GoTo 0
で囲んでエラーを表示させないようにしています。
まとめ
入力規則が設定されているか調べるのは意外に厄介で、実行時エラーの回避などを念頭に置いて処理しなければなりません。
実際のプログラミングでは、入力規則の種類も得られるので、必要なら区別して処理するのも良いでしょう。
参考にしてください。
コメント