Autofilterung-Danach angezeigte Zeilen zählen
12.12.2003 12:26:18
Norbert
Ich benötige bitte wieder mal eure Hilfe, um ein Skript zu verbessern.
Es geht um folgendes:
In einem VBA-Skipt sortiere und berechne (Daten/Teilergebnisse/Unter Verwendung von Summe) ich Werte in einem Tabellenblatt, in dem sich viele Daten befinden und immer wieder Daten hinzukommen. Dann verwende ich noch den Autofilter (in Zeile 1) zum Filtern.
Dann lasse ich einen Zeilenzähler laufen, der die Zeilen bis zur ersten Leerzeile in Spalte F zählt.
Danach lasse ich eine Schleife (von 2 bis Zeilenzähler) laufen, in der ich in der Spalte I und M nach gewissen Einträgen suche.
Das funktioniert so recht gut, aber Excel-VBA zählt nach dem Erstellen der Teilergebnisse und nach der Autofilterung ALLE Zeilen durch; so bekomme ich einen wertmäßig sehr großen Zeilenzähler, obwohl am Tabellenblatt vielleicht durch den Autofilter nur mehr wenige Zeilen überbleiben.
Das Problem ist nun klar: Wenn ich also mal eine Zeilenzahl von z.B. 2000 habe und dann Autofiltere, und danach nur mehr vielleicht 60 Zeilen sichtbar sind, weil genau diese mich interessieren, werden trotzdem 2000 Zeilen gezählt und die for-Schleife wird 2000 mal durchlaufen! Das dauert dann immer länger.
Gibt es nun eine Möglichkeit, wie ich nach einer mehrfachen Autofilterung, die tatsächlich sichtbaren Zeilen (Anzahl unbekannt) zählen lassen kann, weil die andern ja offensichtlich nur ausgeblendet werden?
Unten ein Teil des Skripts zum besseren Verständnis.
Ich bitte auch um genaue (verständliche) Skriptangabe, weil ich mich in VBA noch nicht gut auskenne. Die Skriptteile unten sind großteils auch von Forumteilnehmern, die mir sehr weitergeholfen haben.
Danke im Voraus,
LG Norbert
' Zeilenzaehler z in teilergebnisgefilterter Tabelle laufen lassen
Sheets("ET").Activate
Sheets("ET").Range("F2").Select
z = 1
While IsEmpty(ActiveCell.Value) = False
ActiveCell.Offset(1, 0).Select
z = z + 1
Wend
' Relevante Werte aus Spalte I und Spalte M in Variablen ablegen
For m = 2 To z
Select Case Sheets("ET").Cells(m, 6)
Case "0A Ergebnis"
OA = Sheets("ET").Range("I" & m & "").Value
OA_V = Sheets("ET").Range("M" & m & "").Value
Usw.