Supportnet / Forum / Tabellenkalkulation
Autofilter ergibt falsche Ergebnisse
Frage
Hallo Gemeinde!
Ich habe da schon wieder ein Problem!
Ich sortiere per AutoFilter meine Datenbank.
Kriterien der Spalte Q:
1. --> Werte mit 2 oder 4
2. --> Werte mit 3 oder 5
Beide Auswertungen kopiere ich in unterschieliche Arbeitmappen.
Mein alter Datensatz erthält 530 Zeilen!
Wenn ich jedoch den Datensatz verändere (mehr oder weniger Zeilen) stimmt der Filter nicht mehr. Ich erhalte Tabellen, in denen die Werte 2, 3, 4, und 5 vorhanden sind.
Mein Makro lautet:
[code]Sub Datentrennung()
' Tastenkombination: Strg+j
'
Sheets("Daten Agenda").Select
Rows("1:1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=17, Criteria1:="=2", Operator:=xlOr, _
Criteria2:="=4"
Columns("A:J").Select
Selection.Copy
Sheets("Daten Kosten").Select
Range("A1").Select
ActiveSheet.Paste
Range("Q2").Select
' Tastenkombination: Strg+ö
'
Sheets("Daten Agenda").Select
Application.CutCopyMode = False
Rows("1:1").Select
Selection.AutoFilter
' Tastenkombination: Strg+l
'
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Daten Agenda").Select
Rows("1:1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=17, Criteria1:="=3", Operator:=xlOr, _
Criteria2:="=5"
Columns("A:J").Select
Selection.Copy
ActiveWindow.ScrollWorkbookTabs Sheets:=12
Sheets("Daten Erlöse").Select
Range("A1").Select
ActiveSheet.Paste
ActiveWindow.SmallScroll ToRight:=13
Range("Q2").Select
' Tastenkombination: Strg+r
'
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Daten Agenda").Select
Rows("1:1").Select
Selection.AutoFilter
Range("A1").Select
Sheets("Deckblatt").Select
End Sub[/code]
Wo liegt hier der Fehler und wie kann ich das veinfachen, damit bei variablen Datensatz der Fehler nicht wieder auftaucht?
Danke und Gruss
Ines
Antwort 1 von Frank_Br
Hallo Ines,
für Dein Problem gibt es aus meiner Sicht nur eine Ursache, wenn Du den Datensatz verändertest (mehr oder weniger Zeilen), dann gab es leere Zeilen im gesamten Datensatz, das mag der Filter nicht und zeigt falsche Ergebnisse.
Also:
Du kannst in Deiner Datenbank alles verändern, nur es darf zwischendurch keine leeren Zeilen geben, bzw. es muss in jeder Zeile mindestens ein Eintrag in irgendeiner Spalte innerhalb Deiner Datenbank (Spalte A bis Q) geben.
Ein gültiger Eintrag darf auch aus einer Null oder einem Leerzeichen bestehen.
Tipp:
Bevor Du den Autofilter setzt, sortiere die Datenbank (Sheet Daten Agenda) per VBA-Code.
Einfach so, z.B. Sortieren entsprechend Daten in Spalte 1 (Range("A2") aufsteigend :
Sub SortiereDatenbank()
Range("A2:Q16").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
End Sub
Tschüs, Frank
für Dein Problem gibt es aus meiner Sicht nur eine Ursache, wenn Du den Datensatz verändertest (mehr oder weniger Zeilen), dann gab es leere Zeilen im gesamten Datensatz, das mag der Filter nicht und zeigt falsche Ergebnisse.
Also:
Du kannst in Deiner Datenbank alles verändern, nur es darf zwischendurch keine leeren Zeilen geben, bzw. es muss in jeder Zeile mindestens ein Eintrag in irgendeiner Spalte innerhalb Deiner Datenbank (Spalte A bis Q) geben.
Ein gültiger Eintrag darf auch aus einer Null oder einem Leerzeichen bestehen.
Tipp:
Bevor Du den Autofilter setzt, sortiere die Datenbank (Sheet Daten Agenda) per VBA-Code.
Einfach so, z.B. Sortieren entsprechend Daten in Spalte 1 (Range("A2") aufsteigend :
Sub SortiereDatenbank()
Range("A2:Q16").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
End Sub
Tschüs, Frank
Antwort 2 von Ines
Hallo Frank!
Was muss ich den in meinem Code ändern, das der Filter nur bis in die letzte Zeile des Datensatzes greift? (Etwas wie: Bereich makieren bis letzte Zeile)Dann wäre das Problem mit den Leerzeilen, denk ich, schon behoben.
Gruss
Ines
Was muss ich den in meinem Code ändern, das der Filter nur bis in die letzte Zeile des Datensatzes greift? (Etwas wie: Bereich makieren bis letzte Zeile)Dann wäre das Problem mit den Leerzeilen, denk ich, schon behoben.
Gruss
Ines
Antwort 3 von Frank_Br
Hallo Ines,
hast Du denn nicht mal probehalber meinen Code-Vorschlag bei Dir eingebaut? Dann sollte es klappen! Allerdings mit einer Korrektur, siehe unten.
Jedesmal, wenn in Deinem Code die Zeile:
Sheets("Daten Erlöse").Select
auftaucht, müßtest Du dahinter diese Zeilen einfügen:
Range("A2:Q65536").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
Wieviele Zeilen Deine Datenbank enthält, spielt dann keine Rolle mehr weil bis zum Ende sortiert wird.
Dann greift auch Dein Filter richtig.
Tschüs, Frank
hast Du denn nicht mal probehalber meinen Code-Vorschlag bei Dir eingebaut? Dann sollte es klappen! Allerdings mit einer Korrektur, siehe unten.
Jedesmal, wenn in Deinem Code die Zeile:
Sheets("Daten Erlöse").Select
auftaucht, müßtest Du dahinter diese Zeilen einfügen:
Range("A2:Q65536").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
Wieviele Zeilen Deine Datenbank enthält, spielt dann keine Rolle mehr weil bis zum Ende sortiert wird.
Dann greift auch Dein Filter richtig.
Tschüs, Frank
Antwort 4 von Ines
Danke für die Antwort, Frank!
Ich habe da im Moment noch was am Wickel, wenn das auch nicht klappt, komme ich vielleicht auf Deine Variante zurück!
Ines
PS: Weißt Du, ob man bei Pivot-Tabellen das "Summe von..." vor definieren kann? Grundeinstellung scheint "Anzahl von" zu sein.
Ich habe da im Moment noch was am Wickel, wenn das auch nicht klappt, komme ich vielleicht auf Deine Variante zurück!
Ines
PS: Weißt Du, ob man bei Pivot-Tabellen das "Summe von..." vor definieren kann? Grundeinstellung scheint "Anzahl von" zu sein.