查找范围左侧的每个单元格

时间:2014-05-28 19:30:46

标签: excel vba excel-vba

所以我试图让我的宏查找范围列左侧的每个单元格,如果它不是空的并且已过期/延迟(参见公式1天),它将转向红色。

目前,我的代码尚未优化,但我对VBA编码不熟悉。我用上面的逻辑写了它。

    Sub Macro1()
'
' Macro1 Macro
' This macro is to highlight the cell if it has been more than 5 days
'
' Keyboard Shortcut: Ctrl+b
'

' this is the range of cells
Range("L4:L1000").Select

' this targets any cell value within that range that is above the Formula1 variable which can be adjusted
    For Each cell In Range("L4:L1000")
        If Not IsEmpty(Range("L4:L1000").Offset(0, -1).Value) Then

            Selection.FormatConditions.Delete
            Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="6"

' this selects which colour you want to highlight the targetted cells to
            Selection.FormatConditions(1).Interior.ColorIndex = 3

            ActiveWindow.SmallScroll Down:=0

        End If
    Next

Range("N4:N1000").Select

    For Each cell In Range("N4:N1000")
        If Not IsEmpty(Range("N4:N1000").Offset(0, -1).Value) Then

            Selection.FormatConditions.Delete
            Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="5"

            Selection.FormatConditions(1).Interior.ColorIndex = 3

            ActiveWindow.SmallScroll Down:=0

        End If
    Next

Range("Q4:Q1000").Select

    For Each cell In Range("Q4:Q1000")
        If Not IsEmpty(Range("Q4:Q1000").Offset(0, -1).Value) Then

            Selection.FormatConditions.Delete
            Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="4"

            Selection.FormatConditions(1).Interior.ColorIndex = 3

            ActiveWindow.SmallScroll Down:=0

        End If
    Next

Range("S4:S1000").Select

    For Each cell In Range("S4:S1000")
        If Not IsEmpty(Range("S4:S1000").Offset(0, -1).Value) Then

            Selection.FormatConditions.Delete
            Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="2"

            Selection.FormatConditions(1).Interior.ColorIndex = 3

            ActiveWindow.SmallScroll Down:=0

        End If
    Next

End Sub

现在我的问题是,它会使该列中的所有空白单元格变为红色,如果一个单元格较晚,则会使下一个范围单元格(在该行中)变为红色,而我只希望第一个较晚的单元格为变红了。

2 个答案:

答案 0 :(得分:0)

我是否正确假设如果左边的单元格是空白的,那么你想要它是红色的吗?

如果是这样,我会使用它(假设,例如需要着色的列是B列):

dim n as integer
Range("B2").select
n= range(selection,selection.end(xldown)).count

For i=1 to n
If isblank(cells(i,1)) then
     cell(i,2).select
     Selection.FormatConditions.Delete
     Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="2"
     Selection.FormatConditions(1).Interior.ColorIndex = 3
Endif
next i

如果我误解,请告诉我。如果没有更多的声誉点,我无法发表评论。

答案 1 :(得分:0)

条件格式化与大多数VBA单元编程略有不同。

您可以一次性将条件格式应用于大量单元格。

以下是您重写代码的第一部分的示例。使用范围(“L4:L1000”):

Sub testing()
    With Range("L4:L1000")
        .FormatConditions.Delete
        .FormatConditions.Add Type:=xlExpression, _
            Formula1:="=AND(NOT(ISBLANK(K4)), L4>5)"
        .FormatConditions(1).Interior.ColorIndex = 3
    End With End Sub

请注意,条件格式化公式的编写方式就像它仅用于第一个单元格一样。细胞L4。 “拖动”条件公式以在Excel中应用。

您可以通过更改范围和公式等来修改此选项以在工作表中应用其他条件公式。