2017-05-31 88 views
0

我有代碼需要3對值,突出顯示最高值(或最低值),然後突出顯示下一個最高值(或最低值),以提供第二個一對2對匹配。Excel VBA - 有條件的突出顯示 - 突出顯示下一個最高值

雖然突出顯示獲勝者或前3對的代碼可能會更清潔一點(我以高於平均水平,但也許有辦法讓它選擇最高的價值而不是上面的邏輯和低於平均水平......),我無法讓第二部分工作。我按照制定排名前10的邏輯,這將爲我提供第四個價值。我沒有得到任何錯誤,當我調試並嘗試打印一個值時,我什麼也得不到。

'Highlight winners of first round 
    Range("C4:C6").Select 
    Selection.FormatConditions.AddAboveAverage 
    Selection.FormatConditions(1).AboveBelow = xlAboveAverage 
    Selection.FormatConditions(1).Interior.Color = 5296274 
    Range("C9:C11").Select 
    Selection.FormatConditions.AddAboveAverage 
    Selection.FormatConditions(1).AboveBelow = xlAboveAverage 
    Selection.FormatConditions(1).Interior.Color = 5296274 
    Range("C14:C16").Select 
    Selection.FormatConditions.AddAboveAverage 
    Selection.FormatConditions(1).AboveBelow = xlAboveAverage 
    Selection.FormatConditions(1).Interior.Color = 5296274 

'Highlight highest losing analyst 
    Range("C4:C16").Select 
    If Selection.FormatConditions(1).Interior.Color <> 5296274 Then 
     Selection.FormatConditions.AddTop10 
     With Selection.FormatConditions 
      .TopBottom = xlTop10Top 
      .Rank = 10 
     End With 
     With Selection.FormatConditions.Interior 
      .Color = 10092492 
     End With 
    End If 

enter image description here

我的問題的任何想法?

編輯:添加了屏幕截圖,以顯示腳本運行後文件的外觀。每場比賽的勝者都顯示出來了,但是,由於下一輪也會正面對決,所以我需要「第四」位的人也會被突出顯示,在這種情況下,人B B

回答

1

我不確定你只能通過條件格式來嚴格執行你正在嘗試的操作。在這種情況下,我會避開它們,只是使用常規的vba。在這個子集中將'rng'設置爲每組次的第一個單元格。根據我們的討論,最低的價值是每對的贏家。然後檢查每個輸家的價值,看它是否低於迄今爲止所看到的最低價值;如果是,那麼用這個值更新'minval'變量,並且指向該單元的'mincell'也被更新。

Sub OrgHighestAndNext1() 

    Dim rng As Range: Set rng = [C4,C9,C14] 

    Range("C" & rng.Row & ":C" & rng.Areas(3).Rows.Row + 2).Interior.ColorIndex = xlColorIndexNone 

    Dim cell As Range, scell As Range, mincell As Range 
    Dim minval As Double: minval = 9999.9 

    For Each cell In rng 
     If cell.Value2 < cell.Offset(2, 0).Value2 Then 
     cell.Interior.Color = 5296274 
     Set scell = cell.Offset(2, 0).Cells 
     Else 
     cell.Offset(2, 0).Interior.Color = 5296274 
     Set scell = cell.Cells 
     End If 

     If scell.Value2 < minval Then 
     Set mincell = scell 
     minval = scell.Value2 
     End If 
    Next 

    mincell.Interior.Color = 10092492 
End Sub 

獲獎者(最低)價值背景爲深綠色。失敗者背景保持不變(如果工作表是以這種方式開始的,則爲白色)。輸家的最低點(經過處理後的'mincell'點數)被賦予淺綠色。

根據排名從最低到 排名最高的種子排名是這樣的:2,3,5,6,4,1所以種子6是 第四排名僅僅是純粹的時間。但是,如果您根據 獲勝者時間排名第一,然後輸家時間排名如下: 2,3,6(這些是贏家)和5,4,1(輸家)。你所追求的是 這是第二種類型的排名 - 其中你真的不在意 獲勝者,但確實希望失敗者按最低時間排名,所以你可以找到最佳(最低)時間的失敗者。

+0

是的,我很抱歉,我應該清理更多。有兩個值由空白單元格分隔,因此有3個單元格的範圍。爲了正確理解你的說明,我的目標是突出每場比賽的「勝者」,然後用另一種顏色突出顯示「最佳輸家」(IE第4號種子) – sbagnato

+0

如何切換它以便代碼也可以在「獲勝」值最小的地方工作?如果我將第一個大於小於,我會得到3個最低值,但如果我將第二個大於小於,我會在maxcell.interior.color線上得到一個「Object variable not set」錯誤。如果我將maxcell更改爲mincell(並聲明它),它不起作用。我錯過了什麼? – sbagnato

+0

不完全確定你在做什麼。如果你切換第一個大於號,你會突出顯示每一輪的所有輸家。通過這種改變並以最短的時間獲得勝利者,您必須首先將maxval設置爲類似於999.9的值,然後將第二個值更改爲小於號。 – Amorpheuses