Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 确定两个连续单元格何时为空_Excel_Vba_Loops_While Loop - Fatal编程技术网

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

Excel 确定两个连续单元格何时为空,excel,vba,loops,while-loop,Excel,Vba,Loops,While Loop,下面的While循环旨在向下迭代一列,直到找到两个连续的空白单元格。curCell为空时,它将立即退出,而忽略lastCell中的值。在调试过程中,我验证了lastCell有一个值并且不是空的,但是循环仍然存在。我的报告和陈述有问题吗 While (lastCell <> "") And (curCell <> "") lastCell = curCell ActiveCell.Offset(1, 0).Select curCell = Activ

下面的While循环旨在向下迭代一列,直到找到两个连续的空白单元格。curCell为空时,它将立即退出,而忽略lastCell中的值。在调试过程中,我验证了lastCell有一个值并且不是空的,但是循环仍然存在。我的报告和陈述有问题吗

While (lastCell <> "") And (curCell <> "")
    lastCell = curCell
    ActiveCell.Offset(1, 0).Select
    curCell = ActiveCell
Wend
While(lastCell“”)和(curCell“”)
lastCell=curCell
ActiveCell.Offset(1,0)。选择
curCell=ActiveCell
温德

您应该使用或代替And。

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


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

您应该使用或代替And。

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


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

如果可以的话,这是一种更好的方法来执行您正在尝试的操作,因为它从第二行一直查看到最后一行。当它发现前两个单元格都为空时,它将停止

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所指出的,假设您不更改/使用多个工作表,这将很好地工作。如果需要,请将工作表名称添加到
单元格()
,即
工作表(“Sheet1”)。单元格(…)

如果可以的话,这是一种更好的方法,因为它可以从第二行一直查看到最后一行。当它发现前两个单元格都为空时,它将停止

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所指出的,假设您不更改/使用多个工作表,这将很好地工作。如果这样做,请在
单元格()之前添加工作表名称,即
工作表(“Sheet1”)。单元格(…)
除了其他注释以改进代码外,原始逻辑检查: 而(lastCell“”和(curCell“”) 应该是: 而不是(lastCell=“”和curCell=“”)
因为这样循环会一直运行,直到最后一个和当前两个都为空,这就是您要查找的内容。

除了改进代码的其他注释外,您最初的逻辑检查: 而(lastCell“”和(curCell“”) 应该是: 而不是(lastCell=“”和curCell=“”)
因为这样循环会一直运行,直到last和current都为空,这就是您要查找的内容。

我正在使用类似的内容,看起来像:

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

'Code goes here

RowStaff=RowStaff+1

Wend
Dim RowStaff作为整数
RowStaff=1
而(.Cells(RowStaff+rowsheader,ColStatus)”或(.Cells(RowStaff+rowsheader+1,ColStatus)”)
“代码在这里
RowStaff=RowStaff+1
温德
其中RowHeader和ColStatus都是常量


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

我使用的是类似的名称,如下所示:

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

'Code goes here

RowStaff=RowStaff+1

Wend
Dim RowStaff作为整数
RowStaff=1
而(.Cells(RowStaff+rowsheader,ColStatus)”或(.Cells(RowStaff+rowsheader+1,ColStatus)”)
“代码在这里
RowStaff=RowStaff+1
温德
其中RowHeader和ColStatus都是常量


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

您可以在,FYI之前大幅收紧代码。您可以在,FYI之前大幅收紧代码。上传,以反转(预期)条件,并通过消除否定项使其更易于阅读。请注意,对
单元格
的调用隐含地引用了
ActiveSheet
。@Mat'sMug-谢谢。是的,我知道我没有资格参加比赛。OP发布了一些非常简单的代码,使用了
ActiveCell
,所以我想我的答案应该保持简单。有一种方法,我可以让它有点“紧”,但图OP正在学习,这应该让他们的方式!向上投票,用于反转(预期)条件,并通过消除负面信息使其更易于阅读。请注意,对
单元格
的调用隐含地引用了
ActiveSheet
。@Mat'sMug-谢谢。是的,我知道我没有资格参加比赛。OP发布了一些非常简单的代码,使用了
ActiveCell
,所以我想我的答案应该保持简单。有一种方法,我可以让它有点“紧”,但图OP正在学习,这应该让他们的方式!