Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Variable erste Zeile ermitteln

Forumthread: Variable erste Zeile ermitteln

Variable erste Zeile ermitteln
31.08.2016 11:47:30
Harald
Hallo liebe Forums-Mitglieder,
hoffe auf Eure Hilfe für folgendes Problem, bei dem leider meine VBA-Kenntnisse nicht ausreichen.
Ich habe eine Arbeitsmappe mit ca. 60 Tabellenblättern, die jeweils 50 Spalten und über 200 Zeilen an Daten beinhalten.
Allen Tabellenblättern ist gleich, dass die ersten 28 Zeilen identisch sind, unterschiedlichste Daten ab Zeile 29 eingetragen sind.
Nun zum Problem:
Per VBA setze ich Autofilter und kopiere entsprechende Bereiche in eine neue Datei, was soweit gut funktioniert.
Da die Daten unterschiedlich sind, beginnt der gefilterte Datenbereich aber nicht immer bei Zeile 29, sondern in sehr unterschiedlichen Zeilen.
Aktuell habe ich in meinem VBA-Code die Zeilennummer händisch eingetragen, sobald sich aber Daten ändern, stimmt dies evtl. nicht mehr und ich muss das manuell korrigieren.
Wie kann ich das also lösen, dass bei gesetztem Autofilter automatisch ab der ersten (gefilterten) Zeile markiert und kopiert wird.
Vielen Dank schonmal für Eure Hilfe
Harald
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variable erste Zeile ermitteln
31.08.2016 13:16:34
ChrisL
Hi Harald
Ermittelt die Titelzeile vom Filterbereich:
MsgBox ActiveSheet.AutoFilter.Range(1).Row
Und hier die erste sichtbare Zeile vom Filterbereich:
Sub ttt()
MsgBox GetFilteredRangeTopRow
End Sub

Function GetFilteredRangeTopRow() As Long
Dim HeaderRow As Long, LastFilterRow As Long
On Error GoTo NoFilterOnSheet
With ActiveSheet
HeaderRow = .AutoFilter.Range(1).Row
LastFilterRow = .Range(Split(.AutoFilter.Range.Address, ":")(1)).Row
GetFilteredRangeTopRow = .Range(.Rows(HeaderRow + 1), .Rows(Rows.Count)).SpecialCells( _
xlCellTypeVisible)(1).Row
If GetFilteredRangeTopRow = LastFilterRow + 1 Then GetFilteredRangeTopRow = 0
End With
NoFilterOnSheet:
End Function
Quelle: http://www.mrexcel.com/forum/excel-questions/562603-select-first-visible-cell-under-header-row-after-applying-autofilter.html
cu
Chris
Anzeige
AW: Variable erste Zeile ermitteln
31.08.2016 13:44:06
Harald
Hallo Chris,
vielen Dank für die schnelle Hilfe, das sieht ja schonmal super aus und erfüllt seinen Zweck!
Bevor ich mir nun noch abschließend den Wolf probiere die Frage, wie ich das Ergebnis in eine Variable bekomme, um es dann in einem Range-Object weiter zu verwenden?
Vielen vielen Dank
Harald
Anzeige
AW: Variable erste Zeile ermitteln
31.08.2016 13:52:21
ChrisL
Hi Harald
x = ActiveSheet.AutoFilter.Range(1).Row
oder
y = GetFilteredRangeTopRow
cu
Chris
AW: Variable erste Zeile ermitteln
31.08.2016 13:54:03
Harald
Jo, Lösung lag ja schon vor mir........ ;-)
Nochmals besten Dank! :-)
Harald
AW: Variable erste Zeile ermitteln
31.08.2016 15:52:23
Harald
Hab das jetzt mal in die bestehenden Makros eingebaut und es funktioniert perfekt!
Vielen Dank für die schnelle und kompetente Hilfe :-)
Harald
Anzeige
;
Anzeige

Infobox / Tutorial

Variable erste Zeile ermitteln in Excel


Schritt-für-Schritt-Anleitung

