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

Makro nur auf gefilterte Zellenanwenden

Forumthread: Makro nur auf gefilterte Zellenanwenden

Makro nur auf gefilterte Zellenanwenden
13.03.2017 14:11:23
Marcel
Hallo zusammen,
ich habe ein Makro, dass aber nur auf die über eine Auswahl vorgenommenen Zellen angewandt werden soll. Ich denke, die SpecialCells(xlCellTypeVisible) könnte die Lösung sein aber ich weiß nicht wie ich das richtig einbinde.
Bei einem anderen Makro wurde mir hier geholfen aber das bekomme ich bei dem neuen Makro nicht hin: https://www.herber.de/forum/archiv/1544to1548/t1546603.htm#1546603
Hier das Makro, bei dem ich es nicht hinbekomme:
Sub Neu_formatieren()
Dim lngRow As Long
Dim lngColumn As Long
Dim lngRowgesamt As Long
Dim Bereich As Range
Dim Gesamt As Range
Cells(1, 1) = "Bild"
For lngColumn = 1 To 8000
Columns("A:A").ColumnWidth = 24 'Bild
Next
For lngRow = 2 To 8000
If Trim$(Cells(lngRow, 2).Text)  "" Then
Rows(lngRow).RowHeight = 129.75 'Definiert die Höhe der Zellen
Else
lngRowgesamt = lngRow
Exit For 'Verlässt die For Schleife bei nicht vorhandenen Werten
End If
Next
'Artikelnummer formatieren
Range("B:B").Select
Selection.NumberFormat = "0#\.####\.####"
End Sub
Danke und Grüße
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro nur auf gefilterte Zellenanwenden
13.03.2017 14:47:31
Daniel
Hi
naja, zunächst einmal solltet du anfangen, beim Programmieren mitzudenken.
ich denke, dass man auch bei geringen Programmierkenntnissen von alleine darauf kommen kann, dass es ausreicht, eine Spaltenbreite 1x einzustellen und das es nicht notwendig ist, dies 8000x hintereinander zu tun.
ansonsten ändere den Code so ab:
alter Code
For lngRow = 2 To 8000
If Trim$(Cells(lngRow, 2).Text)  "" Then
Rows(lngRow).RowHeight = 129.75 'Definiert die Höhe der Zellen
Else
lngRowgesamt = lngRow
Exit For 'Verlässt die For Schleife bei nicht vorhandenen Werten
End If
Next
neuer Code
Each Zelle In Range("B2:B8000").SpecialCells(xlcelltypevisible)
If Trim$(Zelle.Text)  "" Then
Zelle.EntireRow.RowHeight = 129.75 'Definiert die Höhe der Zellen
Else
lngRowgesamt = lngRow
Exit For 'Verlässt die For Schleife bei nicht vorhandenen Werten
End If
Next
gruß Daniel
Anzeige
AW: Makro nur auf gefilterte Zellenanwenden
13.03.2017 17:47:46
Marcel
Danke für den "Rüffel" - ist korrigiert und auch danke für die Anpassung!
Anzeige
Anzeige

Infobox / Tutorial

Makro nur auf gefilterte Zellen anwenden


Schritt-für-Schritt-Anleitung

Um ein Makro nur auf gefilterte Zellen anzuwenden, kannst du die SpecialCells(xlCellTypeVisible) Methode verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub Neu_formatieren()
       Dim lngRow As Long
       Dim Bereich As Range
    
       ' Setze den Bereich auf die gefilterten Zellen in Spalte B
       On Error Resume Next
       Set Bereich = Range("B2:B8000").SpecialCells(xlCellTypeVisible)
       On Error GoTo 0
    
       ' Überprüfen, ob der Bereich nicht leer ist
       If Not Bereich Is Nothing Then
           For Each Zelle In Bereich
               If Trim$(Zelle.Text) <> "" Then
                   Zelle.EntireRow.RowHeight = 129.75 'Definiert die Höhe der Zellen
               End If
           Next
       End If
    
       ' Artikelnummer formatieren
       Range("B:B").NumberFormat = "0#\.####\.####"
    End Sub
  4. Führe das Makro aus: Drücke F5 oder gehe zurück zu Excel und führe das Makro über Entwicklertools > Makros aus.


Häufige Fehler und Lösungen

Fehler 1: "Laufzeitfehler 1004: Die Methode 'SpecialCells' für das Objekt 'Range' ist fehlgeschlagen."

Lösung: Stelle sicher, dass du tatsächlich gefilterte Daten hast. Wenn keine Zellen sichtbar sind, wird dieser Fehler angezeigt.

Fehler 2: "Das Makro wird auf alle Zellen angewendet, nicht nur auf die gefilterten."

Lösung: Überprüfe, ob du SpecialCells(xlCellTypeVisible) korrekt anwendest. Achte darauf, dass der Bereich nur die gefilterten Zellen umfasst.


Alternative Methoden

Wenn du nicht mit Makros arbeiten möchtest, kannst du die Excel-Formel verwenden, um nur auf gefilterte Daten zuzugreifen. Eine Möglichkeit ist, die AGGREGAT-Funktion zu nutzen. Diese funktioniert gut, um nur die sichtbaren Zellen zu summieren oder zu zählen.

Beispiel:

=AGGREGAT(9; 5; B2:B8000)

In diesem Beispiel zählt die Funktion nur die sichtbaren Zellen im angegebenen Bereich.


Praktische Beispiele

Hier sind einige praktische Beispiele für die Anwendung des Makros:

  1. Zeilenhöhe anpassen: Wenn du eine Tabelle mit Bildern hast, kannst du die Zeilenhöhe nur für sichtbare Zeilen anpassen, um sicherzustellen, dass alles übersichtlich bleibt.

  2. Datenformatierung: Verwende das Makro, um nur die gefilterten Artikelnummern zu formatieren, wodurch das Dokument lesbarer wird.


Tipps für Profis

  • Verwende Fehlerbehandlung: Implementiere On Error Resume Next und On Error GoTo 0, um Laufzeitfehler zu vermeiden.
  • Optimierung des Codes: Minimiere die Anzahl der Schleifen, indem du sicherstellst, dass du nur einmal die Spaltenbreite festlegst.
  • Dokumentation des Codes: Kommentiere deinen Code gut, damit du und andere ihn später leichter verstehen können.

FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, um andere Spalten zu bearbeiten? Du kannst die Range in den Codezeilen einfach ändern, z.B. Range("C2:C8000"), um auf eine andere Spalte zuzugreifen.

2. Funktioniert das Makro auch in Excel 365? Ja, das Makro ist mit Excel 365 kompatibel. Stelle sicher, dass du die richtigen Berechtigungen zum Ausführen von Makros hast.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige