Excel中怎样一次性删除所有标注为红色的行
我的一个Excel中大概有1400条数据,以前为了区分将其中的某些行标注成了红色,现在想要把红色行全部删除,我从网上搜索再改了改写了两段代码,但是实现起来都有点问题,请各位高手帮我看看,有没有好的实现方法请指教,先谢谢了! 1) Sub Test1() Dim arrRow() As String Dim num As Long Dim i%, j% num = 0 ReDim arrRow(num) With ActiveSheet '存储所有红色的行号 For i = 3 To .[c65536].End(xlUp).Row If Rows(i).Font.ColorIndex = 3 Then arrRow(num) = i num = num + 1 ReDim Preserve arrRow(num) End If Next i strTemp = "" '选中所有数组中对应的行 For j = 0 To UBound(arrRow) - 1 If strTemp <> "" Then strTemp = strTemp + "," + arrRow(j) + ":" + arrRow(j) Else strTemp = strTemp + arrRow(j) + ":" + arrRow(j) End If Next j Range(strTemp).Select '删除选中的行(标注为红色的行) Selection.Delete End With End Sub 这段代码有一个问题,应为Excel中红色的行数比较多,我试验是只要选中的行数大于30行,就会提示出错:方法'range'作用于对象'_Global'时失败(我不知道是不是我的代码哪里写错了,请指教)。 2) Sub Test2() Dim i%, n% With ActiveSheet For i = 3 To .[c65536].End(xlUp).Row If Rows(i).Font.ColorIndex = 3 Then Rows(i).Delete End If Next i End With End Sub 这段代码因为行数是依次+1查看的,标注为红色的行如果是连续的,上面一行被删除后,下面一行就会漏删。 我想应该有更好的方法可以一次实现,只是我刚开始学习vba编程,只能想到这两种方法,让大家笑话了!
Sub Test2() Dim i%, n% With ActiveSheet For i = .[c65536]. To 3 End(xlUp).Row If Rows(i).Font.ColorIndex = 3 Then Rows(i).Delete End If Next i End With End Sub 从后向前删。其实不用65535,你可以用ActiveSheet.UsedRange.Rows.Count得到实际的行数
第2种方法比较直接,稍加修改就可以了。 Sub Test2() Dim i%, n% With ActiveSheet // For i = 3 To .[c65536].End(xlUp).Row i = 2 while i<1500 //按你说的,有1400行 i = i + 1 //累加 If Rows(i).Font.ColorIndex = 3 Then Rows(i).Delete i = i - 1 //行数减回 End If // Next i wend end End With End Sub
答:Sub Test2() Dim i%, n% With ActiveSheet For i = .[c65536]. To 3 End(xlUp).Row If...详情>>