ExcelマクロVBAサンプル集
入力規則のリスト入力を確認する

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
最終更新日:2013-10-28

入力規則のリスト入力を確認する


入力規則のリスト入力は、Excelの機能の中でも頻繁に使われる機能です、


目的の1つとして、リスト内のデータのみの入力に限定したいと言う事がありますが、

コピペで値の貼り付けを行うと、どんな値も入力出来てしまいます。

結果として、意図しない値が入力されてしまう事があります。


これを、入力規則のリスト内のデータが正しく入力されたかどうか判定する方法になります。

Sub sample()
  Dim rng As Range
  For Each rng In Selection
    If isValidationOk(rng) = False Then
      MsgBox rng.Address & ":入力値不正"
    End If
  Next
End Sub

Function isValidationOk(ByRef rng As Range) As Boolean
  Dim i As Integer
  Dim strList As String
  Dim strSplit() As String
  On Error Resume Next
  With rng
    '入力規則のリストかどうか
    If .Validation.Type = xlValidateList Then
      '入力規則がない場合はエラーが発生するので
      If Err.Number > 0 Then
        Err.Clear
        isValidationOk = True
        Exit Function
      End If
    Else
      '入力規則のリスト以外はチェックしない
      isValidationOk = True
      Exit Function
    End If
    '入力規則のリストのデータを配列に取得
    If Left(.Validation.Formula1, 1) = "=" Then
      'リストがセル範囲指定の場合
      With Range(Mid(.Validation.Formula1, 2))
        ReDim strSplit(.Count - 1)
        For i = 1 To .Count
          strSplit(i - 1) = .Item(i).Value
        Next
      End With
    Else
      'リストデータが直接指定の場合
      strSplit = Split(.Validation.Formula1, ",")
    End If
    '入力規則のリスト配列にあるかの判定
    For i = LBound(strSplit) To UBound(strSplit)
      If strSplit(i) = .Value Then
        isValidationOk = True
        Exit Function
      End If
    Next
    '入力規則のリスト配列にないのでエラー
    isValidationOk = False
    Exit Function
  End With
End Function


sampleでは、選択セル範囲において、入力規則のリスト内のデータか判定し、


それ以外が入力されている場合は、メッセージを表示しています。

入力規則において、

直接、リストデータを入れている場合は、

Range.Validation.Formula1

に、"A,B,C,・・・"のように、文字列として入っていますが、

他のセル範囲を参照している場合は、

"="に続けてセル範囲のアドレスが入っています。

そこで、セル範囲の値を取得し、そのセル範囲の値になっているかを確認する必要があります。

本来、入力規則まで設定してあるのに、他の値を入れてしまう事自体に問題があり、

それは、使用者に対する注意事項として伝えるへきものではありますが、

万一、リスト以外のデータが入力されてしまった場合に、その後の処理に支障をきたすのであれば、

やはりチェックしておく必要出てきます。

そのような場合があれば、参考にして下さい。




同じテーマ「マクロVBAサンプル集」の記事

右クリックメニューの変更(CommandBars)
エクセルのアイコン取得(FaceID)
素数を求めるマクロ
入力規則のリスト入力を確認する
配色を使用したカラー設定を固定カラーに再設定
指定セルに名前定義されているか判定する
Excel2003(xls)を2007以降(xlsx,xlsm)に変換する(HasVBProject)
ハイパーリンクからファイルのフルパスを取得する
ボタンのテキスト名のシートへ移動(Application.Caller)
Excelの表をPowerPointへ図として貼り付け
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除

新着記事NEW ・・・新着記事一覧を見る

エクセルの日付と時刻のまとめ|エクセル関数超技(3月6日)
Excelシートの複雑な計算式を解析するVBA|VBAサンプル集(2月18日)
VBAクラスの作り方:独自Rangeっぽいものを作ってみた|VBA技術解説(2月16日)
VBAクラスの作り方:列名のプロパティを自動作成する|VBA技術解説(2月14日)
VBAクラスの作り方:列名の入力支援と列移動対応|VBA技術解説(2月11日)
クラスを使って他ブックのイベントを補足する|VBA技術解説(2月6日)
Excelアドインの作成と登録について|VBA技術解説(2月3日)
参照設定、CreateObject、オブジェクト式の一覧|VBA技術解説(1月20日)
VBAでファイルを規定のアプリで開く方法|VBA技術解説(1月20日)
ドキュメントプロパティ(BuiltinDocumentProperties,CustomDocumentProperties)|VBA技術解説(1月19日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.マクロって何?VBAって何?|ExcelマクロVBA入門
7.とにかく書いて見よう(Sub,End Sub)|VBA入門
8.繰り返し処理(For Next)|ExcelマクロVBA入門
9.セルに文字を入れるとは(Range,Value)|VBA入門
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • 入力規則のリスト入力を確認する

    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。






    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。

    本文下部へ