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

Forumthread: VBA Autofit nur auf sichtbare Zellen anwenden

VBA Autofit nur auf sichtbare Zellen anwenden
22.07.2014 06:32:41
Peter
Hallo liebe Excel Gemeinde,
hat einer von euch einen VBA code für die Autofit Funktion für nur eingeblendete Zellen.
Folgender Fall:
In den Zellen der sichtbare Spalten befindet sich meist ein nur einzeiliger Text. (Spalten A:B)
Es sind einige Spalten ausgeblendet. (Spalten C:E )
In den ausgeblendeten Spalten befindet sich sehr viel Text.
Wenn man nun den Text per Autofit VBA code:

Rows("5:10000").EntireRow.AutoFit

werden die Texte in den augeblendeten Spalten mit berücksichtigt und die Höhe der Zeilen danach eingestellt.
Ziel ist es aber, dass durch einen speziellen VBA Autofit code die Zeilen nur die Höhe des sichtbaren Textes haben, der in Spalte A oder B ist.
Dadurch sind mehr Zeilen auf den Monitor darstellbar.
Da die Datei viele Zeilen hat (10000) kommt eine FOR NEXT Schleife, die die Höhe per definierte Spalte genau einstellt nicht in Betracht. Dauert einfach zu lange.
Was ich schon im Internet gefunden habe und nicht (bei mir) funktioniert:

Rows("5:10000").SpecialCells(xlCellTypeVisible).Rows.AutoFit
Range("A5:B10000").Rows.AutoFit
habt ihr noch eine Idee die die Zeilenhöhe schnell einstellen lässt?
Gruß Peter

Anzeige

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

Betreff
Datum
Anwender
Anzeige
quick and dirty gefällig?
22.07.2014 07:57:36
Klaus
Hallo Peter,
statt dich mit den Spezifiaktionen von AutoFit herumzuärgern ...
-kopiere alle Spalteninhalte der nicht-zu-beachten Spalten in ein seperates temp-Blatt
-lösche die Spalten im Hauptblatt
-lass AutoFit laufen wie es ist
-kopiere den Inhalt des temp-Blattes zurück
das ist quick-and-dirty, sollte aber zum Ziel führen.
Ich lasse den Beitrag noch offen, in der Hoffnung auf einen eleganteren Lösungsvorschlag.
Grüße,
Klaus M.vdT.

Anzeige
AW: quick and dirty gefällig?
22.07.2014 10:57:45
Peter
Hallo Klaus,
danke für die Antwort. Das funktioniert!
Deine Antwort hat mich aber auch auf den richtigen Pfad gebracht, warum die benannten Autofitfunktionen bei nicht funktionieren.:
Ich habe Übersehen, dass bei den Zellen der versteckten Spalten die der Zeilenumbruch aktiviert war! Diesen habe ich nun rausgenommen und siehe da autfit funktioniert!
Trotzdem danke für deine Hilfe.
Gruß Peter

Anzeige
VBA Autofit nur auf sichtbare Zellen anwenden
22.07.2014 12:08:26
fcs
Hallo Peter, hallo Klaus,
wenn ganze Spalten ein-/ausgeblendet werden, dann könnte man es wie folgt lösen.
Das Makro hebt den Textumbruch auf, wenn die entsprechenden Spalten ausgeblendet sind.
Sind die Spalten sichtbar, dann wird der Textumbruch in den Zellen wieder gesetzt.
Gruß
Franz
'Beispiele für Aufruf des Makros
Sub AutofitSpecial_Activesheet()
'AutofitSpezial im aktiven Tabellenblatt in Spalten C (3) und D (4) anwenden
Call prcAutoFitRows_Spezial(arrSpalten:=Array(3, 4), Zeile_1:=5)
End Sub
Sub AutofitSpecial_Tabelle1()
'AutofitSpezial in Tabelle1  in Spalten C (3) und D (4) anwendenanwenden
Call prcAutoFitRows_Spezial(arrSpalten:=Array(3, 4), Zeile_1:=5, wks:=Worksheets("Tabelle1"))
End Sub
'Code in einem allgemeinen Modul
'Makro für spezielen Autofit
Sub prcAutoFitRows_Spezial(arrSpalten As Variant, Optional Zeile_1 As Long = 1, _
Optional wks As Worksheet)
Dim Spalte As Long
'arrSpalten = Array mit den Nummern der Spalten, die für Row-Autofit ausgeblendet _
sein können
'Zeile_1    = Zeile ab der Autofit für Zeilen ausgeführt werden soll
'wks        = Tabellenblatt in dem AutofitSpezial angewendet werden soll
If wks Is Nothing Then Set wks = ActiveSheet
Application.ScreenUpdating = False
With wks
For Spalte = LBound(arrSpalten) To UBound(arrSpalten)
With .Range(.Cells(Zeile_1, arrSpalten(Spalte)), .Cells(.Rows.Count, arrSpalten( _
Spalte)))
If .EntireColumn.Hidden = True Then
.EntireColumn.Hidden = False
.WrapText = False
.EntireColumn.Hidden = True
Else
.WrapText = True
End If
End With
Next
.Range(.Rows(Zeile_1), .Rows(.Rows.Count)).EntireRow.AutoFit
End With
Application.ScreenUpdating = True
End Sub

