Já aconteceu de ter uma planilha de uns 5 ou 6 MB, na qual efetua algumas atualizações, talvez criando alguns gráficos, e algumas tabelas dinâmicas, de de repente vê essa planilha aumentar de tamanho de 3 a 100 vezes!
Ficou surpreso? Sim, porque é possível, então não se preocupe demais, vou ajudá-lo.
Bem, em primeiro lugar precisamos entender a diferença entre Excel Default Last Cell e Actual Last Cell. Quando pressionamos Ctrl + End para encontrar a última célula (Actual Last Cell), nós chegamos a Excel Default Last Cell, que pode ser a Actual Last Cell ou podem ser células vazias que ficam muito além desta. Quanto mais distante da Excel Default Last Cell estiver a Actual Last Cell mais espaço desnecessário está sendo ocupado na planilha atual.
Qual a solução? Apague todas as linhas e colunas além do Actual Last Cell em cada planilha. Se houver demasiadas planilhas e grandes conjuntos de dados, poderá usar o código VBA a seguir:
Option ExplicitSub SHRINK_XL()
Dim WSheet As WorksheetDim CSheet As String 'New WorksheetDim OSheet As String 'Old WorkSheetDim Col As LongDim ECol As Long 'Last ColumnDim lRow As LongDim BRow As Long 'Last RowDim Pic As ObjectFor Each WSheet In WorksheetsWSheet.Activate'Put the sheets in a variable to make it easy to go back and forthCSheet = WSheet.Name'Rename the sheet to its name with _Delete at the endOSheet = CSheet & "_Delete"WSheet.Name = OSheet'Add a new sheet and call it the original sheets nameSheets.AddActiveSheet.Name = CSheetSheets(OSheet).Activate'Find the bottom cell of data on each column and find the further rowFor Col = 1 To Columns.Count 'Find the actual last bottom rowIf Cells(Rows.Count, Col).End(xlUp).Row > BRow ThenBRow = Cells(Rows.Count, Col).End(xlUp).RowEnd IfNext'Find the end cell of data on each row that has data and find the furthest oneFor lRow = 1 To BRow 'Find the actual last right columnIf Cells(lRow, Columns.Count).End(xlToLeft).Column > ECol ThenECol = Cells(lRow, Columns.Count).End(xlToLeft).ColumnEnd IfNext'Copy the REAL set of dataRange(Cells(1, 1), Cells(BRow, ECol)).CopySheets(CSheet).Activate'Paste Every ThingRange("A1").PasteSpecial xlPasteAll'Paste Column WidthsRange("A1").PasteSpecial xlPasteColumnWidths
Sheets(OSheet).ActivateFor Each Pic In ActiveSheet.PicturesPic.CopySheets(CSheet).PasteSheets(CSheet).Pictures(Pic.Index).Top = Pic.TopSheets(CSheet).Pictures(Pic.Index).Left = Pic.LeftNext PicSheets(CSheet).Activate'Reset the variable for the next sheetBRow = 0ECol = 0Next WSheet' Since, Excel will automatically replace the sheet references for you on your formulas,' the below part puts them back.' This is done with a simple replace, replacing _Delete with nothingFor Each WSheet In WorksheetsWSheet.ActivateCells.Replace "_Delete", ""Next WSheet'Roll through the sheets and delete the original fat sheetsFor Each WSheet In WorksheetsIf Not Len(Replace(WSheet.Name, "_Delete", "")) = Len(WSheet.Name) ThenApplication.DisplayAlerts = FalseWSheet.DeleteApplication.DisplayAlerts = TrueEnd IfNext
End Sub
Tags: VBA, Excel, Sheet, woksheet, shrink, diminuir, reduce, compact, size, file, planilha, arquivo
Nenhum comentário:
Postar um comentário