在VBA中获取连续单元的价值

时间:2012-06-18 19:09:49

标签: excel vba foreach

我有这样的代码,我从Excel表中获取值并根据条件显示结果。

在我的第二个if声明中,我想检查一下ocell.value < sd11

在检查我需要检查接下来的五个连续值之后,它们是否相等。如果是,则显示结果。

有谁能告诉我如何获得下五个连续学期的单元格值?我认为我在代码中提到但它不起作用。

 Sub DoStuff()
   Dim oCell As Range
   sd11 = Range("s11")

   For Each oCell In Range("e4:e48")
       If oCell.Value < sd13 Then
            Range("R2").Value = "Rule 1s voilation"
            End If

        If oCell.Value < sd11 And oCell.Value = oCell.Value + 1 And oCell.Value = oCell.Value + 2 And oCell.Value = oCell.Value + 3 And oCell.Value = oCell.Value + 4 Then
           Range("T5").Value = "Rule 4s voilation"
          End If

   Next
End Sub

2 个答案:

答案 0 :(得分:3)

在这部分代码中:

If oCell.Value < sd11 And oCell.Value = oCell.Value + 1 And oCell.Value = oCell.Value + 2 And oCell.Value = oCell.Value + 3 And oCell.Value = oCell.Value + 4 Then
      Range("T5").Value = "Rule 4s voilation"
End If

如果oCell.Value为6且sd11值为11,则基本上是在询问

If 6 < 11 And 6 = 7 And 6 = 8 And 6 = 9 And 6 = 10 Then
    Range("T5").Value = "Rule 4s voilation"
End If

因为Range(Cell)的Value属性返回与该单元格关联的值。

由于这种逻辑是无意义的,我认为错误与您了解如何在VBA中使用Excel对象的方式有关,因为您是VBA的新手,我会假设您正在尝试查看如果oCell正下方5行中的任何一行中的值等于oCell。这可以通过使用偏移功能引用单元格本身来完成。

' i used Or because I thought it might be more what you want. Change to AND if you require all 5 cells to be equal to oCell
    If oCell.Value < sd11 Then
        If oCell.Value = oCell.Offset(1).Value Or oCell.Value = oCell.Offset(2).Value Or oCell.Value = oCell.Offset(3).Value or oCell.Value = oCell.Offset(4).Value or oCell.Value = oCell.Offset(5).Value Then
            Range("T5").Value = "Rule 4s voilation"
        End If
    End If

答案 1 :(得分:0)

科学地做到:

if WorksheetFunction.AveDev(oCell.Resize(5)) = 0 then ...