1/02/2020

Excel VBA。入力規則をデータ読み取り後に設定しちゃうとさらに楽になります。【Input rules】

Excel VBA。入力規則をデータ読み取り後に設定しちゃうとさらに楽になります。

<Excel VBA:入力規則>


Excel VBAをつかって、テキストデータなどを読み取ったあとに、Excelでアレコレ設定するのもいいのですが、どっちみちならば、データを読み取ったときに、一緒にExcel VBAで構文をつくっておいて、実行させた方が、楽なこともあるようです。

そこで、今回は、入力規則をExcel VBAで構文を作ってみましょう。

次のように入力規則のリストを設定していきます。

通常Excelの入力規則のリストを設定する場合、データタブにある、「データ入力規則」からダイアログボックスを表示して、リストを設定するわけですが、リストは、事前に用意しておくのか、あるいは、入力して、設定するわけですが、結構面倒な処理なわけです。

Excel VBAで構文を作ってしまえば、シートにわざわざリストを用意しなくてもいいわけですね。

そして、Excel VBAの構文自体も、非常に簡単でわかりやすいと思います。
では、構文を確認してみましょう。

Sub 入力規則のリスト()
Dim i As Integer
For i = 2 To 6
    With Cells(i, "b").Validation
        .Delete
        .Add Type:=xlValidateList, Formula1:="鉛筆,ボールペン,消しゴム"
    End With
Next
End Sub

たったこの数行でいいわけです。

構文を説明していきます。

Dim i As Integer
は、このあと、For To Nextで使うための変数を設定しています。

今回は、数件だけなので、Integerにしています。

For i = 2 To 6~Next
今回は、最終行を持ってくる変数は用意していませんが、データが多い場合や、不規則な場合は、最終行を算出させるといいですね。

そして、ここからが、「入力規則のリスト」の心臓部です。

With Cells(i, "b").Validation
        .Delete
        .Add Type:=xlValidateList, Formula1:="鉛筆,ボールペン,消しゴム"
End With

With~End Wihですが、With以降の「Cells(i, "b").Validation」を繰り返して入力するのが面倒なのと、わかりやすくするために、Withを使用しています。

Cells(i, "b").Validationの「Validation(バリデーション)オブジェクト」が、入力規則のリストを設定するための構文です。

たったこれだけなんですね。

「.Delete」
意外と重要なのが、この一行です。なんで削除なのかというと、データの入力規則が事前に設定されていた場会、エラーになってしまうからですね。念のための保険的な一行です。

「.Add Type:=xlValidateList, Formula1:="鉛筆,ボールペン,消しゴム"」
セルに次の情報を追加します。

Type:=xlValidateList は、入力規則のリストを意味する引数です。

整数の場合は、xlValidateWholeNumberという引数を使います。

そして、「Formula1:="鉛筆,ボールペン,消しゴム"」
これが、リストの中身に該当します。

「”(ダブルコーテーション)」は、前後の1度だけですので、文字ごとに設定しないので注意が必要です。

なお、今回は、手入力でしたが、セルに事前にリスト内容を用意してある場合は、
「Formala1:=”=Sheet1!A2:A5”」
という表記で対応します。