在excel中用宏删除特定行,为何会隔一行删一行?

来源:百度知道 编辑:UC知道 时间:2024/05/26 12:02:48
要求:使用宏对A列单元格内容是”工资”的行进行删除.

但是以下两种方法都有相同的问题:如果在相邻行都是”工资”时就只删除第一行不删除第二行.
不一定要修改下面的代码,只要给一个能符合我要求的就行了,但最好解释一下,谢谢!

代码一:
Dim jR As Integer
jR = ActiveSheet.UsedRange.Rows.Count
For j = 1 To jR
If Cells(j, 1) = "工资" Then
Rows(j).Delete
End If
Next j
代码二:
For Each j In ThisWorkbook.Worksheets("报表").Range("A:A")
If j.Value = "工资" Then
Rows(j.Row).Delete
End If
Next j

1、程序是不会错的,要错也是人错了
2、宏也是程序,肯定是编程的人考虑问题时搞错了。
3、用宏来删除行时最好是从下往上删除,因为从上往下删除时,删除掉一行后下面的行会向上移动。估计编程的人忽略了这个问题。

Dim jR As Integer
jR = ActiveSheet.UsedRange.Rows.Count
For j = 1 To jR
Do While Cells(j, 1) = "工资"
Rows(j).Delete
j = j
Loop
Next j

用这个试试

删除第一行,那么第二行变为第一行,而For..next不会再判断第一行了,它会执行下一行,

用DO..LOOP是在同一行上循环,直到这一行不是“工资”为止

问题原因:比如你的第5,6行是符合条件要删除的,在判断第5行时,把第5行删掉了,下一个循环判断第6行,而由于你删了一行,原来的第6行变成了第5行,所以第6行未作判断,在你的IF语句中,在删掉语句后面加一个J=J-1,让它再判断一次第5行就行了

你要重置一下行数,变量要-1