Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1920to1924
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

Spalten ausblenden zu langsam

Spalten ausblenden zu langsam
06.03.2023 11:33:17
Thomas
Hallo excelfreunde,
ich kann mit dem untenstehenden Makro Zeilen bedingt ausblenden.
Diese funktioniert auch Grundsätzlich. Aber leider ist dies zu langsam.
Diese Funktion:
Sub GetMoreSpeed(Optional ByVal Modus As Boolean = True)
Static intCalculation As Integer
If Modus = True Then intCalculation = Application.Calculation
With Application
.ScreenUpdating = Not Modus
.EnableEvents = Not Modus
.Calculation = IIf(Modus = True, xlManual, intCalculation)
.Cursor = IIf(Modus = True, 2, -4143)
End With
End Sub

bringt zwar schon eine deutliche Verbesserung, aber es ist immer noch ziemlich langsam

Dim lngZeile As Long
Dim lngLetzte As Long
Dim arrSuch As Variant
Dim i As Long
Dim bAus As Boolean
GetMoreSpeed
'Inhalte, nach denen gefiltert werden soll
arrSuch = Array("EW", "FS", "!?")
'letzte Zeile in Spalte E ermitteln
lngLetzte = Cells(Rows.Count, 10).End(xlUp).Row
'nun alle Zeilen in Spalte E ab Zeile 2 durchlaufen (Zeile 1 enthält Überschrift - ggf. anpassen)
For lngZeile = 45 To lngLetzte
'Marker für Ausblenden auf wahr setzen
bAus = True
'Array mit Suchbegriffen durchlaufen
For i = 0 To 2
If InStr(1, Cells(lngZeile, 10), arrSuch(i)) Then
bAus = False
Exit For 'Schleife für Array beenden
End If
Next i
If bAus = True Then Rows(lngZeile).EntireRow.Hidden = True 'Ausblenden
Next lngZeile
GetMoreSpeed False
kann sich dies mal jemand anschauen?
mfg thomas

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalten ausblenden zu langsam
06.03.2023 12:11:45
Daniel
Hi
ersetze mal
If bAus = True Then Rows(lngZeile).EntireRow.Hidden = True 'Ausblenden
durch das hier.
hier wird nicht sofort ausgeblendet, sondern die auszublendenden Zeilen werden erstmal gesammelt, um sie dann in einem Schritt gemeinsam ausblenden zu können. die Variable rngAus ist als RANGE zu deklarierten
if bAus Then
    if rngAus is nothing then
        set rngAus = rows(lngZeile)
   else
        set rngAus = union(rngAus, Rows(lngZeile))
   end if
end if
nach dem die Schleife dann durchgelaufen ist, blendet man aus:
if not rngAus is Nothing then rngaus.entireRow.Hidden = True
Gruß Daniel

Anzeige
Perfekt besten dank
06.03.2023 14:43:53
Thomas
Hallo Daniel und Gerd,
beide funktionieren perfekt und sind gegenüber meiner Version sauschnell.
Habt vielen vielen dank. Erstaunlich was alles so geht.
Dankeschön. Das lange warten hat nun ein Ende.
mfg thomas
AW: Spalten ausblenden zu langsam
06.03.2023 12:13:56
GerdL
Hallo Thomas!
Sub Unit()
Dim lngZeile As Long
Dim lngLetzte As Long
Dim arrSuch As Variant
Dim i As Long
Dim rngDel As Range
'Inhalte, nach denen gefiltert werden soll
arrSuch = Array("EW", "FS", "!?")
'letzte Zeile in Spalte E ermitteln
lngLetzte = Cells(Rows.Count, 10).End(xlUp).Row
Range("A2:A" & lngLetzte).Entirerow.Hidden = True 'alle ausblenden
'nun alle Zeilen in Spalte E ab Zeile 2 durchlaufen (Zeile 1 enthält Überschrift - ggf. anpassen)
For lngZeile = 2 To lngLetzte
    'Array mit Suchbegriffen durchlaufen
    For i = 0 To 2
        If InStr(1, Cells(lngZeile, 10), arrSuch(i)) Then
        
            If rngDel Is Nothing Then
                Set rngDel = Cells(lngZeile, 1)
            Else
                Set rngDel = Union(rngDel, Cells(lngZeile, 1))
            End If
            Exit For 'Schleife für Array beenden
        End If
    Next i
Next lngZeile
If Not rngDel Is Nothing Then rngDel.EntireRow.Hidden = False 'einblenden
Set rngDel = Nothing
End Sub
Gruß Gerd
Anzeige
AW: Spalten ausblenden zu langsam
06.03.2023 12:41:03
Daniel
Hi
noch eine weitere Optimierungsmöglichkeit:
Dim lngZeile As Long
Dim lngLetzte As Long
Dim arrSuch As Variant
Dim i As Long
Dim bAus As Boolean
Dim arrI
'Inhalte, nach denen gefiltert werden soll
arrSuch = Array("EW", "FS", "!?")
'letzte Zeile in Spalte E ermitteln
lngLetzte = Cells(Rows.Count, 10).End(xlUp).Row
'nun alle Zeilen in Spalte E ab Zeile 2 durchlaufen (Zeile 1 enthält Überschrift - ggf. anpassen)
arrI = Cells(1, 10).Resize(lngLetzte, 1).value
For lngZeile = 45 To lngLetzte
'Marker für Ausblenden auf wahr setzen
    bAus = True
    'Array mit Suchbegriffen durchlaufen
    For i = 0 To 2
        If InStr(1, arrI(lngZeile, 1), arrSuch(i)) Then
            bAus = False
            Exit For 'Schleife für Array beenden
        End If
    Next i
    if bAus Then
        if rngAus is nothing then
            set rngAus = rows(lngZeile)
       else
            set rngAus = union(rngAus, Rows(lngZeile))
       end if
    end if
Next lngZeile
if not rngAus is nothing then rngAus.EntireRow.Hidden = True
damit sollte das GetMoreSpeed eigentlich überflüssig sein und keine spürbare Verbessrung mehr bringen.
Gruß Daniel
Anzeige
AW: Spalten ausblenden zu langsam
06.03.2023 21:19:12
Thomas
Hallo Daniel,
besten dank das du dein Vorschlag noch gepostet hast.
Diese Verbesserung baue ich sehr gern noch mit ein.
besten dank dafür
mfg thomas
AW: Spalten ausblenden zu langsam
07.03.2023 17:09:56
Thomas
Hallo Daniel,
ich habe jetzt deine erweiterte Version auf Herz und Nieren getestet.
Du hast recht es ist wirklich deutlich schneller.
Besten dan nochmal dafür.
mfg thomas

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige