[英]VBA Conditional Format .rank value based on a cell - Top10
我最初需要 select 前 5% 的選定項目,但它無法四舍五入突出顯示項目的數量。 例如:如果列表中有 25 項,則 5% 為 1.25,條件格式僅選擇 1 項。 根據我的報告,它應該四舍五入 select 2 項。
由於找不到方法,我決定手動計算項目數,以顯示要突出顯示的項目數(在單元格中)。
例如:.rank = 5(但應該向上取整).percent = True
如果不可能,
我已經嘗試了下面的代碼,但是它不起作用。
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
如果非 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)
這是它的工作原理:
RANK(A1;$A$1:$A$25;0)
將按降序排列列表中的值。ROUNDUP(COUNTA($A$1:$A$25)*0,05;0)
將計算列表中有多少個單元格 (25) 並將獲得 5%(乘以 0,05,將 0,05 更改為% 你需要),它會將它四舍五入(在這種情況下,output 將為 2)。請注意,如果存在空白值,此 CFR 可能無法正常工作。
此外,好消息是,將 0,05 部分更改為您需要的任何 %,CFR 將完美更新。 您甚至可以將其綁定到單元格,並手動更改單元格的值:)
希望這對你有用!
ApplysTo屬性為您提供條件適用的范圍。 然后,您可以從中獲取單元格計數,將其乘以 5% 並使用 WorksheetFunction 將其四舍五入。
.Rank = WorksheetFunction.RoundUp(.AppliesTo.Cells.Count * 0.05, 0)
.Percent = False
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.