Excel 基于一个字母删除行
我的代码需要帮助。 在(C列)中,我有值MG01、MG02a、MG02b、MG02c。和(A列)中的不同值。如果列A中的值为“1”,则代码需要删除行,并且 在C列中,如果它在文本末尾找到字母,如b、C、d、e等 和与“c”代码不承认MG02c的帮助,请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"
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]"