データ検証ルールを自分のデータに適用していますが、次のことを達成したいと考えています。
X
別のセルに value が入力されている場合、値をセルに設定しますY
。たとえば、あるセルに がある場合Not a Product Owner
、次のセルをに設定しN/A
て編集できないようにします。最初のセルに とは異なる値が含まれている場合Not a Product Owner
、次のセルを編集できるようにする必要があります (設定した検証ルールに従って値を許可します)。
データ検証ルールを自分のデータに適用していますが、次のことを達成したいと考えています。
X
別のセルに value が入力されている場合、値をセルに設定しますY
。たとえば、あるセルに がある場合Not a Product Owner
、次のセルをに設定しN/A
て編集できないようにします。最初のセルに とは異なる値が含まれている場合Not a Product Owner
、次のセルを編集できるようにする必要があります (設定した検証ルールに従って値を許可します)。
これを行うVBAの方法は次のとおりです。
このコードはWorksheet_Change
、ワークブックの関連シートのイベントモジュールに配置する必要があります。
つまり、列Aのセルがに変更されると、列BNot a product owner
にn/a
追加され、セルは編集のためにロックされます。どちらかといえば、データ検証リストが追加され、セルのロックが解除されます。
このアプローチでは、シートをパスワードで保護する必要があることに注意してください。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Options As String
Options = "1. Choice1, 2. Choice2, 3. Choice3" //Change this options
ActiveSheet.Unprotect Password:="Your Password"
Application.EnableEvents = False
If Not Intersect(Range("A:A"), Target) Is Nothing Then
If Target = "Not a product owner" Then
Target.Offset(0, 1).Validation.Delete
Target.Offset(0, 1) = "n/a"
Target.Offset(0, 1).Locked = True
Else
Target.Offset(0, 1).Locked = False
Target.Offset(0, 1).Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Options
End If
End If
Application.EnableEvents = True
ActiveSheet.Protect Password:="Your Password"
End Sub