根据VBA中一列中的文本删除工作表中的行

问题描述 投票:0回答:1

我目前有一个宏设置来删除我不再需要的行作为开始:

Sub JSAidRun()
'
' JSAidRun Macro
'

'
Range("1:1,2:2").Select
Range("A2").Activate
Selection.Delete Shift:=xlUp
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 12
ActiveWindow.ScrollColumn = 15
ActiveWindow.ScrollColumn = 16
ActiveWindow.ScrollColumn = 17
ActiveWindow.ScrollColumn = 18
ActiveWindow.ScrollColumn = 19
ActiveWindow.ScrollColumn = 20
ActiveWindow.ScrollColumn = 21
ActiveWindow.ScrollColumn = 22
ActiveWindow.ScrollColumn = 23
ActiveWindow.ScrollColumn = 24
ActiveWindow.ScrollColumn = 25
ActiveWindow.ScrollColumn = 26
ActiveWindow.ScrollColumn = 27
ActiveWindow.ScrollColumn = 28
ActiveWindow.ScrollColumn = 29
ActiveWindow.ScrollColumn = 30
ActiveWindow.ScrollColumn = 31
ActiveWindow.ScrollColumn = 32
ActiveWindow.ScrollColumn = 33
ActiveWindow.ScrollColumn = 34
ActiveWindow.ScrollColumn = 35
ActiveWindow.ScrollColumn = 36
ActiveWindow.ScrollColumn = 37
ActiveWindow.ScrollColumn = 38
ActiveWindow.ScrollColumn = 39
Range("AP:AP,AO:AO,AM:AM").Select
Range("AM1").Activate
ActiveWindow.SmallScroll ToRight:=-3
Range("AP:AP,AO:AO,AM:AM,AL:AL,AJ:AJ").Select
Range("AJ1").Activate
ActiveWindow.SmallScroll ToRight:=-3
Range("AP:AP,AO:AO,AM:AM,AL:AL,AJ:AJ,AI:AI,AH:AH,AG:AG").Select
Range("AG1").Activate
ActiveWindow.SmallScroll ToRight:=-3
Range("AP:AP,AO:AO,AM:AM,AL:AL,AJ:AJ,AI:AI,AH:AH,AG:AG,AE:AE,AD:AD").Select
Range("AD1").Activate
ActiveWindow.SmallScroll ToRight:=-3
Range( _
    "AP:AP,AO:AO,AM:AM,AL:AL,AJ:AJ,AI:AI,AH:AH,AG:AG,AE:AE,AD:AD,AC:AC,AB:AB,AA:AA" _
    ).Select
Range("AA1").Activate
ActiveWindow.SmallScroll ToRight:=-3
Range( _
    "AP:AP,AO:AO,AM:AM,AL:AL,AJ:AJ,AI:AI,AH:AH,AG:AG,AE:AE,AD:AD,AC:AC,AB:AB,AA:AA,Z:Z,Y:Y,X:X" _
    ).Select
Range("X1").Activate
ActiveWindow.SmallScroll ToRight:=-3
Range( _
    "AP:AP,AO:AO,AM:AM,AL:AL,AJ:AJ,AI:AI,AH:AH,AG:AG,AE:AE,AD:AD,AC:AC,AB:AB,AA:AA,Z:Z,Y:Y,X:X,W:W,V:V,U:U" _
    ).Select
Range("U1").Activate
ActiveWindow.SmallScroll ToRight:=-3
Range( _
    "AP:AP,AO:AO,AM:AM,AL:AL,AJ:AJ,AI:AI,AH:AH,AG:AG,AE:AE,AD:AD,AC:AC,AB:AB,AA:AA,Z:Z,Y:Y,X:X,W:W,V:V,U:U,T:T,S:S,R:R" _
    ).Select
Range("R1").Activate
ActiveWindow.SmallScroll ToRight:=-3
Range( _
    "AP:AP,AO:AO,AM:AM,AL:AL,AJ:AJ,AI:AI,AH:AH,AG:AG,AE:AE,AD:AD,AC:AC,AB:AB,AA:AA,Z:Z,Y:Y,X:X,W:W,V:V,U:U,T:T,S:S,R:R,Q:Q,P:P,O:O" _
    ).Select
Range("O1").Activate
ActiveWindow.SmallScroll ToRight:=-3
Range( _
    "AP:AP,AO:AO,AM:AM,AL:AL,AJ:AJ,AI:AI,AH:AH,AG:AG,AE:AE,AD:AD,AC:AC,AB:AB,AA:AA,Z:Z,Y:Y,X:X,W:W,V:V,U:U,T:T,S:S,R:R,Q:Q,P:P,O:O,N:N,M:M,L:L" _
    ).Select