Um die erste sichtbare Zeile nach dem Anwenden eines Autofilters in Excel zu ermitteln, kannst du folgenden VBA-Code verwenden:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf VBAProject und wähle Einfügen > Modul.
  3. Füge den folgenden Code ein:

    Function GetFilteredRangeTopRow() As Long
       Dim HeaderRow As Long, LastFilterRow As Long
       On Error GoTo NoFilterOnSheet
       With ActiveSheet
           HeaderRow = .AutoFilter.Range(1).Row
           LastFilterRow = .Range(Split(.AutoFilter.Range.Address, ":")(1)).Row
           GetFilteredRangeTopRow = .Range(.Rows(HeaderRow + 1), .Rows(Rows.Count)).SpecialCells( _
           xlCellTypeVisible)(1).Row
           If GetFilteredRangeTopRow = LastFilterRow + 1 Then GetFilteredRangeTopRow = 0
       End With
    NoFilterOnSheet:
    End Function
  4. Rufe die Funktion auf:

    • Du kannst die Funktion in einem Sub verwenden, um die erste sichtbare Zeile zu ermitteln:
    Sub Test()
       MsgBox GetFilteredRangeTopRow
    End Sub
  5. Führe das Makro aus:

    • Drücke F5, um das Makro auszuführen und die erste sichtbare Zeile zu sehen.

Häufige Fehler und Lösungen

  • Fehler: "No Filter on Sheet":

    • Wenn du diesen Fehler erhältst, bedeutet das, dass kein Autofilter auf dem aktiven Blatt angewendet ist. Stelle sicher, dass der Autofilter aktiv ist.
  • Lösung für falsche Zeilen:

    • Überprüfe, ob die Daten korrekt gefiltert sind. Der Code funktioniert nur, wenn der Autofilter richtig angewendet wurde und sichtbar ist.

Alternative Methoden

Eine alternative Methode zur Ermittlung der ersten sichtbaren Zeile könnte die Verwendung von Excel-Formeln sein. Du könntest die Funktion AGGREGAT nutzen, um die erste sichtbare Zeile zu finden:

=AGGREGAT(15, 6, A29:A100/(A29:A100<>""), 1)

Diese Formel findet die erste nicht-leere Zelle in einem bestimmten Bereich und könnte als Alternative zur VBA-Lösung dienen.


Praktische Beispiele

Angenommen, du hast eine Tabelle mit Verkaufsdaten. Wenn du den Autofilter anwendest, um nur Verkäufe bestimmter Produkte anzuzeigen, könntest du den VBA-Code verwenden, um die erste sichtbare Zeile zu ermitteln und diese dann für weitere Datenanalysen verwenden.

Sub CopyFilteredData()
    Dim startRow As Long
    startRow = GetFilteredRangeTopRow
    If startRow > 0 Then
        Range("A" & startRow & ":E" & Cells(Rows.Count, 1).End(xlUp).Row).Copy Destination:=Sheets("Zielblatt").Range("A1")
    End If
End Sub

Dieses Beispiel kopiert alle gefilterten Daten in ein anderes Blatt.


Tipps für Profis

  • Verwende Fehlerbehandlung:

    • Füge On Error Resume Next ein, um sicherzustellen, dass dein Makro nicht bei einem Fehler abbricht.
  • Optimiere die Leistung:

    • Bei großen Datenmengen kann es sinnvoll sein, den Autofilter zu deaktivieren, bevor du die Daten kopierst, um die Leistung zu verbessern.

FAQ: Häufige Fragen

1. Wie kann ich die erste sichtbare Zeile in einer anderen Excel-Version ermitteln? Die oben beschriebenen Methoden funktionieren in Excel 2010 und späteren Versionen. Achte darauf, dass der Autofilter aktiv ist.

2. Kann ich diese Methode auch in einer anderen Programmiersprache verwenden? Ja, die Logik kann in anderen Sprachen wie Python (z.B. mit openpyxl) umgesetzt werden, erfordert jedoch andere Syntax und Methoden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige