0

我在 excel 中有一个表格,我想遍历每一行并为每行中的前两个最高值着色。我正在尝试使用 VBA,我不想使用条件格式。这就是我写的:

Sub top_two()
Sheets("sheet1").Select
Dim all_rows As Range
Set all_rows = Range("C6:K8")
Dim c As Range
For Each c In all_rows.Rows
    For Each d In c.Cells
        If d = WorksheetFunction.Large(c, 1) Or c = WorksheetFunction.Large(c, 2) Then
            d.Interior.Color = RGB(255, 0, 0)
        End If
    Next
Next
End sub()

该表是 Range("C6:K8"),它现在有 3 行。由于某种原因,这不起作用。有人可以告诉我我做错了什么吗?

4

2 回答 2

2

您的代码中有几个小错误:

  1. 你从来没有声明过Dim d as Range
  2. c = WorksheetFunction...实际上应该是d = WorksheetFunction...

我认为如果您修复了这两个错误,它将起作用。

另一个细节 - 后面不应该有括号End Sub

于 2013-08-06T23:05:11.043 回答
0
  1. 它究竟是做什么的?最好的办法是一步一步在调试模式下运行 VBA 脚本,看看它在每次迭代中的作用。

  2. WorksheetFunction.Large当您遍历每个单元格时调用两次似乎并不是非常有效(如果您有数千个这样的单元格怎么办?)。我认为您应该将这些值存储到变量中max2ndmax并改为使用它们。顺便说一句,如果有像 1000,1000,900 或 1000,100,1000 这样的最大值怎么办,你希望你的宏如何处理呢?您将有两个以上的单元格着色。

  3. 我没有看到在那里声明的 Range 类型变量 d 。不确定这是否会导致问题。

4.我会完全避免使用“选择”。您可以在任何地方引用范围,而无需选择特定的工作表。

于 2013-08-06T22:47:05.367 回答