我有一个驱动程序列表,用户可以指定哪些是活动的,哪些不是。我想尝试仅在数据验证中显示活动驱动程序列表!
我所做的是以下内容:
然后我在名称管理器中使用以下内容创建了一个项目以尝试获取那些非空白(即仅活动),然后使用数据验证来选择所有结果(应该只显示活动的驱动程序):< / 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”未显示。
我确信必须有一种简单的方法来在数据验证中只显示活动的驱动程序吗?
任何帮助都将非常感谢!!
谢谢!
答案 0 :(得分:0)
我建议使用隐藏的工作列:这将包含使用CFURLCopyResourcePropertyForKey failed because it was passed an URL which has no scheme
和INDEX
或SMALL
的公式,仅返回 活动的驱动程序。然后,您可以将指定范围的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
这对我需要的东西来说有点习惯,但是我很努力找到任何好的帮助来做到这一点......所以我希望这能以某种方式帮助某人!