根据最高值VBA着色Excel表

我在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行。 由于某种原因,这是行不通的。 有人能告诉我我做错了什么吗?

你的代码中有一些小错误:

  1. 您从未将Dim d as Range声明Dim d as Range
  2. c = WorksheetFunction...实际上应该是d = WorksheetFunction...

我认为如果你解决了这两个错误,它会奏效。

另一个细节 – End Sub之后不应该有括号。

  1. 它究竟做了什么? 最好的办法是在debugging模式下一步一步地运行VBA脚本,看看它在每次迭代中的作用。

  2. 当你迭代每个单元格时(如果你有成千上万个这样的单元格的话),调用WorksheetFunction.Large两次似乎并不是非常有效。 我认为你应该把这些值存储到像max2ndmax这样的variables,然后用它们代替。 顺便说一句,如果有像1000,1000,900或1000,100,1000这样的最大值,你希望你的macros如何处理? 你将有两个以上的单元格着色。

  3. 我没有看到在那里声明的范围typesvariablesd。 不知道这是否会导致问题。

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