入力規則で空白を選択できるようにする
目次- はじめに
- 「元の値」に直接リストを含める方法
- リスト以外の値も入力可能にする
- 「元の値」にセル範囲を指定する方法
- 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 SubValidation.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つを使えば、空白許可などのルールを調整できます。
参考にしてください。
関連記事: VBAで入力規則を設定 行の挿入と削除 ExcelVBAの開発環境を整える 自力でプログラムを書いてみる Selectionの使い方 ド素人でも学べるExcelVBA講座 007 セルオブジェクト ド素人でも学べる ExcelVBA 002 ユーザーフォーム 第8回 コンボボックス