- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个动态下拉数据验证列表,该列表将对工作表中的多个标准(#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
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
最佳答案
您正在正确地接近它,在加载列表之前对列表数据进行排序或过滤。我对您的问题感到困惑,但您似乎想知道在操作列表后如何创建数据验证下拉菜单?
这是一个示例,说明如何通过编写简单的测试代码来构建州列表,然后根据所选州构建县列表。也许这可以帮助您建立您的验证列表。
有两个工作表:
1) 一个用于数据列表项 ThisWorkbook.Worksheets("DataList")
2) 一个下拉菜单 ThisWorkbook.Worksheets("DD Report Testing")
在模块 Create_State_List
Option Explicit
'This is a two part validation, select a state and then select a county
Sub CreateStateList()
Dim FirstDataRow As Double, LastDataRow As Double
Dim StateCol As Double, CountyCol As Double
Dim DataListSht As Worksheet
Dim DDReportSht As Worksheet
Dim StateListLoc As String
Dim StateRange As Range
Set DataListSht = ThisWorkbook.Worksheets("DataList")
Set DDReportSht = ThisWorkbook.Worksheets("DD Report Testing")
FirstDataRow = 3 'First row with a State
StateCol = 2 'States are in Col 2 ("B")
LastDataRow = DataListSht.Cells(DataListSht.Rows.Count, StateCol).End(xlUp).Row
Set StateRange = DataListSht.Range(DataListSht.Cells(FirstDataRow, StateCol), DataListSht.Cells(LastDataRow, StateCol))
StateListLoc = "D3" 'This is where the drop down is located / will be updated
DDReportSht.Range(StateListLoc).ClearContents 'Clear the list as we build dynamically
DDReportSht.Range(StateListLoc).Validation.Delete 'Clear the Validation
'Create the State List
With Range(StateListLoc).Validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=DataList!" & StateRange.Address
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
Option Explicit
Private Sub CreateCountyList(StateChosen As String)
Dim DataListSht As Worksheet
Dim DDReportSht As Worksheet
Dim StateRow As Double
Dim NumStateCols As Double
Dim StartStateCol As Double
Dim i As Integer
Dim LastDataRow As Double
Dim CountyRange As Range
Dim CountyListLoc As String
Set DataListSht = ThisWorkbook.Worksheets("DataList")
Set DDReportSht = ThisWorkbook.Worksheets("DD Report Testing")
NumStateCols = 51 'We count the District of Columbia
StateRow = DataListSht.Range("C2").Row
StartStateCol = DataListSht.Range("C2").Column
For i = 0 To NumStateCols 'Account for starting at zero rather than 1
If CStr(Trim(DataListSht.Cells(StateRow, StartStateCol + i))) = StateChosen Then
'find the last Data row in the column where the match is
LastDataRow = DataListSht.Cells(DataListSht.Rows.Count, StartStateCol + i).End(xlUp).Row
'Make the Dynamic list of Counties based on the state chosen
Set CountyRange = DataListSht.Range(DataListSht.Cells(StateRow + 1, StartStateCol + i), DataListSht.Cells(LastDataRow, StartStateCol + i))
CountyListLoc = "D4"
DDReportSht.Range(CountyListLoc).ClearContents
DDReportSht.Range(CountyListLoc).Validation.Delete
'Create the County List
With Range(CountyListLoc).Validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=DataList!" & CountyRange.Address
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
'Break loop
i = 1000 ' should break loop off right here
Else 'do not build a list
End If
Next i
End Sub
Option Explicit
'This routine will react to changes to a cell in the worksheet
Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim DDReportSht As Worksheet
Dim StateString As String
Set DDReportSht = ThisWorkbook.Worksheets("DD Report Testing")
Call CheckStatusBar 'Lets update the Status bar on selection changes
'If the cell change is D3 on DD report (they want state so build list for state)
If Not Intersect(Target, DDReportSht.Range("D3")) Is Nothing Then
'Clear the county list until the state is chosen to avoid mismatch
DDReportSht.Range("D4").ClearContents
DDReportSht.Range("D4").Validation.Delete
'*** Create the State Drop Down
Call CreateStateList
Else 'Do nothing
End If
'If the cell change is D4 on DD report (they want the county list so build it based on the state in D3)
If Not Intersect(Target, DDReportSht.Range("D4")) Is Nothing Then
'If there was a change to the state list go get the county list set up
StateString = DDReportSht.Range("D3")
Application.Run "Create_County_List.CreateCountyList", StateString
Else 'Do nothing
End If
'If cell is D7 build a rig list
If Not Intersect(Target, DDReportSht.Range("D7")) Is Nothing Then
'Build the Rig List
Call CreateRigList
Else 'Do nothing
End If
End Sub
关于具有多个标准排名的 Excel VBA 动态数据验证下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51198558/
我正在查看下面的示例代码, r element frequency and column name 并且想知道除了r中的排名和频率之外,是否有任何方法可以显示每列中每个元素的索引。因此,例如,所需的输
我有下表按 Id、Year DESC 排序 ID 年份有效 1 2011 1 1 2010 1 1 2009 0 1 2002 1 4 2013 1 4 2012 1 4 2011 1 等等。 我想要
鉴于此数据 Type Time Outcome Wanted Result 1 8:00 1 1 1 9:00 1 1 1 10:00 1 1 0
我正在寻找一种对两个句子进行排名/匹配的方法。 例如,取以下2个例句。 这是一个简短的句子。 这是一个包含很多单词的长句子。 我的新句子是这是一个句子。 我想将我的新句子与现有句子进行比较。我的新句子
我是 scikit 新手,我正在按照此处的示例 http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_dat
我有一张 table : r_user | r_points | -------------------- user1 | 12 | user2 | 124 | use
我需要获得顶级玩家、给定玩家的排名以及与该给定玩家排名相关的少数玩家。 为了更清楚地解释,下表是我想要的,它显示了得分最高的 3 名玩家、给定玩家的排名 (id=11) 以及得分略高于和低于该给定玩家
我正在尝试创建一个排名(排名)查询。 我使用表users、schedule 和picks来计算排名。然而,这样做的缺陷是,如果用户未提交任何选择,则该用户将不会出现在排名中。 下面的查询返回所有已提交
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: High score system from my iphone game 我的查询是: $sql = "SELEC
我有一个玩家表和MatchUps表。 MatchUps 表具有一个 winner_id 列和一个 loser_id 列。我可以根据一次查询的胜率获得排名/排名吗?如果我能为每个玩家返回这样的东西,那就
我正在尝试创建一个排名/阶梯系统,其中排名最高的氏族 (1) 应位于顶部,排名为 2 的氏族应位于顶部,依此类推。但我无法让它工作......我尝试了不同的方法: PHP: $sql = mysql_
我需要一份游戏中排名最高的玩家列表。排名是即时计算的,数据取自两个表。我设法以正确的方式对它们进行排序,但是@rank:=0 -> @rank:=@rank+1 技巧,其中一个名为 rank 的附加字
下周末我们将进行一场包含 3 项资格赛(半决赛和决赛)的比赛。只有最好的 15 名参赛者才能参加半决赛。只有最好的 6 人才能参加总决赛。 在资格考试中,每项资格考试的分数从 0 到 100 不等 我
我正在尝试找出对我的产品进行加权的最佳方式,以及它们应该以何种顺序出现在主页等地方。 我想处理四个指标并将其转化为排名: 购买产品 产品有多久了(以天为单位) 产品被保存了多少次 产品被浏览了多少次
使用 @N=@N + 1 的经典技巧来获取某些有序列上的项目排名。现在在订购之前,我需要通过将它与其他表内部连接来从基表中过滤掉一些值。所以查询看起来像这样 -: SET @N=0; SELECT
我需要一些帮助来处理在 MySQL 中排名时的关系。例如: 播放器 |积分 玛丽:90 鲍勃:90 吉姆:65 凯文:12 Bob 和 Mary 应该都排名第一。吉姆应该是#3。凯文应该是#4。 My
我正在寻找一种算法,该算法可以为我提供具有特定强度的下一个排列。长度为 n 的排列由元素 (1,2,3,...n) 定义 排列的强度是多少? 长度为 10 的排列的强度定义为 |a1-a2|+|a2-
我正在编写一个具有信誉组件的电子商务引擎。我希望用户能够对项目进行评论和评分,并能够对评论进行评分。 用于根据“最佳”评论对项目进行排序的最佳算法是什么?它必须根据给出最佳评论的人获得的质量评论数量进
我有一个按游戏结果填满游戏的数据库表,想知道我是否可以计算以下内容: GP(玩过的游戏) 获胜 失败 积分(每胜2分,每负1分) 这是我的表结构: CREATE TABLE `results` (
我有一个 users 表,其中有一列名为 money_sent。我想按 money_sent 降序排列此表,然后找出特定用户的“排名”。 例如,只有 111 人比用户 12392 花费更多的钱,因此他
我是一名优秀的程序员,十分优秀!