Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 基于一个字母删除行_Excel_Vba - Fatal编程技术网

Excel 基于一个字母删除行

Excel 基于一个字母删除行,excel,vba,Excel,Vba,我的代码需要帮助。 在(C列)中,我有值MG01、MG02a、MG02b、MG02c。和(A列)中的不同值。如果列A中的值为“1”,则代码需要删除行,并且 在C列中,如果它在文本末尾找到字母,如b、C、d、e等 和与“c”代码不承认MG02c的帮助,请 Sub xDeleteRowz() Last = Cells(Rows.Count, "A").End(xlUp).Row For i = Last To 1 Step -1 If (Cells(i, "A").Value) = "1"

我的代码需要帮助。 在(C列)中,我有值MG01、MG02a、MG02b、MG02c。和(A列)中的不同值。如果列A中的值为“1”,则代码需要删除行,并且 在C列中,如果它在文本末尾找到字母,如b、C、d、e等

和与“c”代码不承认MG02c的帮助,请

Sub xDeleteRowz()

Last = Cells(Rows.Count, "A").End(xlUp).Row
For i = Last To 1 Step -1
    If (Cells(i, "A").Value) = "1" And (Cells(i, "C").Value) = "*c*" Then
        Cells(i, "A").EntireRow.Delete
    End If
Next i

End Sub
改变

我还建议您对代码进行更多的更改,并开始显式编码,如下所示:

Option Explicit

Sub xDeleteRowz()

Dim i As Long, Last As Long

Last = Cells(Rows.Count, "A").End(xlUp).Row
With ThisWorkbook.Worksheets(1)
    For i = Last To 1 Step -1
        If .Cells(i, "A").Value = "1" And InStr(1, .Cells(i, "C").Value, "c", vbTextCompare) Then
            .Rows(i).EntireRow.Delete
        End If
    Next i
End With

End Sub
更新: 根据最新评论,更合适的方法可能是:

Option Explicit

Sub xDeleteRowz()

Dim i As Long, Last As Long

Last = Cells(Rows.Count, "A").End(xlUp).Row
With ThisWorkbook.Worksheets(1)
    For i = Last To 1 Step -1
        If .Cells(i, "A").Value = "1" Then
            Select Case LCase(Right(.Cells(i, "C").Value, 1))
                Case "b", "c", "d", "e", "f", "g"
                    .Rows(i).EntireRow.Delete
            End Select
        End If
    Next i
End With

End Sub

这听起来更适合正则表达式:

Sub xDeleteRowz()
    Last = Cells(Rows.Count, "A").End(xlUp).Row
    With CreateObject("VBScript.RegExp")
        .Pattern = "MG\d{2}[a-z]"
        .IgnoreCase = False
        For i = Last To 1 Step -1
            If (Cells(i, "A").Value) = "1" And .Test(Cells(i, "C").Value) Then
                Cells(i, "A").EntireRow.Delete
            End If
        Next i
    End With
End Sub
请注意,表达式要求值以MG##开头。如果值的开头可能不同,请替换此行

.Pattern = "MG\d{2}[a-z]"
…与

.Pattern = ".+[a-z]"
。。。它将匹配任何结尾带有小写字母的内容。您还可以通过更改括号内的范围来限制特定字母。也就是说,如果它只是“a”到“g”,那么它将是:

.Pattern = ".+[a-g]"

(单元格(i,“C”).Value)比如“*C*”
我可以放一些东西,这样它可以检查b,C,d,e,f,g吗?@dzunaa-字母总是小写的,并且在值的末尾吗?
如果(单元格(i,“A”).Value)=“1”而不是数字(右(单元格(i,“C”).Value,1)),那么
是的,总是小写的我可以放一些东西,这样它可以检查b,C,d,e,f,g?刚刚更新了代码以反映您的最新请求。希望这有助于/解决问题。如果在选择之前使用
LCase
,则不需要测试案例。这是我需要的,谢谢:D
.Pattern = "MG\d{2}[a-z]"
.Pattern = ".+[a-z]"
.Pattern = ".+[a-g]"