OzGrid

How to use VBA Code to remove amounts based on days passed

< Back to Search results

 Category: [Excel]  Demo Available 

How to use VBA Code to remove amounts based on days passed

 

Requirement:

 

The user is working with a list of 70k accounts.

 

The user found that he needed to remove anything that was less than 41 days due. The code written to do this took 20 minutes to do that task. The user is sure there a faster way than using a loop. How can the user speed up the code?

Code:
Sub LessThanFortyOneDPDRemove()

 

Dim sht1 As Worksheets                  'Worksheet Master'
Dim DPD As String                          'Days Past Due'
Dim c1row As Long                         'starting row'
Dim c1TotalRows As Long                 'total rows'
Dim DPDremoved As Long                  'total removed'

 

'Searches through a sheet looking for all accounts that are less than 41 days past due'
'and deletes them'

Set sht1 = Worksheets("Master")

sht1.Activate

c1TotalRows = Application.CountA(Range("A:A"))

c1row = 2

 Do While sht1.Cells(c1row, 2).Value <> ""

DPD = sht1.Cells(c1row, 2).Value

    For c2row = 2 To c1TotalRows

        If DPD < 41 Then

            sht1.Activate
            Rows(c1row).Delete
            DPDremoved = DPDremoved + 1
            c1row = c1row - 1
            sht1.Activate
            Exit For

        End If

    Next
   
    c1row = c1row + 1

 Loop

MsgBox DPDremoved & " accounts less than 41 dpd removed."
 
End Sub

 

https://www.ozgrid.com/forum/forum/help-forums/excel-vba-macros/1202582-removing-based-on-days-past-due-column

 

Solution:

 

Assumes Column B contains information you are matching criteria against.

Code:
Option Explicit

Sub Less41()
    Dim s1 As Worksheet, s2 As Worksheet
    Set s1 = Sheets("Sheet1")
    Set s2 = Sheets("Sheet2")
    Dim lr As Long, lc As Long
    lr = s1.Range("A" & Rows.Count).End(xlUp).Row
    lc = s1.Cells(1, Columns.Count).End(xlToLeft).Column
    s1.Range(Cells(1, 1), Cells(lr, lc)).AutoFilter Field:=2, Criteria1:=">41", _
                                                    Operator:=xlAnd
    s1.Range("A1").CurrentRegion.Copy
    s2.Range("A1").PasteSpecial xlPasteValues
End Sub

 

Obtained from the OzGrid Help Forum.

Solution provided by AlanSidman.

 

See also: Index to Excel VBA Code and Index to Excel Freebies and Lesson 1 - Excel Fundamentals and Index to how to… providing a range of solutions and Index to new resources and reference sheets

 

See also:

How to use a macro to auto delete file when passed 15 days
How to create VBA code for a workbook to work on week days only and specific range of time
How to count weekdays in a month excluding holidays
How to use NETWORKDAYS
How to use calendar form control - only allow weekdays to be selected

 

Click here to visit our Free 24/7 Excel/VBA Help Forum where there are thousands of posts you can get information from, or you can join the Forum and post your own questions.


Gallery



stars (0 Reviews)