Excel:在数据验证中仅显示活动成员

时间:2018-04-03 16:31:19

标签: excel excel-formula

我有一个驱动程序列表,用户可以指定哪些是活动的,哪些不是。我想尝试仅在数据验证中显示活动驱动程序列表!

我所做的是以下内容:

enter image description here

然后我在名称管理器中使用以下内容创建了一个项目以尝试获取那些非空白(即仅活动),然后使用数据验证来选择所有结果(应该只显示活动的驱动程序):< / p>

=OFFSET('Driver List'!$C$8:$C$1000,0,0,COUNTA('Driver List'!$C:$C)-COUNTBLANK('Driver List'!$C$8:$C$1000)-1,1)

如果LAST Driver激活设置为“No”,则此方法有效,但在上例中,“Roger Rabbit”未显示。

我确信必须有一种简单的方法来在数据验证中只显示活动的驱动程序吗?

任何帮助都将非常感谢!!

谢谢!

2 个答案:

答案 0 :(得分:0)

我建议使用隐藏的工作列:这将包含使用CFURLCopyResourcePropertyForKey failed because it was passed an URL which has no schemeINDEXSMALL的公式,仅返回 活动的驱动程序。然后,您可以将指定范围的AGGREGATE指向该工作列。

类似的东西:

OFFSET

=INDEX($A$1:$A$100,AGGREGATE(15,6,ROW($A$1:$A$100)/--($B$1:$B$100="Y"),ROW()),1)

{EDIT} 由于这些公式会在您用完项目时产生=INDEX($A$1:$A$100,SMALL(ROW($A$1:$A$100)+1E+99*--($B$1:$B$100<>"Y"),ROW()),1) #NUM!错误,因此您需要计算有效项目#REF!=AGGREGATE(3,6,$C:$C)

答案 1 :(得分:0)

我用另一种方法来实现我的目标。所以我在工作表上放了一个按钮,我的驱动程序只将活动的驱动程序(标记为Y)保存到另一个工作表。然后我将其添加到我的命名管理器(名称范围),然后将我的数据验证(下拉)指向此命名范围。

然后出现了棘手的部分,每次在Y和N之间标记驱动程序时,列表下方留有空格。所以我手动更改了代码中的名称范围范围。下面是我的代码&#34;保存按钮&#34; :

Sub Save_Active_Drivers()
    Dim iWB As Workbook
    Dim wsDL As Worksheet, wsADL As Worksheet
    Dim wsADLStartRow As Integer
    Dim LastRow As Long

    DisableUpdating
    Application.EnableEvents = False

    Set MainWorkbook = ActiveWorkbook
    Set wsDL = MainWorkbook.Sheets("Driver List")
    Set wsADL = MainWorkbook.Sheets("Active Drivers List")

    wsADL.Visible = xlSheetVisible

    'wsADL.Range("A:A").ClearContents
    wsADL.Cells.Delete
    wsADLStartRow = 1

    For Each rw In wsDL.Rows
        If rw.row >= 8 Then
            If wsDL.Cells(rw.row, 23).Value <> "" Then
                If wsDL.Cells(rw.row, 24).Value <> "" Then
                        wsADL.Cells(wsADLStartRow, 1).Value = wsDL.Cells(rw.row, 24).Value
                        wsADLStartRow = wsADLStartRow + 1
                End If
            Else
                Exit For
            End If
        End If


    Next rw



    LastRow = wsADL.UsedRange.Rows.Count

    Application.CutCopyMode = False
    With ActiveWorkbook.Names("DriversNames")
        .Name = "DriversNames"
        .RefersToR1C1 = "='Active Drivers List'!R1C1:R" & LastRow & "C1"
        .Comment = ""
    End With

    wsADL.Select
    wsADL.Columns("A:A").Select
    wsADL.Sort.SortFields.Clear
    wsADL.Sort.SortFields.Add Key:= _
        Range("A1:A500"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With wsADL.Sort
        .SetRange Range("A1:A500")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

    wsADL.Range("A1").End(xlDown).Offset(1).Resize(ActiveSheet.UsedRange.Rows.Count).EntireRow.Delete

    wsADL.Visible = xlSheetVeryHidden

    wsDL.Select

    EnableUpdating
    Application.EnableEvents = True
    MsgBox "Active Drivers Successfully Saved", vbOKOnly, "Active Drivers Saved!"
End Sub

这对我需要的东西来说有点习惯,但是我很努力找到任何好的帮助来做到这一点......所以我希望这能以某种方式帮助某人!