20191119備忘録 エクセル複数セルのリストの連動(分岐でなく組み合わせ)について
「入力規則で複数のドロップダウンリストを連動させる」など、
セルのリスト(+セル範囲に名前を付ける)をリストの結果によって、次のリストの候補を変える(名前によって変更)方法がある。
セルのリスト(+セル範囲に名前を付ける)をリストの結果によって、次のリストの候補を変える(名前によって変更)方法がある。
エクセルのVBAを使わないので楽だが、
リスト結果を連動させる場合で、3個以上の場合は注意が必要な気がする。
リスト結果を連動させる場合で、3個以上の場合は注意が必要な気がする。
上記方法は、「分岐」の場合は、複数リストが連動しても問題ない。
「セル1の結果を受けて、セル2の結果を出し、それを受けてセル3のリストを出す」は、できる。
(例えば、動物・人間→犬・猫→チワワ・柴犬など分岐)
(分岐の場合は、一つ前のセルの値を見ればいい。)
「セル1の結果を受けて、セル2の結果を出し、それを受けてセル3のリストを出す」は、できる。
(例えば、動物・人間→犬・猫→チワワ・柴犬など分岐)
(分岐の場合は、一つ前のセルの値を見ればいい。)
しかし、「組み合わせ」の場合は、上記方法ではできない気がする。
「セル1の結果と、セル2の結果の組み合わせによって、それを受けてセル3のリストを出す」というケース。
(例えば、収入・支出がセル1、会費区分がセル2、大項目がセル3(以下中項目、小項目が続く)のように、セル1とセル2が組み合わせによって以降のリスト候補が異なる場合)
(複数のセルの状態によって当該セルのリストを変える必要がある)
(例えば、収入・支出がセル1、会費区分がセル2、大項目がセル3(以下中項目、小項目が続く)のように、セル1とセル2が組み合わせによって以降のリスト候補が異なる場合)
(複数のセルの状態によって当該セルのリストを変える必要がある)
下記は、リストの組み合わせのパターンをVBAで作成(まだ作成中)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.Intersect(ActiveCell, Range("大項目")) Is Nothing Then '大項目のセルが選択された場合
Else
With Range("大項目").Validation '入力規則変更
.Delete
'以下組み合わせの分岐入れる
'「収入・支出」、「会費区分」の組み合わせによって大項目のリストを変更
If ActiveCell.Offset(0, -2) = "収入" And ActiveCell.Offset(0, -1) <> "" Then '収入は会費区分は共通
.Add Type:=xlValidateList, Operator:=xlEqual, Formula1:="=大項目1"
ElseIf ActiveCell.Offset(0, -2) = "支出" And ActiveCell.Offset(0, -1) = "会計A" Then
.Add Type:=xlValidateList, Operator:=xlEqual, Formula1:="=大項目2"
ElseIf ActiveCell.Offset(0, -2) = "支出" And ActiveCell.Offset(0, -1) = "会計B" Then
.Add Type:=xlValidateList, Operator:=xlEqual, Formula1:="=大項目3"
Else
End If
End With
End If
.Delete
'以下組み合わせの分岐入れる
'「収入・支出」、「会費区分」の組み合わせによって大項目のリストを変更
If ActiveCell.Offset(0, -2) = "収入" And ActiveCell.Offset(0, -1) <> "" Then '収入は会費区分は共通
.Add Type:=xlValidateList, Operator:=xlEqual, Formula1:="=大項目1"
ElseIf ActiveCell.Offset(0, -2) = "支出" And ActiveCell.Offset(0, -1) = "会計A" Then
.Add Type:=xlValidateList, Operator:=xlEqual, Formula1:="=大項目2"
ElseIf ActiveCell.Offset(0, -2) = "支出" And ActiveCell.Offset(0, -1) = "会計B" Then
.Add Type:=xlValidateList, Operator:=xlEqual, Formula1:="=大項目3"
Else
End If
End With
End If
End Sub