Denis Grenda

Denis Grenda Student pierwszego
roku studiów
magisterkich
matematyki w...

Temat: VBA -arcyniewydajny kod

Cześć, to znowu ja.
Piszę sobie metodę i w pewnym momencie mam kod:
  
For licznik = 14872 To ostatnia
If Cells(licznik, 4).Value = False Then
Rows(licznik).Delete
End If
Next licznik

Danych mam 15 tyś, ale nawet robiąc to dla 100 wierszy z kawałkiem mój komputer albo prędzej excel (bo w sumie robiłem 'gorsze' operacje w Cpp i tak się nie działo) nie ogarnia,
Taka natura excela czy ten kod jest po prostu tak BARDZO słaby?
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: VBA -arcyniewydajny kod

Przede wszystkim - mam wątpliwości, czy na pewno dobrze działa pod względem merytorycznym.
Załóżmy, że w wierszu 15000 warunek jest spełniony i wiersz zostanie usunięty. W tym momencie wiersz 15001 staje się wierszem o numerze 15000, ale pętla nie sprawdza ponownie wiersza nr 15000, tylko przechodzi dalej.
Przy usuwaniu zawsze zaczynamy od dołu i idziemy w górę.
Czyli
For licznik = ostatnia To  14872 Step -1
If Cells(licznik, 4).Value = False Then
Rows(licznik).Delete
End If
Next licznik
Denis Grenda

Denis Grenda Student pierwszego
roku studiów
magisterkich
matematyki w...

Temat: VBA -arcyniewydajny kod

Dziękuję za odpowiedź, później zmieniłem ten kod na (wydaje mi się) prostszy i zauważyłem to o czym Pani mówi, czy kod
 For licznik = 2 To ostatnia
pomoc = Application.WorksheetFunction.CountIfs(Range(Cells(2, 1), Cells(licznik, 1)), Cells(licznik, 1))
If pomoc > 2 Then
Rows(licznik).Delete
licznik = licznik - 1
End If

jest gorszej jakości pod względem wydajności niż ten , w którym lecimy z usuwaniem od dołu?
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: VBA -arcyniewydajny kod

Moim zdaniem - jest nie tyle gorszy, co bardziej pamięcio- i czasożerny. Dodatkowa zmienna, wykonywanie funkcji arkuszowej - to nie wpływa korzystnie na procedurę.
Denis Grenda

Denis Grenda Student pierwszego
roku studiów
magisterkich
matematyki w...

Temat: VBA -arcyniewydajny kod

Dziękuję za rady.
Sławomir Broda

Sławomir Broda VBA, Excel, Access,
SAP i wszystko
związane z
automatyzac...

Temat: VBA -arcyniewydajny kod

application.screenupdating = false
application.calculation = xlcalculationmanual

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora
Damian Zurawski

Damian Zurawski Data Engineer w
Grupie Żywiec

Temat: VBA -arcyniewydajny kod

Hej,

Według mnie bardzo wydajną metodą będzie użycie zwykłego filtra :) Filtrujesz sobie dane wartości po 'FAŁSZ' i usuwasz na raz wszystkie wiersze. Inną metodą jest najpierw posortowanie wszystkiego po danej kolumnie i znowu usunięcie całego zakresu FAŁSZ na raz. Taka operacja zajme dosłownie chwile. Dołącz ScreenUpdating, xlManual i będzie śmigać ładnie :)

Damian

Następna dyskusja:

Kod kreskowy EAN-13 w excelu




Wyślij zaproszenie do