【问题标题】:Change the colour of a cell that has the maximum value更改具有最大值的单元格的颜色
【发布时间】:2015-10-28 16:58:36
【问题描述】:

我正在尝试为某个范围内具有最高值的单元格重新着色,但无论我使用什么方法,似乎总有一种组合不起作用。我不习惯 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”来为单元格着色,但函数和选择似乎也不能一起使用。对于这么小的任务,其他假设的解决方案似乎过于复杂。

【问题讨论】:

  • 为什么不使用条件格式?

标签: vba excel colors max


【解决方案1】:

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 查找该最大值,然后返回该单元格的地址。然后您可以继续使用 @987654324 @,使用.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

【讨论】:

  • 如果最大值出现不止一次,这不仅会返回最大值的第一个实例吗?可能值得为HLF 中的所有单元格使用For 循环而不是Find,以确保您捕获最大值的每个实例。
  • @ason​​gtoruin - 好电话!我会编辑我的帖子。 (尽管您的观点也举例说明了为什么使用条件格式可能是最佳选择 - 它会捕获所有此类最大数量的实例)。
  • 谢谢!该方法有效,尽管我必须在两个“范围”命令中指定工作表才能使其工作。我确实使用了第一个建议。由于数字是 10 个数字之间的比率,因此两个数字相同的可能性非常小。
  • @BerndKeuning - 乐于助人!如果有效,您介意标记为答案吗?另外,为了确保,如果您使用的是Range(cells(),Cells()) 而不是Range("A1:A10"),则在 Range 单元格之前指定工作表,即。 myWS.Range(myWS.Cells(1,1),myWS.cells(10,1))`.
【解决方案2】:

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

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

【讨论】:

  • 增加to equal the value of the maximum in your range的清晰度...when its expecting a valid Excel range object because it's declared as Range
猜你喜欢
  • 1970-01-01
  • 2017-01-19
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
  • 2018-10-17
  • 2020-09-25
  • 1970-01-01
  • 2018-08-20
相关资源
最近更新 更多