2016-07-27 3 views
0

Data to FilterCopy AutoFiltered Loop данных до конца

Привет,

Я создал файл макросов, связанный со скриптом. Я бы хотел, чтобы он отфильтровал колонку финансового года с первого финансового года и скопировал ее на другой лист, а затем зациклил до тех пор, пока весь финансовый год не будет обработан.

Я сделал повторяющиеся действия в модуле, но если я удалю один из финансового года, он не будет продолжен.

Как отфильтровать критерии с доступными финансовыми годами, и он будет зацикливаться до конца? Моя проблема заключается в коде ниже, поскольку он определяет только один финансовый год.

ActiveSheet.Range ("$ A $ 1: $ D $ 20") Автофильтр поле:. = 3, факторам1: = "2012"

Спасибо!

ответ

0

Код, приведенный ниже, поможет вам выполнить цикл лет.

Option Explicit 

Sub Loop_FiscalYear() 

Dim Sht      As Worksheet 
Dim Year_Loop    As Integer 
Dim Year_Start    As Integer 
Dim Year_Finish    As Integer 

' modify Sheet1 to your sheet name 
Set Sht = ThisWorkbook.Sheets("Sheet1") 

' modify these parameters according to your needs 
Year_Start = 2012 
Year_Finish = 2016 

For Year_Loop = Year_Start To Year_Finish 
    Sht.Range("$A$1:$D$20").AutoFilter Field:=3, Criteria1:=Year_Loop 

    ' do your other stuff here..... 

Next Year_Loop 

End Sub 

Edit 1: Код опции номер 2, посчитайте количество видимых строк на Отфильтрованный год

Sub Loop_FiscalYear() 

Dim Sht      As Worksheet 
Dim Data_Rng    As Range 
Dim Year_Loop    As Integer 
Dim Year_Start    As Integer 
Dim Year_Finish    As Integer 
Dim VisibleRows    As Long 
Dim Last_Row    As Long 
Dim Last_Col    As Long 
Dim RngArea 

' modify Sheet1 to your sheet name 
Set Sht = ThisWorkbook.Sheets("Sheet5") ' ("Sheet1") 

' remove all filters from table's data 
Sht.Range("C1").Select 

If ActiveSheet.AutoFilterMode Or ActiveSheet.FilterMode Then 
    ActiveSheet.AutoFilter.ShowAllData 
End If 

' find last row in sheet 
Last_Row = Cells(Rows.Count, "A").End(xlUp).row 

' find last column in sheet 
Last_Col = Cells(1, Columns.Count).End(xlToLeft).Column 

Set Data_Rng = Sht.Range(Cells(1, 1), Cells(Last_Row, Last_Col)) 

' modify these parameters according to your needs 
Year_Start = 2012 
Year_Finish = 2016 

For Year_Loop = Year_Start To Year_Finish 

    With Data_Rng 
     .AutoFilter Field:=3, Criteria1:=Year_Loop 
     .Select 

     ' count number of rows in Filtered area 
     For Each RngArea In .SpecialCells(xlCellTypeVisible).Areas 
      VisibleRows = VisibleRows + RngArea.Rows.Count 
     Next 

     ' MsgBox just for easy debug 
     MsgBox "Autofilter " & VisibleRows - 1 & " rows " 

     If VisibleRows = 0 Then 
      ' do something... 

     End If 
    End With 

    ' reset value for Next year loop 
    VisibleRows = 0 

Next Year_Loop 

End Sub 
+0

Спасибо Шай Rado за вашу помощь. Это работает для моего макроса. Я только удалил Option Explicit, так как у меня возникла ошибка «скомпилировать ошибку ошибки». Я также хотел бы спросить, может ли я установить, что он перейдет к следующему финансовому году, если это произойдет, если нет данных за определенный финансовый год? – cameri

+0

@cameri см. Отредактированный код, он будет проходить через годы и фильтровать ваш стол, позже он покажет вам, сколько строк в год. Я не уверен, что вы хотите сделать, если это 0, или если это не 0? –

+0

в случае, если это 0, я хочу, чтобы он перешел к следующему финансовому году. если это не 0, то просто продолжайте так, как есть до конца. Заранее спасибо. :) – cameri