Как известно, все наши беды от таблиц. В лучшем случае от их объема. А еще они имеют неприятное свойство зависать. Выгрузки по 100 и более строк с трудом перемалываются памятью и ЦП, а нам остаётся только ждать. Доколе?
Первый способ — разделить файлы (можно не в ручную)
Можно просто сплитануть файлы на несколько частей и тем самым дать шанс своему ПК обработать файлы. Не обязательно делать это вручную. Во-первых, есть специальные сервисы (вроде Aspose), Во-вторых, можно использовать макрос для разделения
Sub Splitbook() 'Updateby20140612 Dim xPath As String xPath = Application.ActiveWorkbook.Path Application.ScreenUpdating = False Application.DisplayAlerts = False For Each xWs In ThisWorkbook.Sheets xWs.Copy Application.ActiveWorkbook.SaveAs Filename:=xPath & "\" & xWs.Name & ".xlsx" Application.ActiveWorkbook.Close False Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
Второй способ — использовать макрос, вместо фильтра
При обработке «напрямую», Excel актуализирует все ячейки, даже если они не задействованы. В свою очередь VBA будет выдавать информацию и менять ее, только ту, которая используется.
Для начала, определимся с параметрами фильтрации. Предположим, у нас есть таблица с данными, содержащая заголовки столбцов в первой строке, и мы хотим отфильтровать значения в столбцах «Имя» и «Возраст». В качестве условия будем использовать значение «Андрей» в столбце «Имя».
Пример макроса:
Sub FilterData() Dim ws As Worksheet Set ws = ActiveSheet 'или можно указать конкретный лист: Set ws = ThisWorkbook.Worksheets("Лист1") 'определяем диапазон данных Dim lastRow As Long, lastCol As Long lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row lastCol = ws.Cells(1, Columns.Count).End(xlToLeft).Column Dim dataRange As Range Set dataRange = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol)) 'задаем параметры фильтрации Dim filterRange As Range Set filterRange = ws.Range("A1").CurrentRegion 'диапазон данных с заголовками filterRange.AutoFilter Field:=1, Criteria1:="Андрей" 'фильтруем по столбцу "Имя" filterRange.AutoFilter Field:=3, Criteria1:=">=18", Operator:=xlAnd, Criteria2:="<=30" 'фильтруем по столбцу "Возраст" End Sub
Этот макрос фильтрует данные в выбранных столбцах по заданным условиям. В данном примере мы фильтруем данные по имени «Андрей» в столбце «Имя» и возрасту от 18 до 30 лет в столбце «Возраст». Вы можете изменить эти параметры согласно вашим потребностям.
Для запуска макроса необходимо нажать Alt + F8, выбрать макрос и нажать кнопку «Выполнить».