【问题标题】:VBA Conditional Format .rank value based on a cell - Top10基于单元格的 VBA 条件格式 .rank 值 - Top10
【发布时间】:2020-01-24 11:53:28
【问题描述】:

我最初需要选择前 5% 的选定项目,但它无法将突出显示的项目的数量四舍五入。例如:如果列表中有 25 项,则 5% 为 1.25,条件格式仅选择 1 项。根据我的报告,它应该四舍五入并选择2个项目。

由于找不到方法,我决定手动计算项目数,以显示要突出显示的项目数(在单元格中)。

  1. 如果有办法使条件格式对所选项目的数量进行四舍五入会更容易。

例如: .rank = 5(但应该四舍五入) .percent = 真

如果不可能,

  1. 我想使用条件格式突出显示列中的前 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。

谢谢

更新:只要“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

【问题讨论】:

  • 欢迎来到 SO。您能否发布您的输入和预期输出的示例?
  • 如果您需要来自包含数字的单元格中的数字,通常的方法是rng.Value2

标签: excel vba formatting conditional-statements conditional-formatting


【解决方案1】:

AppliesTo 属性为您提供条件适用的范围。 然后,您可以从中获取单元格计数,将其乘以 5% 并使用 WorksheetFunction 将其四舍五入。

.Rank = WorksheetFunction.RoundUp(.AppliesTo.Cells.Count * 0.05, 0)
.Percent = False

【讨论】:

    【解决方案2】:

    如果非 VBA 解决方案可以为您工作,您可以使用它。我制作了一个假数据集,只是一个包含 25 个值(数字 1 到 25)的列表。您想突出显示高 5% 的值。 25 的 5% = 1,25,但四舍五入为 2。因此,在这种情况下,您要突出显示值是前 2 个值之一的任何单元格。

    我知道了:

    如您所见,值 25 和 24 被突出显示。我使用的条件格式规则 (CFR) 基于以下公式:

    =RANK(A1;$A$1:$A$25;0)<=ROUNDUP(COUNTA($A$1:$A$25)*0,05;0)
    

    这就是它的工作原理:

    1. RANK(A1;$A$1:$A$25;0) 将按下降顺序对列表中的值进行排名。
    2. ROUNDUP(COUNTA($A$1:$A$25)*0,05;0) 将计算列表中有多少个单元格 (25) 并得到 5%(乘以 0,05,将 0,05 更改为您需要的 %),并将其向上取整(在这种情况下,输出将是 2)。
    3. Last Step 会将 Step 1 的值与 step 2 的值进行比较。如果小于或等于 2(在这种情况下),它将突出显示,如您所见

    请注意,如果存在空白值,此 CFR 可能无法正常工作。

    另外,好处是,将 0,05 部分更改为您需要的任何 %,CFR 将完美更新。您甚至可以将其绑定到单元格,并手动更改单元格的值:)

    希望这对你有用!

    【讨论】:

    • 感谢您的详细解释。我绝对可以在我的报告中看到这个公式。在我的测试中,我意识到我上面写的代码确实有效。我刚刚为变量设置了 0 值,这就是宏不断停止的原因。更正公式并在 vba 代码前添加 If 语句后,一切顺利。
    猜你喜欢
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    • 2023-02-15
    • 2013-04-17
    • 2015-02-27
    • 2013-12-31
    相关资源
    最近更新 更多