VBA 基于单元格的条件格式 .rank 值 - Top10
VBA Conditional Format .rank value based on a cell - Top10
我最初需要 select 前 5% 的 selected 项目,但是它无法将突出显示的项目数汇总。例如:如果列表中有 25 个项目,则 5% 为 1.25,条件格式仅 selecting 1 个项目。根据我的报告,它应该四舍五入和 select 2 项。
由于找不到执行此操作的方法,我决定手动计算项目数,以显示要突出显示的项目数(在一个单元格中)。
- 如果有一种方法可以使条件格式对 selected 项目的数量进行四舍五入,那就更容易了。
例如:
.rank = 5(但应该四舍五入)
.percent = 真
如果不行,
- 我想使用条件格式突出显示列中的前 X 值。
值 X(排名)在单元格中计算,每次宏为 运行.
时都会更改
我试过下面的代码,但它不起作用。
Dim i As Integer
i = Workbooks("a.xlsm").Worksheets("b").Range("A1")
Selection.FormatConditions.AddTop10
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1)
.TopBottom = xlTop10Top
.Rank = i
.Percent = False
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
End With
我在“.rank = i”行收到错误,这让我觉得不可能在那里分配变量,或者我可能错误地分配了单元格。
我也尝试了“.rank = i.Value”,这似乎也是错误的(编译错误:无效限定符)
我是 vba 的新手,如有任何帮助,我们将不胜感激。
ps: 使用 Office 365。
谢谢
Update:只要 "i" 值不为零,上面的代码就可以工作。
我设法创建了一个简单的 If 语句来防止错误。
'In my report i cannot be below 0
If i > 0 Then
Insert the code above here
'If there is no data to be highlighted
Else
'Do Nothing
End If
如果非 VBA 解决方案适合您,您可以使用它。我制作了一个假数据集,只是一个包含 25 个值(数字 1 到 25)的列表。您想要突出显示高出 5% 的值。 25 的 5% = 1,25,但四舍五入为 2。因此,在这种情况下,您想要突出显示值是前 2 个值之一的任何单元格。
我知道了:
如您所见,值 25 和 24 突出显示。我使用的条件格式规则 (CFR) 基于此公式:
=RANK(A1;$A:$A;0)<=ROUNDUP(COUNTA($A:$A)*0,05;0)
这是它的工作原理:
RANK(A1;$A:$A;0)
将按 descendent 顺序排列列表中的值。
ROUNDUP(COUNTA($A:$A)*0,05;0)
将计算列表中有多少个单元格 (25) 并将得到 5%(乘以 0,05,将 0,05 更改为您需要的 %),它会四舍五入它向上(在这种情况下,输出将是 2)。
- 最后一步会将第 1 步的值与第 2 步的值进行比较。如果小于或等于 2(在本例中),它将突出显示,如您所见
请注意,如果有空白值,此 CFR 可能无法正常工作。
此外,好处是将 0,05 部分更改为您需要的任何百分比,CFR 将完美更新。您甚至可以将它绑定到一个单元格,然后手动更改单元格的值:)
希望这对你有用!
AppliesTo 属性 为您提供条件适用的范围。
然后,您可以从中获取单元格计数,将其乘以 5%,然后使用 WorksheetFunction 将其四舍五入。
.Rank = WorksheetFunction.RoundUp(.AppliesTo.Cells.Count * 0.05, 0)
.Percent = False
我最初需要 select 前 5% 的 selected 项目,但是它无法将突出显示的项目数汇总。例如:如果列表中有 25 个项目,则 5% 为 1.25,条件格式仅 selecting 1 个项目。根据我的报告,它应该四舍五入和 select 2 项。
由于找不到执行此操作的方法,我决定手动计算项目数,以显示要突出显示的项目数(在一个单元格中)。
- 如果有一种方法可以使条件格式对 selected 项目的数量进行四舍五入,那就更容易了。
例如: .rank = 5(但应该四舍五入) .percent = 真
如果不行,
- 我想使用条件格式突出显示列中的前 X 值。 值 X(排名)在单元格中计算,每次宏为 运行. 时都会更改
我试过下面的代码,但它不起作用。
Dim i As Integer
i = Workbooks("a.xlsm").Worksheets("b").Range("A1")
Selection.FormatConditions.AddTop10
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1)
.TopBottom = xlTop10Top
.Rank = i
.Percent = False
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
End With
我在“.rank = i”行收到错误,这让我觉得不可能在那里分配变量,或者我可能错误地分配了单元格。
我也尝试了“.rank = i.Value”,这似乎也是错误的(编译错误:无效限定符)
我是 vba 的新手,如有任何帮助,我们将不胜感激。
ps: 使用 Office 365。
谢谢
Update:只要 "i" 值不为零,上面的代码就可以工作。 我设法创建了一个简单的 If 语句来防止错误。
'In my report i cannot be below 0
If i > 0 Then
Insert the code above here
'If there is no data to be highlighted
Else
'Do Nothing
End If
如果非 VBA 解决方案适合您,您可以使用它。我制作了一个假数据集,只是一个包含 25 个值(数字 1 到 25)的列表。您想要突出显示高出 5% 的值。 25 的 5% = 1,25,但四舍五入为 2。因此,在这种情况下,您想要突出显示值是前 2 个值之一的任何单元格。
我知道了:
如您所见,值 25 和 24 突出显示。我使用的条件格式规则 (CFR) 基于此公式:
=RANK(A1;$A:$A;0)<=ROUNDUP(COUNTA($A:$A)*0,05;0)
这是它的工作原理:
RANK(A1;$A:$A;0)
将按 descendent 顺序排列列表中的值。ROUNDUP(COUNTA($A:$A)*0,05;0)
将计算列表中有多少个单元格 (25) 并将得到 5%(乘以 0,05,将 0,05 更改为您需要的 %),它会四舍五入它向上(在这种情况下,输出将是 2)。- 最后一步会将第 1 步的值与第 2 步的值进行比较。如果小于或等于 2(在本例中),它将突出显示,如您所见
请注意,如果有空白值,此 CFR 可能无法正常工作。
此外,好处是将 0,05 部分更改为您需要的任何百分比,CFR 将完美更新。您甚至可以将它绑定到一个单元格,然后手动更改单元格的值:)
希望这对你有用!
AppliesTo 属性 为您提供条件适用的范围。 然后,您可以从中获取单元格计数,将其乘以 5%,然后使用 WorksheetFunction 将其四舍五入。
.Rank = WorksheetFunction.RoundUp(.AppliesTo.Cells.Count * 0.05, 0)
.Percent = False