如果列B不为空且行是偶数,则为一行

时间:2017-04-27 16:28:54

标签: excel vba excel-vba

我试图在行是偶数的情况下为行着色,并且该行中的列B不是空白。 如果是第1行,我实际上需要在区域A1到L1中进行着色而不是整行。

当然可以定义一个颜色范围,但是我想要一个解决方案来检查包含内容的最后一列,然后将所有行从B1到最后一列用内容IF列B着色在当前行中不是空的,当前行是偶数。

我当前的代码正确地对行进行着色,但对整行进行着色,因为我已经使用了.Entirerow。有没有一种天才的方式只能在最后一次使用的列之前进行着色?

Sub farve()

Dim rw As Range
Dim rng As Range

Set rng = ActiveSheet.UsedRange

For Each rw In rng.Rows
    If rw.row Mod 2 = 0 And Range("B" & rw.row) <> "" Then
        rw.EntireRow.Interior.Color = RGB(255, 0, 0)
    End If
Next rw

End Sub

4 个答案:

答案 0 :(得分:2)

根据上述评论

Sub farve()

Dim rw As Range
Dim rng As Range
Dim c As Long

Set rng = ActiveSheet.UsedRange
c = Cells(5, Columns.Count).End(xlToLeft).Column

For Each rw In rng.Rows
    If rw.Row Mod 2 = 0 And Range("B" & rw.Row) <> "" Then
         Range(Cells(rw.Row, 2), Cells(rw.Row, c)).Interior.Color = RGB(255, 0, 0)
    End If
Next rw

End Sub

答案 1 :(得分:1)

尝试将其作为条件格式规则。

public class YourClass implements WithLog, WithMetrics {

    public void someLongMethod() {

        this.logger().info("Starting long method execution...");

        long start = System.nanoTime();

        // do some very long action

        long end = System.nanoTime();

        this.logger().info("Finished long method execution");

        this.metrics().reportExecutionTime("Long method: ", end - start);
    }
}

答案 2 :(得分:0)

不是天才,有一个简单的:

lColumn = ws.Cells(rw.row, Columns.Count).End(xlToLeft).Column

答案 3 :(得分:0)

您可以尝试稍微不同的方法,仅将rng定义为B列(直到带有数据的最后一行),然后仅扫描B列。

Option Explicit

Sub farve()

Dim rw As Range
Dim rng As Range

' set the range to column B only, until last cell with data
Set rng = ActiveSheet.Range("B1:B", Cells(Rows.Count, "B").End(xlUp).Row)

For Each rw In rng.Rows
    If rw.Row Mod 2 = 0 And rw.Value <> "" Then
        rw.Resize(1, Cells(rw.Row, Columns.Count).End(xlToLeft).Column - 1).Interior.Color = RGB(255, 0, 0)
    End If
Next rw

End Sub