我本来需要选择所选项目的前5%,但无法将突出显示的项目数进行四舍五入。例如:如果列表中有25个项目,则5%为1.25,而“条件格式”仅选择1个项目。根据我的报告,它应该四舍五入并选择2个项目。
由于找不到解决方法,我决定手动计算可显示要突出显示的项目数(在一个单元格中)。
例如: .rank = 5(但应四舍五入) .percent =真
如果不可能,
我已经尝试过下面的代码,但是它不起作用。
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:使用Office365。
谢谢
更新:只要“ 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
答案 0 :(得分:1)
如果您可以使用Non-VBA解决方案,则可以使用它。我制作了一个假数据集,仅列出了25个值(数字1至25)。您想突出显示5%更高的值。 25的5%= 1,25,但将其四舍五入为2。因此,在这种情况下,您要突出显示任何值是前两个值之一的单元格。
我明白了:
如您所见,值25和24突出显示。我正在使用的条件格式规则(CFR)基于以下公式:
=RANK(A1;$A$1:$A$25;0)<=ROUNDUP(COUNTA($A$1:$A$25)*0,05;0)
它是这样工作的:
RANK(A1;$A$1:$A$25;0)
将按后退的顺序在列表中对值进行排名。ROUNDUP(COUNTA($A$1:$A$25)*0,05;0)
将计算列表中有多少个单元格(25),并获得5%(乘以0.05,将0.05更改为所需的百分比),并将其舍入(在这种情况下,输出为2)。请注意,如果有空白值,此CFR可能无法正常工作。
此外,好处是,将0,05部分更改为所需的任何百分比,CFR都会完美更新。您甚至可以将其绑定到单元格,然后手动更改单元格的值:)
希望这对您有用!
答案 1 :(得分:0)
AppliesTo 属性为您提供了适用条件的范围。 然后,您可以从中获取单元格计数,将其乘以5%,然后使用WorksheetFunction对其进行四舍五入。
.Rank = WorksheetFunction.RoundUp(.AppliesTo.Cells.Count * 0.05, 0)
.Percent = False