更改具有最大值

时间:2015-10-28 16:58:37

标签: excel vba excel-vba colors max

我正在尝试重新调整范围内具有最高值的单元格,但无论我使用何种方法,似乎总有一种组合不起作用。我不习惯VBA。我最后一次尝试的是:

Sub HLF()
  Dim HLF As Range
  Set HLF = WorksheetsFunction.Max(Range("H2:H7"))
  Range("HLF").Interior.Color = RGB(0,255,0)
End Sub

似乎'Set'和'Max'功能不能一起使用。我的基本编程逻辑说正常的“范围”应该可以被找到范围的函数替换,但显然Excel没有。我也尝试过选择单元格并使用'ActiveCell'代替'Range'来为单元格着色,但是函数和选择似乎也没有合在一起。对于这么小的任务,其他所谓的解决方案似乎过于复杂。

2 个答案:

答案 0 :(得分:2)

Max不会返回最大值的位置 - 它只是告诉您最大值是多少。在这种情况下,您的Set HLF = WorksheetsFunction.Max(Range("H2:H7"))正在尝试将范围HLF设置为等于您范围内最大值的值。我认为,这就是为什么它会抛出错误。

正如@Scott Craner建议的那样,你可以通过条件格式很容易地做到这一点 - 选择"使用公式来确定要格式化的单元格"在条件格式设置中,将其设置为应用于范围H2:H7并将规则设置为=H2=MAX($H$2:$H$7)。这样做的好处是它会在您的值完成后立即更新。

答案 1 :(得分:2)

Max会从您的列中返回。这本身不会为您提供一个范围所需的单元格。你可以做的是一个小的解决方法,见下文:

Sub test()
Dim HLF As Range, finalHLF
Dim maxNum As Double
Set HLF = Range("H2:H7")
maxNum = WorksheetFunction.Max(HLF)

finalHLF = HLF.Find(what:=maxNum, lookat:=xlWhole).Address
Range(finalHLF).Interior.Color = RGB(0, 255, 0)
End Sub

这将找到您的最大值,然后使用该最大值,将在确定的范围内搜索(在您的示例中,H2:H7搜索该最大值,然后返回该单元格的地址。然后您可以继续.Color,使用.Address)。

但是,正如所建议的那样,条件格式化可能是您最安全的选择 - 因为它很容易,并且不需要使用宏。但是试试上面的内容,如果您有任何问题请告诉我!

编辑:正如@a​​son​​gtoruin所指出的,上面只会突出显示其中一个最大值,因此如果有多个具有相同最大值的单元格,则只会突出显示一个。以下代码将突出显示所有最大值:

Sub test()
Dim HLF As Range, cel As Range
Dim maxNum As Double

Set HLF = Range("H2:H7")
maxNum = WorksheetFunction.Max(HLF)

For Each cel In HLF
    If cel.Value = maxNum Then
        cel.Interior.Color = RGB(0, 255, 0)
    End If
Next cel

End Sub