![VBA:如何根据特定列中的值为行着色 - 为错误的工作表着色](https://linux22.com/image/1415422/VBA%EF%BC%9A%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%E7%89%B9%E5%AE%9A%E5%88%97%E4%B8%AD%E7%9A%84%E5%80%BC%E4%B8%BA%E8%A1%8C%E7%9D%80%E8%89%B2%20-%20%E4%B8%BA%E9%94%99%E8%AF%AF%E7%9A%84%E5%B7%A5%E4%BD%9C%E8%A1%A8%E7%9D%80%E8%89%B2.png)
我已经为此苦苦挣扎了一段时间。我需要根据 F 列中的值为 Excel 工作表 6 中的行着色。除了代码为 Excel 工作表 1 中的行着色外,其他一切都正常!帮帮忙?
这是我的代码:
Sub color()
i = 2
Sheets(6).Select
For Each c In Sheets(6).Range("F2:F" & Range("F" & Rows.Count).End(xlUp).Row)
If Cells(i, 6).Value > 50 Then
Rng = "A" & i & ":" & "H" & i
Range(Rng).Interior.color = 4 'green
ElseIf Cells(i, 6).Value < 35 Then
Rng = "A" & i & ":" & "H" & i
Range(Rng).Interior.ColorIndex = 3 'red
Else
Rng = "A" & i & ":" & "H" & i
Range(Rng).Interior.ColorIndex = 2
End If
i = i + 1
Next c
End Sub
答案1
此宏将根据“F”列的值为每行着色。
如果该行为空或者值不是数字,则会被跳过。
Sub color()
Dim color As Integer
For Each cell In Sheets(6).Range("F2:F65536")
If IsEmpty(cell) Then GoTo nextcell:
If Not IsNumeric(cell.Value) Then GoTo nextcell:
If cell.Value > 50 Then
color = 4
ElseIf cell.Value < 35 Then color = 3
Else: color = 2
End If
cell.EntireRow.Interior.ColorIndex = color
nextcell:
Next cell
End Sub
在上面的代码中,您同时使用了两种类型的循环。For Each
您使用的循环遍历您提供的数组的每个元素。在本例中,数组是单元格范围。
循环的每次迭代For Each
都使用您在声明中提供的变量名作为对数组元素的引用。因此在上面的例子中,每次迭代都会将 F 列中的一个单元格分配给我给出的变量名cell
。
总而言之,当您使用循环时For Each
,您不需要使用递增索引变量(如i
)来调用单元格,因为您已经拥有了用变量指向的所有单元格对象cell
。