VBA *对于每个单元循环* IF(第1列中的值)= x和IF(第2列中的等价值)> 7那么

时间:2017-02-03 01:50:02

标签: excel vba excel-vba if-statement

我遇到VBA问题,我似乎找不到在线答案。我几周前才开始自学,如果这是一个相当简单的答案,那么道歉......

我正在尝试根据E列中的值和AN列中的等效值(同一行)编写一个宏,其中整行是未着色的(这是一个单词??)。到目前为止我所拥有的是:

For Each cell In Sheets(5).Range("E9:E" & LastRow)

If (cell.Value = "BA" Or cell.Value = "NH" Or cell.Value = "AD") Then
    If ActiveCell.Offset(0, 35) > 7 Then
          cell.EntireRow.Interior.color = xlNone
End If
Next cell

唯一的问题是,当我尝试运行它时会出现'编译错误:下一步没有'错误消息。

??我错过了什么......有一个'For'......

如果我删除以下行,则代码会运行,

If ActiveCell.Offset(0, 35) > 7 Then

但它不是我要求的输出,因为所有BA,NH&amp; A列中的AD值使其整行无颜色,无论它们是> 7还是<7。

错误是由IF-THEN-IF语句引起的吗?

3 个答案:

答案 0 :(得分:2)

试试这个:

For Each cell In Sheets(5).Range("E9:E" & LastRow)

If (cell.Value = "BA" Or cell.Value = "NH" Or cell.Value = "AD") Then
    If ActiveCell.Offset(0, 35) > 7 Then
          cell.EntireRow.Interior.color = xlNone
    End If // You are missing this
End If
Next cell

答案 1 :(得分:0)

除了不使用If关闭End If之外,还有其他问题。

  • 您使用Cell
  • For Each Cell In Sheets(5).Range("E9:E" & LastRow)上循环播放
  • 然后您正在测试是否Cell.Value = "BA" or ...等等
  • 然而,之后您正在检查If ActiveCell.Offset(0, 35) > 7 Then,我认为ActiveCell也是Cell

最后一件事,您可以使用Or而不是使用多个Select Case

<强>代码

For Each Cell In Sheets(5).Range("E9:E" & LastRow)
    Select Case Cell.Value
        Case "BA", "NJ", "AD"
            If Cell.Offset(0, 35) > 7 Then
                Cell.EntireRow.Interior.Color = xlNone
            End If

    End Select
Next cell

答案 2 :(得分:0)

您可以使用AutoFilter()

    With Sheets(5)
        With .Range("E8", .Cells(.Rows.Count, "E").End(xlUp)).Resize(, 36)
            .AutoFilter Field:=1, Criteria1:=Array("BA", "NJ", "AD"), Operator:=xlFilterValues
            .AutoFilter Field:=36, Criteria1:=">7"
            If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Interior.Color = xlNone
        End With
        .AutoFilterMode = False
    End With