2017-05-31 90 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