Sample Site

入力規則その3

入力規則その2では、主に2段階の選択式の入力に関する例を見てきましたが、ここではさらに3段階の入力規則について考えます。 2段階までならば、vbaなんか使わなくても参照元の名前とINDIRECT関数で出来ましたが、3段階になると、参照元データの選択肢が飛躍的に多くなり、名前を付けてやるのは現実的に難しくなってきます。
3階層の場合は参照元データの表の構成が少し複雑になってきます。2段階の場合は、1階層目のデータは縦並びで、2階層目はの1階層目に関連するデータは、横並びに出来ますが、3階層の場合は、1階層目、2階層目は縦並びで、3階層目が横並びになります。 参照データは、今回の説明の様に1階層目を縦並びにしないで横並びにする方法も、もちろんありますがトータルでのデータの構成は同じような感じになります。


2階層の参照元データの例3階層の参照元データの例3階層の入力例
※この3階層の参照データー表は、全ての階層で動的にカンマ区切りの文字列を作っているので、参照元のデータの変更が非常に容易で、この表のフォーマットに従った構造であれば単純に、データ追加や削除をするだけで、選択肢に反映されます。

●3階層入力規則の流れ
[参照元の表の作成]
1階層目(縦並び、2階層目の数だけ間をあける)
2階層目(縦並び)
3階層目(横並び)

(vbaでの処理の流れ)
1)1階層目の入力規則の設定
参照データのカンマ区切り文字列化(空白の部分をのぞいて作成)
1階層目の選択
2)1階層目のデータに対応する2階層目のカンマ区切り文字列の作成
3)2階層目の入力規則の設定
2階層目の選択
4) 2階層目のデータに対応する3階層目のカンマ区切り文字列の作成
5)3階層目の入力規則の設定
3階層目の選択
上記の様に各選択支に選択状況に応じて、その次の参照データの文字列を作ってその文字列を次の段階の入力規則に反映させるように逐次処理が進むことになります。
ここでは、固定入力枠での3階層入力の場合と、表形式での3階層入力の2つの形式を説明します。

3階層入力規則の例(固定枠形式)

この例は、くだものの、名前、品種、産地の情報を3階層で選択していきます。
選択肢を変更すると、その下流の入力肢の前のデータはクリアされます。
●ここでの基本的モジュール
(標準モジュール)
getnt3(1階層目)
getit1(2階層目)
getit2(3階層目)
clr10(解除)
(シートモジュール)
Private Sub Worksheet_Change(ByVal Target As Range)
   :

3階層入力規則の1階層目(固定枠)


3階層入力規則の2階層目(固定枠)


3階層入力規則の3階層目(固定枠)


入力規則の解除


選択肢の変化の検出(シートモジュール)

入力規則_3階層入力(固定枠)(ダウンロード)
※(表形式入力のデータも含みます)

3階層入力規則の例(表形式)

この例は、上記と同じ参照元データを元に、表形式で選択入力するようにしたものです。
固定枠と異なる点は、
px = ActiveCell.Row 'アクテイブセルの座標x
py = ActiveCell.Column 'アクテイブセルの座標y
と言うActiveCellプロパティで、現時点での入力枠の座標を取得して、次の入力規則の設定の処理をしていきます。
●ここでの基本的モジュール
(標準モジュール)
getnt4(1階層目)
pgetit1(2階層目)
pgetit2(3階層目)
clr11(解除)
(シートモジュール)
Private Sub Worksheet_Change(ByVal Target As Range)
   :

3階層入力規則の1階層目(表形式)


3階層入力規則の2階層目(表形式)


3階層入力規則の3階層目(表形式)


入力規則の解除


選択肢の変化の検出(シートモジュール)

入力規則_3階層入力(固定枠)(ダウンロード)
※(固定枠入力のデータも含みます)

入力規則その3(総まとめ)
以上のTIPSをまとめたファイルです。お時間の無い方におまとめ編です。
入力制限や2階層選択入力について実際に動かして試せます。



Sample Site