繁体   English   中英

通过Instr VBA循环

[英]Looping Through Instr VBA

我必须过滤X列中的所有空白行,并基于MWV列中指定的值,我必须填充X列。

我已经附加了一部分代码,其中我试图遍历所有可见行,但是VBA遍历了所有行,并且也更改了所有非空白值。 请您指导我解决这个问题? 提前致谢!

Set rng5 = Sheet1.Range("A2" & ":N" & last_row2)
With Sheet1.Range("A1") .AutoFilter Field:=24, Criteria1:="=" .Select

    For m = 1 To rng5.SpecialCells(xlCellTypeVisible).Rows.Count
        If InStr(rng5.Cells(RowIndex:=m, ColumnIndex:="M").Value, "ABC") > 0 _
        And InStr(rng5.Cells(RowIndex:=m, ColumnIndex:="M").Value, "EFG") = 0 And _
        And InStr(rng5.Cells(RowIndex:=m, ColumnIndex:="W").Value, "123") = 0 _
        And InStr(rng5.Cells(RowIndex:=m, ColumnIndex:="V").Value, "Non") = 0 Then

            rng5.Cells(RowIndex:=m, ColumnIndex:="X").Value = "XYZ"

        ElseIf InStr(rng5.Cells(RowIndex:=m, ColumnIndex:="M").Value, "MNO") > 0 _
        And InStr(rng5.Cells(RowIndex:=m, ColumnIndex:="M").Value, "567") = 0 _
        And InStr(rng5.Cells(RowIndex:=m, ColumnIndex:="W").Value, "123") = 0 _
        And InStr(rng5.Cells(RowIndex:=m, ColumnIndex:="V").Value, "Non ") = 0 Then

            rng5.Cells(RowIndex:=m, ColumnIndex:="X").Value = "UVW"

        End If
    Next m

如果您有(例如)10个可见行,那么它将从1循环到10

 For m = 1 To rng5.SpecialCells(xlCellTypeVisible).Rows.Count

因此,当您处于(例如)m = 5时,这是:

 rng5.Cells(RowIndex:=m, ColumnIndex:="X")

将指向rng5的第五行。 这与rng5的第5个可见行不一定相同

您的With块似乎未连接到所包含的代码,因此可以将其删除。

尝试这样的事情:

Sub Tester()

    Dim rw As Range, rng5 As Range, mVal

    Set rng5 = Sheet1.Range("A1").CurrentRegion
    Set rng5 = rng5.Offset(1, 0).Resize(rng5.Rows.Count - 1) 'exclude headers

    Sheet1.Range("A1").AutoFilter Field:=24, Criteria1:="="

    For Each rw In rng5.SpecialCells(xlCellTypeVisible).Rows

        If InStr(rw.Cells(1, "W").Value, "123") = 0 And _
           InStr(rw.Cells(1, "V").Value, "Non") = 0 Then

            mVal = rw.Cells(1, "M").Value

            If InStr(mVal, "ABC") > 0 And InStr(mVal, "EFG") = 0 Then

                rw.Cells(1, "X").Value = "XYZ"

            ElseIf InStr(mVal, "MNO") > 0 And InStr(mVal, "567") = 0 Then

                rw.Cells(1, "X").Value = "UVW"

            End If

        End If

    Next rw

End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM