< návrat zpět

MS Excel


Téma: Zrychlení výmazu dat rss

Zaslal/a 1.2.2024 17:35

ZačátečníkDobrý den,
pro výmaz nevyhovujících záznamů využívám metodu mazání dat pomocí SpecialCells. Pro řádově 1000 řádků to je obstojná rychlost výmazu, ale při počtech záznamů v řádu desítek a stovek tisíc je to pomalé.

Existuje jiný, efektivní, způsob výmazu velkého množství dat.

Současný kód výmazu:
Sub VymazNepotrebne()
Dim rng As Range
Set rng = Range("D2:D" & Cells(Rows.Count, 1).End(xlUp).Row)
With rng
.Formula = "=IF(A2=1,0,0/0)"
On Error Resume Next
.Cells.SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Delete
.Clear
On Error GoTo 0
End With
Set rng = Nothing
End Sub

Zaslat odpověď >

#056103
elninoslov
Odstraňovať Range s toľkými Areas má svoje limity. Riešením by bolo pole dát. Skúste si v tomto súbore vytvoriť tlačítkom "Vytvor" 300000 dát (množstvo zadajte v bunke L1) a potom použite tlačítko "Vymaž pole". V pohode. Pri použití "Vymaž RNG" na takéto množstvo, budete čakať veľa minút, a keď budete mať šťastie a Excel Vám nespadne, dočkáte sa rovnakého výsledku.
Příloha: zip56103_vymaz-mnozstvo.zip (20kB, staženo 3x)
citovat
#056104
Začátečník
Díky, to jsou právě ty obavy z vysoké stability a spolehlivosti MSO.

Pokusím se upravit pro variabilní oblast dat.citovat
#056105
avatar
Rychlý postup:

1. v pom sloupci očíslovat řádky (pokud je nutné zachovat pořadí řádků)
2. seřadit podle sl A
3. vybrat blok, kde A <> 1 a odstranit
4. vybrat blok, kde A <> 1 pokud ještě existuje a odstranit
5. seřadit podle pom sloupcecitovat
#056106
elninoslov
@lubo opäť výborný nápad, ktorý sa dá urobiť aj makrom. Týmto sa totiž odstráni problém s Areas (bude iba jedna na konci). Príklad makrom "Vymaž RNG2".
Příloha: zip56106_vymaz-mnozstvo.zip (24kB, staženo 1x)
citovat
#056110
Začátečník
Seřazení dat byla taky jedna z možností nad kterými jsem uvažoval. Jedno jestli vymazavana oblast bude na konci nebo začátku, hlavně že bude spojitá.citovat
#056111
avatar

Začátečník napsal/a:

Jedno jestli vymazavana oblast bude na konci nebo začátku, hlavně že bude spojitá.


Jedno to není. Odstranění bloku na konci je rychlejší (excel nemusí posouvat buňky nahoru.)citovat
#056112
Začátečník
Jasné, to mi bohužel došlo, když už jsem to odeslal.

V mém případě ani není nutné mít pomocný sloupec, protože různá data zpracovávám pokaždé jinak seřazená, ale to není podstatné.

Díky za cenné rady a řešení.
I před důchodem se člověk stále učí .. 5

EDIT:
to elninoslov
možná bych doplnil With .Sort
.SortFields.Add2 Key:=rng, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal

With .Sort
. SortFields.Clear
.SortFields.Add2 Key:=rng, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal

aby se nekumulovaly jednotlivé úrovně filtru každým spuštěnímcitovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse