A “usedrange” egy igen hasznos tulajdonság: egy tartomány (Range) változóval tér vissza, mely adott munkalapon levő használt tartományt adja meg.
Vagyis ha egy munkalapon levő tartomány így néz ki…
… akkor a usedrange “C4:G8” lesz. Azonban ez a használt tartomány olyan sorokat és oszlopokat is magába foglalhat, mely bármilyen jellegű formázást tartalmaz. Így előfordulhat, hogy adott sorok/oszlopok cellái üresek de a formázás miatt beletartoznak a usedrange-be. A lenti makró ezen felesleges sorok és oszlopok cellaformátumát törli és a valódi “usedrange”-et adja vissza, lecsökkentve ezzel Excel fájlunk méretét és stabilabbá illetve gyorsabbá téve azt.
Az adott munkafüzetbe szúrjunk be egy modult a Visual Basic szerkesztőjében és az alábbi kódot adjuk hozzá:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
Sub RealUsedRange() Dim lastRow As Long, lastColumn As Long, reallastRow As Long, reallastColumn As Long 'készítette: XLMotyo 'kód célja: a "usedrange" (magyarul kb. használt tartomány) olyan sorokat illetve oszlopokat is magában foglal, mely 'bármilyen formázást tartalmaz (még ha a cella üres is). A lenti makró ezen felesleges sorok és oszlopok cellaformátumát 'törli és a valódi "usedrange"-et adja vissza, lecsökkentve ezzel Excel fájlunk méretét és stabilabbá/gyorsabbá téve azt. Application.ScreenUpdating = False ActiveWorkbook.Sheets("Sheet1").Select 'munkalap nevét frissíteni, ha szükséges 'utolsó sor és oszlop mely visszaadja a usedrange" utolsó celláját: lastRow = Cells.SpecialCells(xlCellTypeLastCell).Row lastColumn = Cells.SpecialCells(xlCellTypeLastCell).Column 'utolsó sor és oszlop mely visszaadja a valódi utolsó cellát (amely nem üres): reallastRow = Cells.Find("*", Cells(1, 1), xlFormulas, , xlByRows, xlPrevious).Row reallastColumn = Cells.Find("*", Cells(1, 1), xlFormulas, , xlByColumns, xlPrevious).Column 'üres sorok és oszlopok törlése a Clear paranccsal (ez törli a cellaformátumot is): If lastRow > reallastRow Then Range(Cells(reallastRow + 1, 1), Cells(lastRow, 1)).EntireRow.Clear If lastColumn > reallastColumn Then Range(Cells(1, reallastColumn + 1), Cells(1, lastColumn)).EntireColumn.Clear ActiveSheet.UsedRange 'újra beállítja a "usedrange"-et Application.ScreenUpdating = True End Sub |
Remélem hasznos volt a poszt.
Mintafájlért illetve kérdésekkel kapcsolatosan szólj hozzá lent vagy dobj egy emailt: xlmotyo@gmail.com