概要
GetCellValidationは、指定したセルに設定されている入力規則リストを取得し、候補値を一次元配列として返す関数です。
入力規則リスト切替スピンボタンでは、現在選択しているセルの候補一覧を取り出すために使っています。
使う場面
- 入力規則のリスト候補をVBAから取得したい
- カンマ区切りの入力規則を配列化したい
- 範囲参照の入力規則から候補値を取り出したい
- リスト候補をもとに、前後の値へ切り替えるUIを作りたい
使用例
Dim list As Variant
list = GetCellValidation(Range("B2"))
If IsEmpty(list) Then Exit Sub
MsgBox list(1)
コピー可能な実装コード
GetCellValidation.bas
vba
コードを読み込み中...初心者向けコード解説
まず、Cell.Validationで対象セルのValidationオブジェクトを取得します。validation.Type = xlValidateListで、入力規則がリスト形式かどうかを確認します。
リスト形式の場合は、Formula1から候補の定義を読み取ります。Formula1が=で始まる場合は範囲参照として扱い、その範囲内のセル値を順番に配列へ入れます。
Formula1が範囲参照でない場合は、未対応,対応中,完了のようなカンマ区切り文字列として扱い、Splitで配列化します。Splitで作られる配列は0始まりなので、ConvArray1D_Start1で1始まり配列へ変換しています。
関連記事
- 入力規則リストを矢印ボタンで切り替えるEventShowMoveSpinButton_Value
- 入力規則リストを前後へ切り替えるChangeDownValue_MoveSpinButton / ChangeUpValue_MoveSpinButton
- 0始まり配列を1始まりへ変換するConvArray1D_Start1
注意点
- リスト形式の入力規則だけを対象にしています。
- カンマ区切りリストでは、項目名そのものにカンマが含まれる場合は正しく分割できません。
- 範囲参照の入力規則では、
Range(Mid(Formula, 2))で解釈できる参照式を想定しています。 - 別シート参照や名前定義を使う場合は、参照式に合わせた調整が必要になることがあります。
- 入力規則がリスト形式でない場合は
Emptyを返します。
軽いまとめ
GetCellValidationを用意しておくと、セルに設定済みの入力規則をVBA側の候補配列として扱えます。入力規則を単なる制限機能として使うだけでなく、独自の入力補助UIに展開しやすくなる部品です。
