我正在尝试重新调整范围内具有最高值的单元格,但无论我使用何种方法,似乎总有一种组合不起作用。我不习惯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'来为单元格着色,但是函数和选择似乎也没有合在一起。对于这么小的任务,其他所谓的解决方案似乎过于复杂。
答案 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
)。
但是,正如所建议的那样,条件格式化可能是您最安全的选择 - 因为它很容易,并且不需要使用宏。但是试试上面的内容,如果您有任何问题请告诉我!
编辑:正如@asongtoruin所指出的,上面只会突出显示其中一个最大值,因此如果有多个具有相同最大值的单元格,则只会突出显示一个。以下代码将突出显示所有最大值:
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