【发布时间】:2018-07-05 19:26:16
【问题描述】:
我正在尝试创建一个动态下拉数据验证列表,该列表将对工作表中的多个标准(#2 或更多)进行排名,我的列表中有 300 个项目,我想根据另一个工作表中的信息对它们进行排名一张桌子。
根据排名(1 到 300),我希望下拉数据验证列表包含根据排名计算的前 10、前 25 和顶部/底部 # 值。我不介意帮助列。如果我排名的数据/表格发生变化,和/或如果我想添加一个标准,我希望前 10 名、前 25 名等进行相应更改。
我在使用高级过滤器时使用宏记录器进行了记录,并且在这种情况下也是前 25 个值。
Sub Makro2()
Selection.AutoFilter
Range("T[#All]").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("A1:J3"), Unique:=False
Range("T[[#Headers],[2017]]").Select
ActiveSheet.ShowAllData
Selection.AutoFilter
ActiveSheet.ListObjects("T").Range.AutoFilter Field:=2, Criteria1:="25", _
Operator:=xlTop10Items
End Sub
在带有或不带有 VBA 的 Excel 2016 中这可能吗?
编辑:我找到了这个线程Data Validation drop down list not auto-updating,而那个线程中的这段代码可能就是我要找的。p>
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
' Ensure all lists are made from tables and that these tables are named
' in the Name Manager.
' When creating your Data Validation List, instead of selecting a range
' in 'Source', click within 'Source' and press 'F3'. Finally select your
' tables name.
Dim strValidationList As String
Dim strVal As String
Dim lngNum As Long
On Error GoTo Nevermind
strValidationList = Mid(Target.Validation.Formula1, 2)
strVal = Target.Value
lngNum = Application.WorksheetFunction.Match(strVal, ThisWorkbook.Names(strValidationList).RefersToRange, 0)
' Converts table contents into a formula
If strVal <> "" And lngNum > 0 Then
Application.EnableEvents = False
Target.Formula = "=INDEX(" & strValidationList & ", " & lngNum & ")"
End If
Nevermind:
Application.EnableEvents = True
End Sub
更新:
我正在使用 LARGE 函数来获取 Table1 的前 15 个值。然后我使用 INDEX 和 MATCH 来查找前 15 个值的名称(第 2 列)。
然后我使用 OFFSET 函数和一个 NAMED RANGE 来获取一个数据验证列表,当我在列表底部添加一些内容时该列表会自动更新。
现在我希望数据验证列表依赖于第一个下拉列表。我怎样才能做到这一点?
【问题讨论】:
-
目前我正在使用 Excel 的高级过滤器来过滤两个条件,按大小排序,然后使用 RANK 进行排名
-
AutoFilter 已经允许按“Top”# 或 % 进行过滤。这是tutorial。
-
感谢您的教程。如何使用动态(非手动更新)数据验证列表中的顶部 # 或 %?
-
@wairmea 我发现使此类事情自动化(并在此过程中学习)的最简单方法是手动使其工作,记录您的操作,并根据需要调整记录的代码。我不确定您要动态更改什么(因为问题不包括详细信息或示例或示例数据)
-
如果您已经熟悉 Excel,请参阅:Recording a Macro to Generate Code 和 Revising Recorded Visual Basic Macros。如果您不熟悉 Excel(或您计划使用 VBA 自动化的任何内容),请在尝试 VBA 之前执行此操作。这个 VBA 教程也不错:Excel VBA For Beginners 和 Microsoft's Documentation。
标签: excel vba validation