Excel:如果A列和B列中选择的日期不匹配,则触发C列中的特定下拉列表

Excel:如果A列和B列中选择的日期不匹配,则触发C列中的特定下拉列表,excel,drop-down-menu,Excel,Drop Down Menu,我有一个电子表格如下: 在p列和Q列中,用户可以从下拉列表中选择日期。如果所选日期匹配,我希望列R中的相应单元格显示“不适用”。如果所选单元格不匹配,我希望在列R中的相应单元格中显示下拉列表 列名使用瑞典语。专用子工作表\u ChangeByVal目标范围 Dim LastRow As Integer 'The last row of used range Dim i As Integer 'Used to loop On Error Resume Next LastRow = Cel

我有一个电子表格如下:

在p列和Q列中,用户可以从下拉列表中选择日期。如果所选日期匹配,我希望列R中的相应单元格显示“不适用”。如果所选单元格不匹配,我希望在列R中的相应单元格中显示下拉列表


列名使用瑞典语。

专用子工作表\u ChangeByVal目标范围

Dim LastRow As Integer 'The last row of used range
Dim i As Integer 'Used to loop

On Error Resume Next
    LastRow = Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 'Finds the last row
On Error GoTo 0

    If Not Intersect(Target, Range("Q:Q")) Is Nothing Then

        For i = 2 To LastRow
            If (Year(Cells(i, 16)) = Year(Cells(i, 17)) And Month(Cells(i, 16)) = Month(Cells(i, 17)) And Day(Cells(i, 16)) = Day(Cells(i, 17))) Then
                Cells(i, 18) = "N/A"
            Else
                Cells(i, 18).Clear
                With Cells(i, 18).Validation
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:="=Sheet2!$A$1:$A$3" 'Change refrence here
                    .IgnoreBlank = True
                    .InCellDropdown = True
                    .ShowInput = True
                    .ShowError = True
                End With
            End If
        Next i
    End If
端接头


嘿,Udden,虽然不是有史以来最伟大的代码,但这应该会有所帮助。您需要更改对下拉源的引用。你也可以使用命名范围,只需四处搜索,这并不难。如果您还有任何问题,请告诉我。编辑:我只是假设您了解一些VBA,如果您不了解,请按ALT+F11,然后双击列表A并粘贴到我的代码中。请参阅代码中我的注释,以“找出要更改的引用”

专用子工作表\u更改ByVal目标作为范围

Dim LastRow As Integer 'The last row of used range
Dim i As Integer 'Used to loop

On Error Resume Next
    LastRow = Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 'Finds the last row
On Error GoTo 0

    If Not Intersect(Target, Range("Q:Q")) Is Nothing Then

        For i = 2 To LastRow
            If (Year(Cells(i, 16)) = Year(Cells(i, 17)) And Month(Cells(i, 16)) = Month(Cells(i, 17)) And Day(Cells(i, 16)) = Day(Cells(i, 17))) Then
                Cells(i, 18) = "N/A"
            Else
                Cells(i, 18).Clear
                With Cells(i, 18).Validation
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:="=Sheet2!$A$1:$A$3" 'Change refrence here
                    .IgnoreBlank = True
                    .InCellDropdown = True
                    .ShowInput = True
                    .ShowError = True
                End With
            End If
        Next i
    End If
端接头


嘿,Udden,虽然不是有史以来最伟大的代码,但这应该会有所帮助。您需要更改对下拉源的引用。你也可以使用命名范围,只需四处搜索,这并不难。如果您还有任何问题,请告诉我。编辑:我只是假设您了解一些VBA,如果您不了解,请按ALT+F11,然后双击列表A并粘贴到我的代码中。请参阅代码中我的注释,以“找出要更改的引用”

这可能与数据验证中的公式相矛盾

在列R中,选择要进行数据验证的所有范围,然后出现此窗口

然后在“允许”部分选择“列表”,您将看到

在源代码部分,您将写下以下内容:

=IF($B2<>$C2,$J$11:$J$22,$X$11)
其中:

$B2和$C2是我要比较的日期列,因为您将是p和Q

第一名单 $J$11:$J$22是如果日期不匹配,我想显示的列表范围

第二份名单 $X$11,只是一个带有N/a的单元格,用于显示B2和C2中的日期是否已经匹配

因为我在IF公式中的逻辑测试是,如果B2和C2不相等,显示第一个列表,如果不是,如果B2和C2相等,则显示第二个列表

然后你可以有这个:


这可能与数据验证中的公式相矛盾

在列R中,选择要进行数据验证的所有范围,然后出现此窗口

然后在“允许”部分选择“列表”,您将看到

在源代码部分,您将写下以下内容:

=IF($B2<>$C2,$J$11:$J$22,$X$11)
其中:

$B2和$C2是我要比较的日期列,因为您将是p和Q

第一名单 $J$11:$J$22是如果日期不匹配,我想显示的列表范围

第二份名单 $X$11,只是一个带有N/a的单元格,用于显示B2和C2中的日期是否已经匹配

因为我在IF公式中的逻辑测试是,如果B2和C2不相等,显示第一个列表,如果不是,如果B2和C2相等,则显示第二个列表

然后你可以有这个: