有没有一种方法可以基于工作表中的数据验证列表值生成IF语句?

时间:2018-11-13 16:46:13

标签: excel vba excel-vba

在P列中,我有一个下拉列表,对于我创建的每个新工作表,要添加的代码如下所示。

lastrow = ActiveWorkbook.Worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp).row

With Range("P2:P" & lastrow).Validation
 .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
 Operator:=xlBetween, Formula1:="Yes,No,N/A"
 .IgnoreBlank = True
 .InCellDropdown = True
End With

在Q列中,我希望根据用户从P列中输入的特定值填充另一个下拉列表。

例如,如果用户在P列中选择No,则我只希望在Q列的该行中填充值value 1value 2。如果用户选择{{1 }}在P列中,我只希望在Q列中填充值Yesvalue 3

我知道我需要在上面声明以下内容:

value 4

有人可以帮我修改此内容吗?或者如果列中没有数据,这是不可能的吗?

1 个答案:

答案 0 :(得分:0)

接下来,将根据列P上选择的值将验证列表添加到列Q:

Sub foo()
lastrow = ThisWorkbook.Worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
With Range("P2:P" & lastrow).Validation
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
    Operator:=xlBetween, Formula1:="Yes,No,N/A"
    .IgnoreBlank = True
    .InCellDropdown = True
End With
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 16 And Target.Value = "No" Then
    With Range("Q" & Target.Row).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Operator:=xlBetween, Formula1:="value 1, value 2"
        .IgnoreBlank = True
        .InCellDropdown = True
    End With
ElseIf Target.Column = 16 And Target.Value = "Yes" Then
    With Range("Q" & Target.Row).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Operator:=xlBetween, Formula1:="value 3, value 4"
        .IgnoreBlank = True
        .InCellDropdown = True
    End With
End If
End Sub