确定两个连续单元格何时为空白

时间:2017-04-28 19:56:44

标签: excel vba loops while-loop

以下While循环用于迭代列,直到找到两个连续的空白单元格。一旦curCell为空,它就会退出,忽略lastCell中的值。在调试时,我已经验证lastCell有一个值并且不为空,但循环仍然退出。我的And声明出了什么问题?

While (lastCell <> "") And (curCell <> "")
    lastCell = curCell
    ActiveCell.Offset(1, 0).Select
    curCell = ActiveCell
Wend

4 个答案:

答案 0 :(得分:4)

您应该使用Or而不是And。

并且要求这两个语句都为真,以便while循环继续。如果其中一个语句为假(如果一个单元格为空),则while循环将退出。

使用或,while语句将继续,直到两个单元格都为空。

答案 1 :(得分:1)

如果可以的话,这是一个更好的方法来做你正在尝试的事情,因为它从第二行一直看到最后一行。当它发现前两个单元格都是空的时,它会停止。

Sub findTwoEmptyCells()
Dim lastRow As Long, i As Long
Dim firstEmptyCell As Range

lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' Assuming your column A has the most data or is the row you want to check.

For i = 1 To lastRow
    If Cells(i, 1).Value = "" And Cells(i, 1).Offset(1, 0).Value = "" Then
        Set firstEmptyCell = Cells(i, 1)
        Exit For
    End If
Next i

'Now, you have a cell, firstEmptyCell, which you can do things with, i.e.
firstEmptyCell.Value = "Empty!"

End Sub

编辑:此外,即使 连续没有两个空单元格,也请在firstEmptyCell.Value之前添加:

If firstEmptyCell Is Nothing Then ' If there are no two empty cells in a row, exit the sub/do whatever you want
    MsgBox ("There are no two empty cells in a row")
    Exit Sub
End If

Edit2:正如@MatsMug所指出的,假设您不更改/使用多个工作表,这将正常工作。如果您这样做,请在Cells()之前添加工作表名称,即Sheets("Sheet1").Cells(...)

答案 2 :(得分:0)

除了改进代码的其他注释外,还有原始的逻辑检查: 而(lastCell&lt;&gt;“”)和(curCell&lt;&gt;“”) 本来应该: 而不是(lastCell =“”和curCell =“”) 因为这样循环运行直到last和current都为空,这就是你要找的东西。

答案 3 :(得分:0)

我使用的是类似的东西:

Dim RowStaff as Integer
RowStaff = 1
While (.Cells(RowStaff + RowHeader, ColStatus) <> "") Or (.Cells(RowStaff + RowHeader + 1, ColStatus) <> "")

'Code goes here

RowStaff=RowStaff+1

Wend

其中RowHeader和ColStatus都是常量

显然(希望如此)我选择的名称特定于我的任务,但根据需要进行调整/省略...