根据时间标准删除行 - 提高代码效率?

时间:2017-07-18 09:43:59

标签: excel vba

我有这个代码完全正常,但它很慢,我得到的印象可以改善。我对VBA很陌生,我花了一小段时间才开始工作,所以我在这里发帖,希望你能给我一些很好的提示。

我有一个数据列,其中包含大约一年的日期。我只需要最近两个月的数据。这是我的代码:

Dim Export As Worksheet
Set Export = Worksheets(1)    

'Set Booking Date Variable
Dim BookingDate As Date

Export.Select
Range("A2").Select

BookingDate = ActiveCell.Offset(0, 1).Value

' Set Current Month Variable
Dim CurrentMonth As Integer

CurrentMonth = Month(BookingDate)
CurrentYear = Year(BookingDate)

' Set Export Range
Dim ExportRange As Range
Set ExportRange = Export.Range("A2").CurrentRegion

'Sort by BookingDate
Export.Sort.SortFields.Clear
ExportRange.Sort Key1:=Export.Range("B1"), order1:=xlAscending, _
    Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlSortColumns, _
    DataOption1:=xlSortNormal

以上是设置,其主要目的是获取当前日期变量。我想在这里我可以在excel中使用ISDATE公式,但我不完全确定如何。

'Delete all rows that are more than two months past
Export.Range("A2").Select
    'Delete irrelevant years
        Do Until ActiveCell.Value = ""
            BookingYear = Year(ActiveCell.Offset(0, 1).Value)

            If BookingYear = CurrentYear Then
                ActiveCell.Offset(1, 0).Select
            Else
                Rows(ActiveCell.Row).Select
                Selection.Delete Shift:=xlUp
            End If
        Loop

Export.Range("A2").Select
    'Delete irrelevant months
        Do Until ActiveCell.Value = ""
            BookingMonth = Month(ActiveCell.Offset(0, 1).Value)

            If BookingMonth = CurrentMonth Then
                ActiveCell.Offset(1, 0).Select
            ElseIf BookingMonth = CurrentMonth - 1 Then
                ActiveCell.Offset(1, 0).Select
            Else
                Rows(ActiveCell.Row).Select
                Selection.Delete Shift:=xlUp
            End If
        Loop

这是我遇到特殊麻烦的地方,代码需要一段时间才能运行。让它工作的主要问题是我无法保存一个月前的数据。我只能保持当月(有时是去年的月份)。整个代码运行缓慢,我认为这与我没有足够有效地使用内存的事实有关,但我对编码一般都不太了解以改进它。

任何有关变更的提示和建议都将不胜感激。 谢谢!

0 个答案:

没有答案