スナックelve 本店

バツイチ40代女の日記です

マクロで隣のセルの内容によってリストの内容を変化させたい

B列のグループによってC列の人を変えたい
f:id:elve:20190701220408p:plain

マクロなしは前記事参照
snack.elve.club

これをマクロで記録して整頓すると

Sub Macro1()
    '名前を付ける
    Range("H1:H5,I1:I4,J1:J6,K1:K7,L1:L5").CreateNames Top:=True, Left:=False, Bottom:=False, Right:=False
    'B列リスト設定
    Range("B2:B6").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=グループ"
    End With
    'C列リスト設定
    Range("C2:C6").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=INDIRECT(B2)"
    End With
    Range("B2").Select
End Sub

これ実行するとエラーになりますん( ノД`)シクシク…
f:id:elve:20190701221846p:plain

f:id:elve:20190701221913p:plain

C列にB列で指定した範囲を見てね、ってやってるので空欄だと死ぬわけですな・・・。
回避方法が分からなかったので、未定義という空欄の範囲を追加しました( ノД`)シクシク…

Sub Macro1()
    '名前を付ける
    Range("G1:G2,H1:H5,I1:I4,J1:J6,K1:K7,L1:L5").CreateNames Top:=True, Left:=False, Bottom:=False, Right:=False
    'B列リスト設定
    Range("B2:B6").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=グループ"
    End With
    Range("B2:B6") = "未定義"
    'C列リスト設定
    Range("C2:C6").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=INDIRECT(B2)"
    End With
    Range("B2").Select
End Sub

f:id:elve:20190701222308p:plain

もっといい方法があったら教えてください(´・ω・`)