< návrat zpět

MS Excel


Téma: Zrychlení makra na seřazení dat rss

Zaslal/a 1.2.2013 13:23

Dobrý den,

potřebuji makrem srovnat velké množství dat podle prvního sloupce a následně podle druhého sloupce. Srovnání funguje, ale srovnávání vždy trvá neuvěřitelně dlouho (až několik minut) nevíte prosím nějaký jednodušší a hlavně rychlejší způsob srovnávání velkého množství dat? Možná dělám někde chybu... děkuji a posílám používané makro:

'aktivuji list deník
Sheets("Deník").Activate


Rows("1:6000").Select
Selection.EntireRow.Hidden = False
Columns("B:E").Select
ActiveWorkbook.Worksheets("Deník").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Deník").Sort.SortFields.Add Key:=Range("B2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal




ActiveWorkbook.Worksheets("Deník").Sort.SortFields.Add Key:=Range("C2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Deník").Sort
.SetRange Range("B1:E6000")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

stop Uzamčeno - nelze přidávat nové příspěvky.

icon #011328
avatar
Skús to nahradiť nasledujúcim:Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Sheets("Deník").Activate
Rows("1:6000").EntireRow.Hidden = False

Columns("B:E").Select

With ActiveSheet.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("B2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("C2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("B1:E6000")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True


mám ale podozrenie, že uvedeným to nebude, i to pôvodné makro beží u mňa odhadom cca 2 sekundycitovat
#011329
avatar
Děkuji moc, zjistil jsem, že to opravdu není makrem pro srovnání, ale tímto, které má skrýt řádky, které něco neobsahují...respektive jejich první funkce - spočítání řádků, když ji umažu, vše funguje, jen nevím jak ji nahradit...

'spočítám, kolik řádků má list
radku = ActiveSheet.UsedRange.Rows.Count

'hledám v každém řádku postupně, začínám druhým řádkem
'i počítá řádek ..

For i = 2 To radku

'jestliže v řádku není buňka B prázdná a současně buňka C je prázná ....
If Not IsEmpty(Range("D" & i)) Then

'řádek skryji
Rows(i).EntireRow.Hidden = False

End If

'i se zvyšuje o jedničku dokud nedosáhne počtu řádků
Next i

'aktivuji list deník
Sheets("Deník").Activate

'spočítám, kolik řádků má list
radku = ActiveSheet.UsedRange.Rows.Count

'hledám v každém řádku postupně, začínám druhým řádkem
'i počítá řádek ..

For i = 2 To radku

'jestliže v řádku není buňka B prázdná a současně buňka C je prázná ....
If Not IsEmpty(Range("B" & i)) And IsEmpty(Range("D" & i)) Then

'řádek skryji
Rows(i).EntireRow.Hidden = True

End If

'i se zvyšuje o jedničku dokud nedosáhne počtu řádků
Next i
citovat
icon #011331
avatar
Skús dať na začiatok

application.screenupdating=false

a na koniec

application.screenupdating=truecitovat
icon #011341
eLCHa
Jenom technicka poznamka. Pokud chcete skryvat vice radku, nedelejte to po jednom, ale najednou.

viz
http://wall.cz/index.php?m=topic&id=10711#post-10712
citovat
#011418
avatar
Prima, už to funguje, děkuju moccitovat

Uživatelské menu

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

Menu

Formulář Faktura

Formulář Faktura IV

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

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje