Excel 确定两个连续单元格何时为空
下面的While循环旨在向下迭代一列,直到找到两个连续的空白单元格。curCell为空时,它将立即退出,而忽略lastCell中的值。在调试过程中,我验证了lastCell有一个值并且不是空的,但是循环仍然存在。我的报告和陈述有问题吗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 (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正在学习,这应该让他们的方式!