ExcelマクロVBAサンプル集 | 入力規則のリスト入力を確認する | Excelマクロの実用サンプル、エクセル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,・・・"のように、文字列として入っていますが、

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

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

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

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

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

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

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

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




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

配色を使用したカラー設定を固定カラーに再設定
指定セルに名前定義されているか判定する
Excel2003(xls)を2007以降(xlsx,xlsm)に変換する(HasVBProject)
ハイパーリンクからファイルのフルパスを取得する
ボタンのテキスト名のシートへ移動(Application.Caller)
Excelの表をPowerPointへ図として貼り付け
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除

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

データクレンジングと名寄せ|ExcelマクロVBA技術解説(10月20日)
SUMIFの間違いによるパフォーマンスの低下について|エクセル関数超技(6月17日)
条件式のいろいろな書き方:TrueとFalseの判定とは|ExcelマクロVBA技術解説(6月15日)
空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)

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

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
4.変数とデータ型(Dim)|ExcelマクロVBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
6.定数と型宣言文字(Const)|ExcelマクロVBA入門
7.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
8.マクロって何?VBAって何?|ExcelマクロVBA入門
9.CSVの読み込み方法|ExcelマクロVBAサンプル集
10.ひらがな⇔カタカナの変換|エクセル基本操作



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

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


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

    ↑ PAGE TOP