我试图删除一些第六个单元格不包含正确值的行。这是我的代码:
dim i As Integer
for i = 1 to Row
If Worksheets("Data").Cells(i,6).Text <>"a" Then
Worksheets("Data").Rows(i).Delete
End If
Next i
我发现如果我删除第1行(aaa),那么前第2行(bbb)就变成第1行,也许它不是我要保留的行,但我已经变成了2,所以实际上我错过了这一行(bbb)并直接删除了前一行3(ccc)。
1 aaa => bbb
2 bbb => ccc
3 ccc
我不知道这个问题是否有一个好的算法?谢谢。
答案 0 :(得分:3)
删除时始终从最后一个向后迭代。
dim i As Integer
for i = Row to 1 Step -1
If Worksheets("Data").Cells(i,6).Text <>"a" Then
Worksheets("Data").Rows(i).Delete
End If
Next i
答案 1 :(得分:2)
让我们按相反的顺序进行。尝试根据您的意愿修改以下代码。
Sub Deleterows()
Dim lRow As Long
Dim iCntr As Long
lRow = Sheets("Data").Range("A" & Rows.Count).End(xlUp).Row ' calculates no of rows used in A column
For iCntr = lRow To 6 Step -1 ' loop in reverse order
If Cells(iCntr, 1) = "str" Then 'You can change this text
Sheets("Data").Rows(iCntr).Delete
End If
Next
End Sub
答案 2 :(得分:2)
如果您要删除行,最好从下往上工作
将for i = 1 to Row
更改为for i = Row to 1 Step -1
。
现在当你删除一行时,它不会改变它上面任何行的行号。
答案 3 :(得分:1)
我建议你使用while循环,以便在删除行之后减少迭代次数和循环次数,见下文
$('.language').click(function(){
// Show if hidden and hide if visible
$('.menu-langues', this).toggle();
});