【问题标题】:Excel VBA - Conditional highlighting - highlight next highest valueExcel VBA - 条件突出显示 - 突出显示下一个最大值
【发布时间】:2017-06-03 02:51:49
【问题描述】:

我的代码采用 3 对值,突出显示最高(或最低值),然后应该突出显示下一个最高(或最低值),以提供第二轮 2 对匹配。

虽然用于突出显示获胜者或前 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

对我的问题有什么想法吗?

已编辑:添加了一个屏幕截图以显示脚本运行后文件的外观。显示了每场比赛的获胜者,但是,由于下一轮也将是正面交锋,因此我还需要突出显示“第 4”位的人,在这种情况下,人 B

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    我不确定您是否能够仅使用条件格式来严格执行您正在尝试的操作。在这种情况下,我会避开它们,只使用常规的 vba。将此 sub 中的 '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(输家)。你追求的是 第二种类型的排名——你真的不在乎 获胜者,但确实希望失败者按照最低时间排名,所以 您可以找到最佳(最短)时间的失败者。

    【讨论】:

    • 是的,我很抱歉,我应该更清楚一点。有两个值由空白单元格隔开,因此是 3 个单元格的范围。为了我正确理解你的意思,我的目标是突出显示每场比赛的“获胜者”,然后以单独的颜色突出显示“最佳失败者”(即 4 号种子)
    • 如何切换它以使代码也可以在“获胜”值最小的地方工作?如果我将第一个大于更改为小于,我会得到 3 个最低值,但如果我将第二个大于更改为小于,我会在 maxcell.interior.color 行上收到“未设置对象变量”错误.如果我将 maxcell 更改为 mincell (并声明它)它不起作用。我错过了什么?
    • 不完全确定你在追求什么。如果您切换第一个大于号,您将突出显示每轮的所有输家。通过这种更改并以最短的时间获得获胜者,您必须首先将 maxval 设置为 999.9 之类的值,然后将第二个大于号更改为小于号。
    • 在这个例子中,较低的数字实际上是赢家,而不是较高的。所以 1、2 和 3 将战胜 4、5 和 6,而 4 将是“最佳输家”。切换第一个标志给了我较低的获胜者,但这是我无法获得的第四个获胜者
    • 好吧,较低的 # 是赢家 - 有道理。因此,您在图片中显示的是每轮的获胜者具有白色背景(失败者具有深绿色背景)。您想要根据从最低到最高的排序排名以浅绿色背景突出显示的第四名吗?如果你能确认,我可以修改代码让你知道。因此,根据您最初的问题陈述,您希望 0:05:15 以浅绿色突出显示?
    猜你喜欢
    • 2021-10-04
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 2020-09-29
    相关资源
    最近更新 更多