Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1556to1560
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Einfaches Makro schneller machen

Einfaches Makro schneller machen
09.05.2017 16:34:46
Gerd
Hallo,
ich möchte gerne in zwei Tabellen, deren Inhalt sich täglich ändert, bestimmte Werte suchen und bei den entsprechenden Zellen den Hintergrund grau färben + den jeweiligen Wert in die erste Spalte der Tabellen schreiben.
Ich verwende dazu folgenden Ansatz, der auch wie geplant funktioniert.
Leider braucht das Makro dafür über eine Minute, was mir für eine solche Aktion sehr lange vorkommt (zudem ist es nur Teil eines größeren Makros).
Beide Tabellen sind nicht groß und enthalten nur ca. 500 bzw. 100 Werte.
Kann mir jemand sagen, wie man hier Zeit sparen oder den Code effektiver schreiben kann ?
Mein Code:
Sub PrepareRankRecords(varMode As String)
Call RankRecords(varMode, 10000)
Call RankRecords(varMode, 5000)
Call RankRecords(varMode, 2000)
Call RankRecords(varMode, 1500)
Call RankRecords(varMode, 1000)
Call RankRecords(varMode, 500)
End Sub
Sub RankRecords(varMode As String, varRank As Integer)
Dim cell As Range, varRange As Range
If varMode = "DSP" Then
' table AE:AJ
Application.StatusBar = "90 % - Ranking table AE:AJ"
DoEvents
Set varRange = Range("$AI$3", Cells(Rows.Count, "AI").End(xlUp)).Cells
Else
' table X:AC
Application.StatusBar = "60 % - Ranking table X:AC"
DoEvents
Set varRange = Range("$AB$3", Cells(Rows.Count, "AB").End(xlUp)).Cells
End If
With Worksheets(4)
For Each cell In varRange
If cell.Offset(0, -3).Value  "" Then
If cell.Value 
Vielen Dank im Voraus für Eure Hilfe.
VG,
Gerd

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Einfaches Makro schneller machen
09.05.2017 16:51:32
ChrisL
Hi Gerd
Die üblichen Tipps findest du via Recherche u.a.
Sub t()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
' dein Code
Application.Calculation = xlCalculationAutomatic
End Sub
Hast du noch mehr Code (z.B. Worksheet_Change Ereignis)?
Erst färbst du alle Werte kleiner 10000 ein. Dann alle kleiner 5000 usw. Aber die Werte kleiner 10000 beinhalten doch auch alle anderen Grenzwerte?
Warum nicht mit bedingter Formatierung?
cu
Chris
AW: Einfaches Makro schneller machen
09.05.2017 17:10:36
Gerd
Hi Chris,
danke für Deine Nachricht !
Die Calculation schalte ich schon aus und ein, das habe ich hier nur nicht mit kopiert.
Ich möchte aber nicht alle Werte einfärben, sondern nur die jeweiligen Grenzwerte, d.h. den ersten Wert kleiner 10000, dann den ersten Wert kleiner 5000 usw. + ich muss dann die jeweiligen Werte in die erste Spalte schreiben.
Mein Makro funktioniert wie gesagt, es ist nur sehr langsam aufgrund des Loops.
VG,
Gerd
Anzeige
AW: Einfaches Makro schneller machen
09.05.2017 18:06:04
ChrisL
Hi Gerd
OK, das Exit For habe ich übersehen und jetzt macht es Sinn.
Trotzdem, eine Minute ist (zu) lang für diesen Code bei 100-500 Zeilen. Teste den Code mal in einer Dummy-Datei (nur Spalte AB resp. AI mit Daten), ich würde wetten du wartest keine Minute. Somit liegt das Problem nicht am gezeigten Code und wir können nur raten. Best guess: WS-Change Event
cu
Chris
AW: Einfaches Makro schneller machen
09.05.2017 18:22:23
Gerd
Hallo Chris,
vielen Dank nochmal !
In den Blättern selbst verwende ich hier kein VBA, d.h. es gibt auch keine Change Events o.ä.
Dieses Makro alleine in einer separaten Datei läuft tatsächlich wesentlich schneller.
Ich glaube, da muss ich mir mal die Pivots und Tabellen genauer anschauen.
Trotzdem danke.
VG,
Gerd
Anzeige
AW: Einfaches Makro schneller machen
09.05.2017 18:37:36
ChrisL
Hi Gerd
Jetzt wird es langsam interessant. Lass wissen, wenn du etwas rausfindest :)
Noch zwei Testfälle:
- Calculation ausnahmsweise ausgeschaltet lassen (liegt es vielleicht an der Neuberechnung ganz allgemein)
- Schrittweise Tabellenblätter löschen (vielleicht kannst du das Problem auf ein Blatt eingrenzen).
Falls die Liste sortiert ist, könnte man evtl. auch ohne Schleife (=VERGLEICH() resp. Application.Match).
cu
Chris
AW: Einfaches Makro schneller machen
09.05.2017 18:56:42
Gerd
Hallo Chris,
es liegt tatsächlich an der Neuberechnung, zumindest es stark danach aus - hängt vielleicht mit den Pivots zusammen.
Mein ganzes Makro (das hier ist nur ein Teil) braucht ca. 1,5 Minuten.
Ich schalte die Calculation gleich zu Beginn aus und dann nach jedem Teil-Makro wieder ein (da ich in jedem Teil-Makro Spalten kopiere und einfüge).
Nur die Neuberechnungen machen ca. 70 % der Laufzeit aus.
Beide Tabellen sind jeweils absteigend nach den Werten in der Spalte sortiert, in der ich hier suche.
VG,
Gerd
Anzeige
AW: Einfaches Makro schneller machen
09.05.2017 19:12:39
ChrisL
Hi Gerd
Für VERGLEICH müsste die Liste aufsteigend sortiert sein, Pech :)
Wenn ein Zwischenschritt die Neuberechnung tatsächlich erfordert, dann kannst du auch gezielt z.B. nur ein Blatt oder Bereich berechnen. z.B.
Worksheets("xy").Range("A1:B100").Calculate
Volatile Funktionen meiden siehe z.B.
http://www.tabellenexperte.de/excel-im-schneckentempo-volatile-funktionen/
cu
Chris

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige