我有一个文件,其中A列(1500)中有一堆单元格,如下所示:
Perfect Imperfection;"Kevin Gates";"Luca Brasi 2: Gangsta Grillz";1
或
Perfect Imperfection;"Kevin Gates";"Luca Brasi 2: Gangsta Grillz";0
我正在尝试删除以;1
结尾的单元格
请注意,某些歌曲标题中包含1
,而另一些歌曲则采用以下形式:
Perfect Imperfection;;;1
我正在使用以下代码,这些代码来自我稍作编辑的另一个Stack Overflow帖子:
Sub DeleteRowsWithX()
maxRow = ActiveSheet.UsedRange.Rows.Count
MsgBox (maxRow)
For i = 1 To maxRow
Do While (StrComp(ActiveSheet.Cells(i, 1).Text, ";1", vbTextCompare) = 0)
Rows(i).Select
Selection.Delete Shift:=xlUp
MsgBox ("Deleted")
Loop
Next
End Sub
如果有帮助,请参见以下文件示例:
Perfect Imperfection;"Kevin Gates";"Luca Brasi 2: Gangsta Grillz";1 Perfect Strangers;"Lil Wayne";"Tha Carter V";1 Perplexing Pegasus;"Rae Sremmurd";;1 Phone Numbers Wiz Khalifa;;;0 Piano Man;"Billy Joel";;1 Picasso Baby Jay Z;;;0 Pick Up the Phone ft Young Thug Travis Scott;;;0 Picture;"Kid Rock";;1 Pillowtalk Conor Maynard;;;1 Pimp Juice;Nelly;Nellyville;1 Pinball Wizard;"The Who";;1 Pink Toes Childish Gambino;;;1
应如下所示:
Phone Numbers Wiz Khalifa;;;0 Picasso Baby Jay Z;;;0 Pick Up the Phone ft Young Thug Travis Scott;;;0
但是,什么也没有删除。有人可以建议吗?注意-不需要在VBA中完成此操作,我只想删除以1结尾的行
答案 0 :(得分:0)
要求:删除第1列中以“; 1”结尾的整行值
对于这种要求,建议使用AutoFilter
和SpecialCells
一次删除所有目标行。
尝试一下:
Sub AutoFilter_To_DeleteRows()
With ActiveSheet
Application.Goto .Cells(1), 1
Rem Add a temporary header to avoid indiscriminate deletion of the first row.
.Cells(1).EntireRow.Insert
.Cells(1).Value2 = "Temporary Header"
Rem Filter values ending with ";1"
.Columns(1).AutoFilter Field:=1, Criteria1:="=*;1"
Rem Delete all resulting rows
.Columns(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
End Sub
答案 1 :(得分:-1)
将答案保持在您编写的代码附近。
您需要从列表的底部到顶部循环。这样,当删除行时,您不会跳过行。这可以在您的 For 循环中完成,方法是从列表的底部开始,然后使用步骤-1 返回到第一行。
右功能可用于测试单元格值的最后两个字符,以查看它们是否与; 1 匹配。
可以删除执行时间。
MsgBox 已得到扩展,可以在测试时提供更多详细信息。一旦您对代码的运行方式感到满意,便可以将它们注释掉。
Sub DeleteRowsWithX()
maxRow = ActiveSheet.UsedRange.Rows.Count
MsgBox "No. of Rows: " & maxRow
For i = maxRow To 1 Step -1
ValOfCell = ActiveSheet.Cells(i, 1).Value2
If Right(ValOfCell, 2) = ";1" Then
Rows(i).Delete Shift:=xlUp
MsgBox "Row: " & i & vbCrLf & "Value: " & ValOfCell & vbCrLf & "has been deleted."
End If
Next
End Sub
答案 2 :(得分:-2)
Jerry,我无法让 StrComp 以我想要的方式工作,所以我使用 Mid 和 Len 来完成所需的工作。这将起作用,因为所有歌曲名称均以“;?”结尾。另外,我没有添加代码,但请考虑做所有不使用 Select 方法的事情-这会导致复杂化。
Sub DeleteRowsWithX()
Dim maxrow As Integer
Dim i As Integer
maxrow = ActiveSheet.UsedRange.Rows.Count
For i = 1 To maxrow
Do While Mid(Cells(i, 1).Text, Len(Cells(i, 1).Text) - 1, 2) = ";1"
Rows(i).Select
Selection.Delete Shift:=xlUp
MsgBox ("Deleted")
Loop
Next
结束子