入力規則で空白を選択できるようにする

中級VBA

はじめに

 最初は、Excel上での操作です。(後半にVBAのコードを示します。)

 データの入力規則でリストに空白を含める方法は2つあります。
 一つは、「元の値」の欄に、全角空白を含める方法。
 二つ目は、「元の値」の欄に、セル範囲を指定し、その中に空白を含める事です。
 

「元の値」に直接リストを含める方法

 空白をリストに含めるには、以下のようにカンマで区切って全角の空白文字を追加しておきます。

 上記のリストは、「りんご,ミカン,パイン,(全角空白)」 となっています。
 この方法の欠点は、全く何も文字が無い状態ではなく、「全角空白文字」が入力される形になる事です。
 全く何も文字が無い状態にしたければ、Deleteキーで値を消すしかありません。

リスト以外の値も入力可能にする

 入力規則のリストでは、空白を無視したり、しないようにルールを設定できます。
また、エラーメッセージの表示の有無も設定できます。

用 途 空白を無視する エラーメッセージ
リスト以外の値を認めないチェックを外すチェック
リストと空白以外を認めないチェックチェック
リストとその他の値を許可するチェックを外すチェックを外す

 リスト以外の値を認めない場合が一番厳しい条件ですが、初期状態の空白はエラーにはなりません。

「元の値」にセル範囲を指定する方法

 セルの範囲を指定する場合は、リストを直接指定する場合と異なり、値の無い状態を選択させることが出来ます。
 「元の値」には、空白を含めた範囲を指定してください。

VBAで入力規則のリスト選択

 マクロの記録を使ってプログラムコードを再現してみます。
 最初にセルを1つ選択した状態から、データの入力規則を設定していきました。
 エラーメッセージは出ないようにしていますので、リスト以外の値でも入力可能です。

直接リストを指定するコード

Sub Macro1()
'
' Macro1 Macro
'

'
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="りんご,ミカン,パイン, "
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .IMEMode = xlIMEModeNoControl
        .ShowInput = True
        .ShowError = False
    End With    
End Sub

 何かセルを選択して上記プログラムを実行すると、入力規則が設定されます。
 リストは全角の空白が含まれていますので、空白を選ぶとセルに入力されます。
 この状態で、
 If Cells() = “” then
 などとすると、全角の空白がある所はヒットしなくなります。紛らわしいので改善策を考えます。
 
 イベントプロシージャを使って、入力規則のリストが設定されていて、全角空白文字が入力されている場合に、全角空白を削除するようにしてみましょう。 

Sub DeleteZENKAKUSpace()
    Dim t As Long
    t = 0
    On Error Resume Next
    t = Selection.Item(1).Validation.Type
    On Error GoTo 0
    
    If t = 3 And Selection.Item(1).Value = " " Then
        Selection.Item(1).Value = ""
        MsgBox "全角空白を削除しました。"
    End If
End Sub

 Validation.Type が 3 の場合は、入力規則のリストが設定されている事になります。
 このコードを、シートモジュールの Worksheet_Change で呼び出せば良いでしょう。

'該当するシートのイベントプロシージャで呼び出す
Private Sub Worksheet_Change(ByVal Target As Range)
    Call DeleteZENKAKUSpace
End Sub

セル範囲をリストにするコード

 セルの範囲をリストに指定する場合は、何も入力されていないセルを範囲に含めればOKです。

Sub Macro2()
'
' Macro2 Macro
'
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=$H$6:$H$10"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .IMEMode = xlIMEModeNoControl
        .ShowInput = True
        .ShowError = False
    End With
End Sub

まとめ

 データの入力規則でリストに空白を含める方法を2つ見てきました。
 一つ目の、「元の値」の欄に、全角空白を含める方法では、後から全角空白を削除する方法を試しました。
 少々面倒ですが、思ったような操作ができそうです。
 
 二つ目は、「元の値」の欄に、セル範囲を指定し、その中に空白セルを含める方法でしたが、これはシート上で操作する方法とVBAで差異はありませんでした。
 
 入力規則のリストでは、どのような値を取るかルールを決める事が出来ますが、
 ・空白を無視する
 ・エラーメッセージタブ
 の2つを使えば、空白許可などのルールを調整できます。

 参考にしてください。

コメント

タイトルとURLをコピーしました