ユーザー データ検証の選択が以前のユーザー データ検証の選択と競合していることをどのように証明できますか?

ユーザー データ検証の選択が以前のユーザー データ検証の選択と競合していることをどのように証明できますか?

複数階層のドロップダウンリストの使用一連のユーザー選択を作成しました。ユーザーは左側の最初のリストから選択します。次に、最初の選択「役割」に応じて、ユーザーは「グループ」を選択できます。最後の「アイテム」の選択は「グループ」に基づきます。

ただし、ユーザーはその後戻って、以前選択した「アイテム」と一致しない別の「ロール」または「グループ」を選択できます。

ユーザーに警告する仕組みはありますかすぐにこの誤ったデータを入力したのでしょうか?

無効なデータを「丸で囲む」ことができることは知っていますが、それを行うには、ユーザーが自分で確認し、そのたびに更新する必要があるようです。変更のたびにこれをトリガーできれば完璧です。

答え1

Sheet2にデータ検証リストを設定し、 に最初のデータ検証を設定したとします。 で選択された内容に基づいてSheet1!A2の検証を変更したいとします。このコードを に配置します。Sheet1!B2Sheet1!A2Sheet1 のワークシート モジュール:

コード

Sub worksheet_change(ByVal Target As Range)
If Not Intersect(Target, Range("A2")) Is Nothing Then
    If Target.Value = "one" Then
        With Range("B2").Validation
                 .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Sheet2!B1:B2"
        End With
    End If
    If Target.Value = "two" Then
            With Range("B2").Validation
                 .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Sheet2!B3:B4"
            End With
    End If
    If Target.Value = "three" Then
                With Range("B2").Validation
                     .Delete
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Sheet2!B5:B6"
                End With
    End If
End If


End Sub

if次に、検証を追加する追加リストごとに追加のステートメントを設定します。

説明

基本的に、これはワークシートに変更があった場合、それがどこにあり、値が含まれているかを確認することを意味しますA2。この値はデータ検証シート内にのみ存在します。したがって、これらのことが当てはまる場合は次のようになります。

B2それぞれの可能な値を確認し、参照されているデータ検証リストで定義されている可能性にデータ検証を設定します。

データに合わせて可能性を広げ、追加のリストに追加の層を追加します。

関連情報