入力規則その3

3階層の場合は参照元データの表の構成が少し複雑になってきます。2段階の場合は、1階層目のデータは縦並びで、2階層目はの1階層目に関連するデータは、横並びに出来ますが、3階層の場合は、1階層目、2階層目は縦並びで、3階層目が横並びになります。 参照データは、今回の説明の様に1階層目を縦並びにしないで横並びにする方法も、もちろんありますがトータルでのデータの構成は同じような感じになります。
2階層の参照元データの例 | 3階層の参照元データの例 | 3階層の入力例 |
---|---|---|
![]() |
![]() |
![]() |
●3階層入力規則の流れ
[参照元の表の作成]
1階層目(縦並び、2階層目の数だけ間をあける)
2階層目(縦並び)
3階層目(横並び)
(vbaでの処理の流れ)
1)1階層目の入力規則の設定
参照データのカンマ区切り文字列化(空白の部分をのぞいて作成)
1階層目の選択
2)1階層目のデータに対応する2階層目のカンマ区切り文字列の作成
3)2階層目の入力規則の設定
2階層目の選択
4) 2階層目のデータに対応する3階層目のカンマ区切り文字列の作成
5)3階層目の入力規則の設定
3階層目の選択
上記の様に各選択支に選択状況に応じて、その次の参照データの文字列を作ってその文字列を次の段階の入力規則に反映させるように逐次処理が進むことになります。[参照元の表の作成]
1階層目(縦並び、2階層目の数だけ間をあける)
2階層目(縦並び)
3階層目(横並び)
(vbaでの処理の流れ)
1)1階層目の入力規則の設定
参照データのカンマ区切り文字列化(空白の部分をのぞいて作成)
2)1階層目のデータに対応する2階層目のカンマ区切り文字列の作成
3)2階層目の入力規則の設定
4) 2階層目のデータに対応する3階層目のカンマ区切り文字列の作成
5)3階層目の入力規則の設定
ここでは、固定入力枠での3階層入力の場合と、表形式での3階層入力の2つの形式を説明します。

この例は、くだものの、名前、品種、産地の情報を3階層で選択していきます。
選択肢を変更すると、その下流の入力肢の前のデータはクリアされます。
●ここでの基本的モジュール
(標準モジュール)
getnt3(1階層目)
getit1(2階層目)
getit2(3階層目)
clr10(解除)
(シートモジュール)
Private Sub Worksheet_Change(ByVal Target As Range)
:
(標準モジュール)
getnt3(1階層目)
getit1(2階層目)
getit2(3階層目)
clr10(解除)
(シートモジュール)
Private Sub Worksheet_Change(ByVal Target As Range)
:
3階層入力規則の1階層目(固定枠)
3階層入力規則の2階層目(固定枠)
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)
:
(標準モジュール)
getnt4(1階層目)
pgetit1(2階層目)
pgetit2(3階層目)
clr11(解除)
(シートモジュール)
Private Sub Worksheet_Change(ByVal Target As Range)
:
3階層入力規則の1階層目(表形式)
3階層入力規則の2階層目(表形式)
3階層入力規則の3階層目(表形式)
入力規則の解除
選択肢の変化の検出(シートモジュール)
入力規則_3階層入力(固定枠)(ダウンロード)
※(固定枠入力のデータも含みます)
以上のTIPSをまとめたファイルです。お時間の無い方におまとめ編です。
入力制限や2階層選択入力について実際に動かして試せます。
