Excel 如果我的条件得到满足,我如何循环回我当前的单元格?
这是我在SO上的第一篇帖子,所以我希望我做的是正确的 我正在尝试从数据中删除符合以下条件的行:Excel 如果我的条件得到满足,我如何循环回我当前的单元格?,excel,vba,for-loop,Excel,Vba,For Loop,这是我在SO上的第一篇帖子,所以我希望我做的是正确的 我正在尝试从数据中删除符合以下条件的行: 第一列的值与它下面的单元格不同 第三列的值等于它下面的单元格 我的代码示例如下所示: For Each Cell In MyRangeA3 If Cell.Value <> Cell.Offset(1).Value Then If Cell.Offset(, 2).Value = Cell.Offset(1, 2).Value Then
For Each Cell In MyRangeA3
If Cell.Value <> Cell.Offset(1).Value Then
If Cell.Offset(, 2).Value = Cell.Offset(1, 2).Value Then
Cell.Offset(1).EntireRow.Delete
End If
End If
Next Cell
MyRangeA3中每个单元格的
如果单元格.Value单元格.Offset(1).Value,则
如果Cell.Offset(,2).Value=Cell.Offset(1,2).Value,则
单元格偏移量(1).EntireRow.Delete
如果结束
如果结束
下一个细胞
我面临的问题是,我的宏将转到下一个单元格,因此我必须重新运行宏才能删除符合条件的下一行。要在一次运行中完成此操作,我应该向代码中添加哪些内容?您可以收集匹配的单元格,然后删除相应的行:
' ... your code
Dim toDel As Range
For Each cell In MyRangeA3
If cell.Value <> cell.Offset(1).Value Then
If cell.Offset(, 2).Value = cell.Offset(1, 2).Value Then
If toDel Is Nothing Then 'collect cells to further delete
Set toDel = cell.Offset(1)
Else
Set toDel = Union(toDel, cell.Offset(1))
End If
End If
End If
Next cell
' delete all rows for appropriate collected cells
' debug the script before actually deleting lines with, e.g.
' toDel.EntireRow.Interior.ColorIndex = 3 instead toDel.EntireRow.Delete
If Not toDel Is Nothing Then toDel.EntireRow.Delete
' your code ...
”。。。你的代码
暗托德尔范围
对于MyRangeA3中的每个单元格
如果单元格.Value单元格.Offset(1).Value,则
如果cell.Offset(,2).Value=cell.Offset(1,2).Value,则
如果toDel为空,则“收集单元格以进一步删除”
设置toDel=单元格偏移量(1)
其他的
设置toDel=Union(toDel,单元格偏移量(1))
如果结束
如果结束
如果结束
下一个细胞
'删除适当收集的单元格的所有行
'在实际删除行之前调试脚本,例如。
'toDel.EntireRow.Interior.ColorIndex=3而不是toDel.EntireRow.Delete
如果Not toDel为Nothing,则toDel.EntireRow.Delete
'您的代码。。。
1。2.对i=Lastrow使用反向循环到步骤-1
,然后匹配并删除行。正如@SiddharthRout所述:从列表中删除项目是一个众所周知的陷阱:当您从列表的开头开始并继续时,您可能无法删除所有需要的项目。因此,您需要从列表的末尾开始,以相反的方向遍历列表。:-)@悉达多,我能知道你说的第一步是什么意思吗?抱歉,我对VBA比较陌生。我尝试了您的代码,但最后遇到了“运行时错误'424':需要对象”line@OliverTheseira出现此错误的原因是,如果跳过第一行Dim toDel As Range
,则没有复制第一行Dim toDel As Range
,然后,toDel隐式声明为Variant,初始值为空,如果未找到适合删除的行,则toDel的值保持为空,这将导致错误。如果将Dim toDel声明为Range
,则toDel的初始值将为Nothing,如果未找到适合删除的行,则将不满足“If Not toDel Is Nothing”条件,并且不会尝试从空范围中删除行。多么奇怪,我确实将它包含在我的变量声明列表中,而不是代码的其余部分,但它不起作用。在我按照你的回答把它移下来之后,它工作得很好。你能解释一下为什么会这样吗?另外,为什么在我上面的变量声明列表中声明“Cell as Range”效果很好。@Olivertheira我看不到您的所有代码,因为它没有显示出来。