Range("L1").Activate
ActiveWindow.SmallScroll ToRight:=-3
Range( _
    "AP:AP,AO:AO,AM:AM,AL:AL,AJ:AJ,AI:AI,AH:AH,AG:AG,AE:AE,AD:AD,AC:AC,AB:AB,AA:AA,Z:Z,Y:Y,X:X,W:W,V:V,U:U,T:T,S:S,R:R,Q:Q,P:P,O:O,N:N,M:M,L:L,K:K,J:J,I:I" _
    ).Select
Range("I1").Activate
ActiveWindow.SmallScroll ToRight:=-2
Union(Range( _
    "G:G,AP:AP,AO:AO,AM:AM,AL:AL,AJ:AJ,AI:AI,AH:AH,AG:AG,AE:AE,AD:AD,AC:AC,AB:AB,AA:AA,Z:Z,Y:Y,X:X,W:W,V:V,U:U,T:T,S:S,R:R,Q:Q,P:P,O:O,N:N,M:M,L:L,K:K,J:J,I:I" _
    ), Columns("H:H")).Select
Range("G1").Activate
ActiveWindow.SmallScroll ToRight:=-4
Union(Range( _
    "G:G,E:E,AP:AP,AO:AO,AM:AM,AL:AL,AJ:AJ,AI:AI,AH:AH,AG:AG,AE:AE,AD:AD,AC:AC,AB:AB,AA:AA,Z:Z,Y:Y,X:X,W:W,V:V,U:U,T:T,S:S,R:R,Q:Q,P:P,O:O,N:N,M:M,L:L,K:K,J:J" _
    ), Range("I:I,H:H")).Select
Range("E1").Activate
ActiveWindow.SmallScroll ToRight:=-2
Union(Range( _
        "G:G,E:E,D:D,B:B,AP:AP,AO:AO,AM:AM,AL:AL,AJ:AJ,AI:AI,AH:AH,AG:AG,AE:AE,AD:AD,AC:AC,AB:AB,AA:AA,Z:Z,Y:Y,X:X    ,W:W,V:V,U:U,T:T,S:S,R:R,Q:Q,P:P,O:O,N:N,M:M,L:L" _
    ), Range("K:K,J:J,I:I,H:H")).Select
Range("B1").Activate
Selection.Delete Shift:=xlToLeft
Range("C4").Select
Columns("B:B").EntireColumn.AutoFit
Columns("B:B").ColumnWidth = 71.43
Columns("C:C").EntireColumn.AutoFit
Columns("D:D").EntireColumn.AutoFit
Columns("E:E").EntireColumn.AutoFit
Columns("F:F").EntireColumn.AutoFit
Rows("1:1").Select
Selection.AutoFilter


End Sub

它可以很好地减少我收到的报告中的数据量。

现在我需要在此之后删除更多数据。我留下了 A-F 列,这是完美的。在 D 列中,我需要 VBA 搜索“已暂停”、“未发布”、“进行中”、“已过期”、“已计划”、“未发布”...然后自动删除包含该数据的任何行。

如果可能的话,我需要这一切都在单一命令下运行。我只想运行一个宏。

请帮助我。

我尝试以此作为开始:

Sub DeleteRowswithSpecificText()
For i = Selection.Rows.Count To 1 Step -1
If Cells(i, 4).Value = "Suspended" Then
Cells(i, 4).EntireRow.Delete
End If
Next i
End Sub

但是什么也没发生

excel vba delete-row
1个回答
0
投票

对您的代码进行一点更改。试试这个:

Sub DeleteRowswithSpecificText()
    '******************************************************
    ' Alert: it will looping all cells from the column "D".
    ' It's a good idea define the range just you'll use.
    '******************************************************

    ' Disable time waster
    Application.ScreenUpdating = False
    
    Dim Line As Range
    
    For Each Line In ActiveSheet.Columns.Range("D:D")
        
        ' Searching values
        Select Case Line.Value2
            
            ' Deleting row
            Case "Suspended", "Not Posted", "In Progress"
                Line.EntireRow.Delete
            
            ' Maybe you just want to change the cell background color
            Case "Expired", "Scheduled", "In Unposted"
                ' Change cell color
                Line.Interior.color = RGB(240, 107, 89) 'Red - Dec: 15756121
                
                ' Change entire row color
                Line.EntireRow.Interior.color = RGB(240, 107, 89) 'Red - Dec: 15756121
                
        End Select
    Next
    
    Application.ScreenUpdating = True
    
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.