Anzeige
AW: VBA Autofit nur auf sichtbare Zellen anwenden
23.07.2014 03:16:33
Peter
Hallo Franz,
das ist natürlich eleganter (ツ).
Super vielen Dank!
Gruß Peter
;
Anzeige
Anzeige

Infobox / Tutorial

VBA Autofit nur auf sichtbare Zellen anwenden


Schritt-für-Schritt-Anleitung

Um die AutoFit-Funktion nur auf sichtbare Zellen in Excel anzuwenden, kannst du den folgenden VBA-Code nutzen. Dieser Code stellt sicher, dass nur die Höhe der Zeilen angepasst wird, in denen sichtbare Zellen vorhanden sind.

Sub AutofitVisibleRows()
    Dim rng As Range
    On Error Resume Next
    Set rng = Rows("5:10000").SpecialCells(xlCellTypeVisible)
    On Error GoTo 0
    If Not rng Is Nothing Then
        rng.Rows.AutoFit
    End If
End Sub
  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.
  3. Füge den obigen Code in das Modul ein.
  4. Schließe den VBA-Editor und kehre zu Excel zurück.
  5. Drücke ALT + F8, wähle AutofitVisibleRows und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: Der Code funktioniert nicht, wenn die Zeilenumbruch-Option aktiviert ist.

    • Lösung: Stelle sicher, dass der Zeilenumbruch in den Zellen deaktiviert ist. Du kannst dies in den Zellen über die Formatierungsoptionen in Excel überprüfen.
  • Fehler: SpecialCells gibt einen Fehler aus.

    • Lösung: Stelle sicher, dass es sichtbare Zellen in dem angegebenen Bereich gibt. Der Code behandelt diesen Fehler, indem er die Fehlerbehandlung verwendet.

Alternative Methoden

Wenn du eine andere Vorgehensweise bevorzugst, kannst du die Inhalte der ausgeblendeten Spalten in ein temporäres Arbeitsblatt kopieren, um die AutoFit-Funktion dann anzuwenden. Hier ist eine schnelle Methode:

  1. Kopiere alle Inhalte der ausgeblendeten Spalten in ein temporäres Blatt.
  2. Lösche die ausgeblendeten Spalten im Hauptblatt.
  3. Führe die AutoFit-Funktion aus:
    Rows("5:10000").EntireRow.AutoFit
  4. Kopiere den Inhalt zurück ins Hauptblatt.

Praktische Beispiele

Hier ist ein Beispiel für die Verwendung des Autofit-Codes in einem spezifischen Arbeitsblatt:

Sub AutofitExample()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Tabelle1")
    ws.Rows("5:10000").SpecialCells(xlCellTypeVisible).Rows.AutoFit
End Sub

Du kannst den Namen des Arbeitsblatts in der Variable ws anpassen, um sicherzustellen, dass der Code auf das richtige Blatt angewendet wird.


Tipps für Profis

  • Verwende Application.ScreenUpdating = False: Um die Ausführungsgeschwindigkeit zu erhöhen, kannst du diese Zeile hinzufügen, bevor du den Code ausführst. Dies verhindert das ständige Aktualisieren des Bildschirms.

  • Verwende Cells.WrapText: Stelle sicher, dass der Zeilenumbruch für die gewünschten Zellen aktiviert oder deaktiviert ist, bevor du die AutoFit-Funktion aufrufst.

  • Makro Automatisierung: Du kannst das Makro auch an ein Ereignis binden, z.B. beim Öffnen der Datei oder Ändern von Zellen.


FAQ: Häufige Fragen

1. Frage: Funktioniert der Code in allen Excel-Versionen?
Antwort: Ja, der Code funktioniert in den meisten modernen Excel-Versionen, die VBA unterstützen, einschließlich Excel 2010 und neuer.

2. Frage: Was ist der Vorteil der Verwendung von SpecialCells?
Antwort: Die Verwendung von SpecialCells ermöglicht es dir, nur mit den sichtbaren Zellen zu arbeiten, was die Effizienz erhöht und sicherstellt, dass keine ausgeblendeten Daten die Ergebnisse beeinflussen.

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