Microsoft Excel
Автофильтр и расширенный фильтр
как пример, предположим, что нужно разбить таблицу по отдельным листам, используя в качестве критерия уникальные значения из одного столбца |
собственно вот код примера: view plainprint? 1. Sub ertert112() 2. Dim s$, r 3. Application.ScreenUpdating = False 4. With Sheets("Sheet4").Range("A1").CurrentRegion 5. .Parent.AutoFilterMode = False 6. For Each r In .Offset(1).Resize(.Rows.Count - 1).Columns(4).Value 7. If InStr(s, r) = 0 Then 8. If Not Evaluate("ISREF('" & r & "'!A1)") Then 9. Sheets.Add(after:=Sheets(Sheets.Count)).Name = r 10. Else 11. Sheets(r).UsedRange.ClearContents 12. End If 13. .AutoFilter 4, r 14. .Copy Sheets(r).Range("A1") 15. s = s & r 16. End If 17. Next 18. .AutoFilter 19. End With: Application.ScreenUpdating = True 20. End Sub а это отрывки-заготовки: view plainprint? 1. Dim s As String, r As Range ' массив в качестве критерия для автофильтра 2. With New Collection 3. On Error Resume Next 4. For Each r In ActiveSheet.ListObjects("Table1").DataBodyRange.Columns(2).SpecialCells(12) 5. If IsEmpty(.Item(r)) Then .Add r, r: s = s & "~" & r 6. Next 7. End With: On Error GoTo 0 8. ActiveSheet.ListObjects("Table2").Range.AutoFilter 2, Split(Mid(s, 2), "~"), 7 view plainprint? 1. Dim lo As ListObject: Set lo = ActiveSheet.ListObjects(1) 2. lo.Range.AutoFilter ' разрешить/отменить автофильтр 3. 'ActiveSheet.AutoFilterMode игнорирует фильтры в Таблицах (ListObject), поэтому: 4. MsgBox lo.ShowAutoFilter 'есть ли автофильтр в Таблице 5. lo.Range.AutoFilter Field:=2, Criteria1:="B" view plainprint? 1. 'отобразить все данные, если применен фильтр (FilterMode), если на листе вообще есть автофильтр (AutoFilterMode) 2. With ActiveSheet 3. If .AutoFilterMode Then If .FilterMode Then .ShowAllData 4. End With 5. 6. With ActiveSheet 'или сразу так 7. If .FilterMode Then .ShowAllData 8. End With |
Скачано с www.znanio.ru
© ООО «Знанио»
С вами с 2009 года.