@pupupopo

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

VBAでドロップダウン双方向の連動

ドロップダウン1とドロップダウン2があるとします。
ドロップダウン1には選択肢AとBが格納されています。
ドロップダウン1でAを選んだ場合は、ドロップダウン2で複数の選択肢を表示させます。
ドロップダウン1でBを選んだ場合は、ドロップダウン2で選択肢は表示させず、NULLを受け取りたいです。(全角スペースで何もないように見せるのは無し)

現在ですが、ドロップダウン1でAを選びドロップダウン2で選択したあと、ドロップダウン1をBに変えてもドロップダウン2の選択肢がそのまま残ってしまいます。
ドロップダウン2に既にデータが入っていたとしても、その後でドロップダウン1をBに変更した場合セルをクリアさせたいです。

また、空白の選択肢を作る(もしくは選択肢を表示させない)場合の対処法として、よく全角スペースを入れる手段があると思いますが、今回の場合はこれを避けたいです。

別ウィンドウでコンボボックスを出したりするのではなく、セル内のドロップダウンで上記のような仕組みを作ることは可能でしょうか?

現在以下のようなコードを書いてみたのですが、双方向の連動ということしかできず、この形式だと下のような問題点が発生してしまいます。
・選択肢1つに対して連動する選択肢も1つであること
・選択肢なしにするということが達成できていないこと

これを作るにはどうしたらいいのか、知恵を貸していただけたらと思います。

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myRow As Long

If Not Intersect(Target, Range("A1:B1")) Is Nothing Then
Application.EnableEvents = False
If Target.Address(0, 0) = "A1" Then
myRow = WorksheetFunction.Match(Range("A1"), Columns(4), 0)
Range("B1") = Range("E" & myRow)
Else
myRow = WorksheetFunction.Match(Range("B1"), Columns(5), 0)
Range("A1") = Range("D" & myRow)
End If
Application.EnableEvents = True
End If
End Sub
0 likes

1Answer

問題内容を完全には理解できていないですが、これでは、だめでしょうか?

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(False, False) <> "A1" Then
        Exit Sub
    End If
    
    Application.EnableEvents = False
    
    Range("B1").Validation.Delete
    If Target.Value = "B" Then
        Range("B1").Value = ""
    Else
        Range("B1").Validation.Add _
            Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
            Operator:=xlBetween, Formula1:="1,2,3,4"
    End If
    
    Application.EnableEvents = True
End Sub
0Like

Your answer might help someone💌