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

Korrektes Filtern

Korrektes Filtern
19.11.2020 09:30:59
EasyD
Hallo liebes Forum
Unten stehende Prozedur filtert mit ein Blatt (Formeln) und kopiert die gefilterten Ergebnisse auf ein anderes (Ex).
Die Prozedur läuft innerhalb einer Schleife, welche mir in Zelle A5 auf dem Blatt Stamm mit jedem Durchlauf einen anderen Wert schreibt, nach welchem dann auf dem Blatt Formeln gefiltert werden soll (Filed 7). Zusätzlich werden alle Zeilen raus gefiltert, die in der Spalte A (Field 1) einen Nullwert haben.
So weit der Plan.
Leider produziert mir das Ganze einen "Überlauf".
Ich weiß erstens gar nicht, was das bedeutet und zweites verstehe ich nicht, warum der Code so nicht funktionieren soll. Schließlich sage ich ja nur, kopiere mir nur, wenn du mehr als eine Zeile gefunden/gefiltert hast (also wenn nicht ALLE Zeilen Nullwerte haben).
Danke für eure Ideen dazu!
Sub Filter_ESM()
Sheets("Formeln").Activate
'alle filtern nach BK und ohne Nullbeträge
Columns("A:I").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$I$100000").AutoFilter Field:=7, Criteria1:=Sheets("Stamm").Range(" _
A5").Value
'Filterkriterium ist der nach Schleifendurchlauf neu rein geschriebene BK in A5
ActiveSheet.Range("$A$1:$I$100000").AutoFilter Field:=1, Criteria1:="0", _
Operator:=xlAnd
'kopieren und auf Ex einfügen
'' Versuch bei 0-Filter das kopieren zu verhindern - hier hab ich dann den Fehler
If Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Count > 1  _
Then
Selection.Copy
Sheets("Ex").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Filter wieder aus schalten
Sheets("Formeln").Select
Application.CutCopyMode = False
Selection.AutoFilter
Else
Exit Sub
End If
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Korrektes Filtern
19.11.2020 10:20:54
Daniel
Hi
das Problem ist folgendes:
wenn du das .SpecialCells(xlcelltypevisible) auf genau eine Zelle anwendest, dann geht Excel davon aus, dass das nicht so gemeint sein kann und erweitert automatisch auf alle Zellen des Blatts.
allerdings hat Excel mehr Zellen (2^34) als es normalerweise Zählen kann (verwendet wird fürs .Count der Datentyp LONG der bis 2^31-1 definiert ist), daher der Überlauf (wenn man alle Zellen zählen will, kann man .CountLarge verwenden, das hat einen größeren zulässigen Bereich)
und genau das passiert, wenn außer der Überschrift alle Zeilen ausgeblendet sind:
Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row) ist dann nur die Zelle A1 und damit werden dann alle Zellen auf dem Blatt mit berücksichtigt.
die Abhilfe wäre, dass du einfach prüfst, in welche Zeile das End(xlup) springt, denn ausgeblendete Zeilen werden übersprungen:
If Cells(Rows.Count, 1).End(xlup).Row > 1 then
hier der Code zum kopieren
End if

gruß Daniel
Anzeige
AW: Korrektes Filtern
19.11.2020 10:43:17
EasyD
Hallo Daniel,
Danke für's Feedback!
Scheint zu funktionieren, jetzt habe ich nur ein anderes Problem beim Filtern mit dem Field7 (das Feld, für das ich mir vorher in der Schleife einen neuen Wert in A5 ermittelt habe), das ist aber ein anderes Thema und hat mit der Fragestellung nichts zu tun - jetzt kopiert er mir trotzdem für jedes Filterergebnis in Field7 die kompletten Werte und am Ende habe ich das gleiche Kopierergebnis mehrfach, trotz unterschiedlicher Werte in A5
Ich probiere weiter.
Frage zum Verständnis:
"Überlauf" bedeutet also, ich versuche Excel zu zwingen die Rechen-Operation häufiger/länger auszuführen als es tatsächlich kann?
Und indem ich die Zählmethodik eben NICHT auf .SpecialCells(xlcelltypevisible) definiere - also nur sichtbare Zellen - festlege, erreiche ich, dass Excel überhaupt erstmal erkennt dass es ausgeblendete Zeilen gibt und dass diese nicht mitgezählt werden sollen?
Anzeige
AW: Korrektes Filtern
19.11.2020 11:04:10
Daniel
Hi
Überlauf ist folgendes:
VBA arbeitet mit unterschiedlichen Datentpyen (Byte, Integer, Long, Single, Double, DoubleDouble)
diese werden für die Deklaration von Variablen verwendet, aber auch die Internen Berechnungen (so wie Count, oder Berechnungen mit Zahlwerten direkt) werden diese Typen angewendet.
jeder Typ hat einen bestimmten Wertebereich, den er erfassen kann.
Einen Überlauf bekommst du immer dann, wenn eine Zahl ins spiel kommt die größer ist als dieser Wertebereich.
Beispielsweise geht Excel davon aus, dass wenn du zwei Integerzahlen mit einander multiplizerst, dass das Ergebnis wieder Integer ist. Integer hat aber den Wertebereich von -2^15 bis 2^15-1 (-32768 bis 32767)
rechnest du also 2*17000 bekommst du einen Überlauf, weil ein Integer als Ergebnis erwartet wird, das Ergebnis aber größer ist als der Wertebereich von Integer.
rechnest du hingegen 2/1*17000, so wird dieses Ergebnis berechnet, weil aufgrund der Division das Ergebnis Double oder Single sein muss und somit das Ergebnis innerhalb des Wertebereichs liegt.
Gruß Daniel
Anzeige
AW: Korrektes Filtern
19.11.2020 11:36:31
EasyD
Klasse Daniel,
vielen Dank!
das werd ich mir tatsächlich mal ausdrucken ;)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige