Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
Przesunięty przez: Artik
07-01-2019, 15:23
Optymalizacja makra
Autor Wiadomość
mancia14 
Exceloholic


Pomógł: 2 razy
Posty: 162
Wysłany: 08-01-2019, 23:07   

Przeprowadziłem na moim komputerze testy dla powyższych rozwiązań.
Dla eksperymentu utworzyłem poprzez kopiowanie wierszy zakres danych w arkuszu "Materialy" o ogromnej ilości wierszy równej: 995 484. Oto wyniki:

- moje makro uporało się z zadaniem w czasie 11 min 39 sek...
- makro umiejada korzystające ze zmiennych obiektowych potrzebowało 9 min 15 sek.
- makro kumy to czas 4,59 sek, jednak nie działa ono poprawnie, jego wersja poprawiona przez Tajana jest tym czego potrzebowałem i wykonuje się w zawrotnym tempie 9,37 sek. Mistrzostwo !
- jednak Tajan nie spoczął na laurach i podesłał kolejne rozwiązanie, które aktualnie zabiera... 5,12 sek !!! i do tego działa poprawnie!!!
- drugie rozwiązanie kumy też działa świetnie i zajmuje tylko 6,81 sek !

Wszystkie rozwiązanie sekundowe to dla mnie majstersztyk, przejście z 11 minut na kilka sekund to jak lot na Księżyc!

Wniosek z tego taki, że koniecznie muszę nauczyć się używania tablic w programowaniu VBA, gdyż powyższy przykład obrazuje jaką mają moc! Gorąco zachęcam do tego samego pozostałych użytkowników forum.

Wszystkim, którzy pomogli serdecznie dziękuję!

PS. Chciałem załączyć plik ze wszystkimi rozwiązaniami do testów, ale coś mi nie pozwala...
.
  
ID posta: 360033 Skopiuj do schowka
 
 
umiejead 
Excel Expert


Pomógł: 231 razy
Posty: 1235
Wysłany: 08-01-2019, 23:36   

Cytat:
przejście z 11 minut na kilka sekund to jak lot na Księżyc!

"Power of Excel - VBA" :mrgreen: .
.
_________________
.
Jak poprawnie opisać problem: http://www.excelforum.pl/...ika-vt59262.htm
I dbajmy - proszę - o poprawną polszczyznę.
  
ID posta: 360037 Skopiuj do schowka
 
 
DwaNiedźwiedzie 
Excel Expert



Pomógł: 206 razy
Posty: 535
Wysłany: 09-01-2019, 09:52   

To jeszcze ja, jeszcze ja! :)
Zanim doczytałem wszystkie rozwiązania, zrobiłem swój odpowiednik wersji Tajana - imho ciut czytelniejszy dla początkujących:
Kod:
Sub kopiuj_DN1()
Dim lw As Integer, start As Single, kol, k As Integer

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

start = Timer
lw = Sheets("materialy").Cells(Rows.Count, 1).End(xlUp).Row - 6
kol = Array(1, 4, 9, 11)

Sheets("Arkusz1").UsedRange.ClearContents

For k = 0 To UBound(kol)
   Sheets("Arkusz1").Cells(1, k + 1).Resize(lw).Value2 = Sheets("materialy").Cells(7, kol(k)).Resize(lw).Value2
Next

MsgBox Format(Timer - start, "0.00")

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub

Obie wersje u mnie mają wynik 0,11 s. A co powiecie na 0,03 s.? :]
Kod:
Sub kopiuj_DN2()
Dim lw As Integer, start As Single, zakr As Range, kol, k As Integer

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

start = Timer
lw = Sheets("materialy").Cells(Rows.Count, 1).End(xlUp).Row - 6
kol = Array(1, 4, 9, 11)

Set zakr = Sheets("materialy").Cells(7, kol(0)).Resize(lw)

For k = 1 To UBound(kol)
   Set zakr = Union(zakr, Sheets("materialy").Cells(7, kol(k)).Resize(lw))
Next

Sheets("Arkusz1").UsedRange.ClearContents

zakr.Copy
[arkusz1!a1].PasteSpecial xlPasteValues

MsgBox Format(Timer - start, "0.00")

With Application
   .CutCopyMode = False
   .ScreenUpdating = True
   .Calculation = xlCalculationAutomatic
End With

End Sub
ID posta: 360060 Skopiuj do schowka
 
 
kuma 
Excel Expert


Pomógł: 1125 razy
Posty: 3386
Wysłany: 09-01-2019, 12:13   

Super :thumbup:
Pozdrawiam.
ID posta: 360078 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe