根据VBA上的行号突出显示单元格

时间:2018-08-17 08:54:15

标签: excel vba excel-vba

我想根据行号更改单元格样式。我还是VBA的新手。 这是我的代码:

Sub format()
    FinalRow = Cells(Rows.Count, 1).End(xlUp).Row

    For i = 1 To FinalRow 
        If Rows.Count = 2 * i + 1 Then
            Selection.Style = "Good"
        ElseIf Rows.Count = 2 * i Then
            Selection.Style = "Bad" 
        End If

        ActiveCell.Offset(1, 0).Select
   Next i
End Sub

循环将移至下一个单元格,但不会突出显示是否满足条件。请你帮我一下。

2 个答案:

答案 0 :(得分:3)

我建议以下内容:

Option Explicit

Public Sub FormatEvenOddRowNumbers()
    Dim FinalRow As Long
    FinalRow = Cells(Rows.Count, 1).End(xlUp).Row

    Dim i As Long
    For i = 1 To FinalRow
        If i Mod 2 = 0 Then 'even row number
            Cells(i, 1).Style = "Good"
        Else 'odd row number
            Cells(i, 1).Style = "Bad"
        End If
   Next i
End Sub

要测试行号是否为“偶数”,您可以使用If i Mod 2 = 0 Then,也不需要测试“奇数”,因为如果不是奇数,则必须为“奇数”,这样您就可以只需使用Else而无需任何条件。

尝试避免使用.Select,这会使您的代码运行缓慢。参见How to avoid using Select in Excel VBA。而是直接像Cells(row, column)这样访问单元格。

答案 1 :(得分:0)

首先,我认为您误用了Rows.Count
Rows.Count返回工作表的总行数。因此,现在您的条件仅突出显示工作表中间的两行。

如果我正确地假设您想将“好”行放在偶数行中,将“坏”行放在奇数行中。那么您应该将代码更改为以下内容:

Sub format()
    FinalRow = Cells(Rows.Count, 1).End(xlUp).Row

    For i = 1 To FinalRow 
        If i/2 = int(i/2) Then
            Selection.Style = "Good"
        ElseIf (i+1)/2 = int((i+1)/2) Then
            Selection.Style = "Bad" 
        End If

        ActiveCell.Offset(1, 0).Select
   Next i
End Sub