Vba 宏需要启动多次

Vba 宏需要启动多次,vba,excel,Vba,Excel,我正在尝试编写一个宏,从第二行到最后一行过滤F列,以检查该列中的值是否为数字,长度是否为5。如果同一行G列中的值包含“TEST”,则允许使用不同的长度。如果该值不符合标准,则应删除该行。宏似乎可以工作,但我需要多次启动它以过滤所有值。 以下是宏: Sub Makro1() Dim lrow As Long lrow = Cells(Cells.Rows.Count, "F").End(xlUp).Row Dim Rng As Range Set Rng = Range("F2:F" &

我正在尝试编写一个宏,从第二行到最后一行过滤F列,以检查该列中的值是否为数字,长度是否为5。如果同一行G列中的值包含“TEST”,则允许使用不同的长度。如果该值不符合标准,则应删除该行。宏似乎可以工作,但我需要多次启动它以过滤所有值。 以下是宏:

Sub Makro1()
Dim lrow As Long
lrow = Cells(Cells.Rows.Count, "F").End(xlUp).Row
Dim Rng As Range
Set Rng = Range("F2:F" & lrow)
    For Each cell In Rng
        If Not IsNumeric(cell) Or (Len(cell) <> 5 And 
            InStr(UCase(cell.Offset(0, 1).Value), "TEST") = 0) Then
            cell.EntireRow.Delete
        End If
    Next
End Sub
Sub-Makro1()
暗淡的光线和长的一样
lrow=单元格(Cells.Rows.Count,“F”)。结束(xlUp)。行
变暗Rng As范围
设置Rng=范围(“F2:F”和lrow)
对于Rng中的每个单元
如果不是数字(单元)或(透镜(单元)5和
InStr(UCase(cell.Offset(0,1.Value),“TEST”)=0)然后
cell.EntireRow.Delete
如果结束
下一个
端接头

试试这段代码,它使用反向循环,,这是迭代集合时建议的,我们从中删除:

Sub Makro1()
    Dim lrow As Long, i As Long, cellValue As String
    lrow = Cells(Rows.Count, "F").End(xlUp).Row

    For i = lrow To 2 Step -1
        cellValue = Cells(i, "F").Value
        If Not (IsNumeric(cellValue) And Len(cellValue) = 5) And Cells(i, "G").Value = "TEST" Then
            Rows(i).Delete
        End If
    Next
End Sub

行的删除必须向后进行。在删除行时,使用
For
循环向后运行:
For i=lrow To 2 Step-1
单元格(i,“F”)
检查值,最后检查
行(i).Delete
if子句有点不正确,我将其更改为
if不是数字(cellValue)或(Len(cellValue)5和InStr(UCase(Cells(i,“G”).Value),“TEST”)=0,然后