可以考慮設置一個(或兩個)條件格式規則。
Option Explicit
Sub GreenOrRed()
With ActiveSheet
With .Range(.Cells(2, "D"), .Cells(.Rows.Count, "D").End(xlUp))
.Interior.ColorIndex = 9
.FormatConditions.Delete
With .FormatConditions.Add(Type:=xlExpression, Formula1:="=and(sum($S2)=0, sum($T2)=0, sum($U2)=0)")
.Interior.ColorIndex = 10
.StopIfTrue = True
End With
End With
End With
End Sub
我已經使用了單獨的SUM函數來確保任何文本返回數值爲零。
備用AutoFilter方法。
Sub GreenOrRedFiltered()
With ActiveSheet
If .AutoFilterMode Then .AutoFilterMode = False
With .Range(.Cells(1, "D"), .Cells(.Rows.Count, "D").End(xlUp)).Resize(, 18)
.Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0).Columns(1).Interior.ColorIndex = 9
.AutoFilter Field:=16, Criteria1:=0, Operator:=xlOr, Criteria2:=vbNullString
.AutoFilter Field:=17, Criteria1:=0, Operator:=xlOr, Criteria2:=vbNullString
.AutoFilter Field:=18, Criteria1:=0, Operator:=xlOr, Criteria2:=vbNullString
With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0)
If CBool(Application.Subtotal(103, .Cells)) Then
.Columns(1).SpecialCells(xlCellTypeVisible).Interior.ColorIndex = 10
End If
End With
End With
If .AutoFilterMode Then .AutoFilterMode = False
End With
End Sub
只是爲了讓你能理解**爲什麼** For'循環是有效的,但沒有做任何事情......你的語句實際上是'For i = 2 To(i = 27293)'。在循環初始化時,「i」爲0,所以「i = 27293」等同於「False」。當強制爲「Integer」時,「False」爲0.因此,您的語句變爲「For i = 2 To 0」。因爲2已經大於0,所以控制立即跳轉到'Next i'後面的語句。 – YowE3K
嘿大家好,謝謝你的回覆。我發現我的問題是我沒有在所有單元格之前放置「工作表(Sheet).Cells」。一旦我做到了,我就可以讓我的東西工作。我也將函數從For循環更改爲While循環。 – fantomknight1