Excel 2007. Nichtbenötigte Zeilen und Spalten entfernen.

Dieses Thema Excel 2007. Nichtbenötigte Zeilen und Spalten entfernen. im Forum "Microsoft Office Suite" wurde erstellt von misch, 30. März 2012.

Thema: Excel 2007. Nichtbenötigte Zeilen und Spalten entfernen. Hallo und guten Tag, gibt es eine Möglichkeit aus einem Excel-Dokument nicht benötigte Zeilen und Spalten zu...

  1. Hallo und guten Tag,
    gibt es eine Möglichkeit aus einem Excel-Dokument nicht benötigte Zeilen und Spalten zu entfernen? Mit der einfachen Funktion Zeile löschen lässt sich wohl eine einzelne Zeile löschen, aber die Gesamtzahl der Zeilen im Dokument bleibt gleich. Dadurch wird der Umfang der Datei unnötig groß.
    Für einen Tipp wäre ich sehr dankbar.

    Gruß
    misch
     
  2. Hallo misch,

    probier es mal mit dem folgenden Makro.

    Gruß Matjes :)
    Code:
    Sub Leere_löschen()
    'alle Spalten und Zeilen außerhalb des benutzten Bereichs werden gelöscht.
    'Der benutzte Bereich ist der Bereich, der Formeln oder Werte enthält
     Dim l_LastRow As Long, l_LastCol As Long
     Dim l_LastRowFormel As Long, l_LastColFormel As Long
     Dim l_LastRowWert As Long, l_LastColWert As Long
     Dim l_RealLastRow As Long, l_RealLastCol As Long
     Dim l_c As Long, l_r As Long, C As Long
     Dim ws As Worksheet
     Set ws = ActiveSheet
     
    ->Zeile/Spalte des angeblich benutzten Bereichs
     With ActiveSheet.UsedRange
      l_LastRow = .Row - 1 + .Rows.Count
      l_LastCol = .Column - 1 + .Columns.Count
     End With
        
    ->Zeile/Spalte der letzten Formel bestimmen
     Call ZeileSpalte_letzteFormel(ws, l_LastRowFormel, l_LastColFormel)
    ->Zeile/Spalte des letzten Wertes bestimmen
     Call ZeileSpalte_letzterWert(ws, l_LastRowWert, l_LastColWert)
     l_RealLastRow = Application.WorksheetFunction _
             .Max(l_LastRowFormel, l_LastRowWert)
     l_RealLastCol = Application.WorksheetFunction _
             .Max(l_LastColFormel, l_LastColWert)
    ->auf tatsächlich benutzte Zeilen reduzieren
    ->Korrektur von klexy :-) nur löschen, wenn nicht alles i.O. ist
     If l_RealLastRow < l_LastRow Then
      ws.Rows(l_RealLastRow + 1 & : & l_LastRow).Delete
     End If
    ->auf tatsächlich benutzte Spalten reduzieren
     If l_RealLastCol < l_LastCol Then
      For C = l_LastCol To l_RealLastCol + 1 Step -1
       ws.Columns(C).EntireColumn.Delete
      Next
     End If
     ws.Cells(1, 1).Select
     ws.Cells(l_RealLastRow, l_RealLastCol).Select
    ->notwendig, damit Strg+Ende richtig reagiert
    End Sub
    
    
    Private Function ZeileSpalte_letzteFormel( _
          ws As Worksheet, Zeile As Long, Spalte As Long)
    ->bestimmt die Zeile und Spalte der letzten Formel
    ->auf dem Arbeitsblatt
     Dim Zelle As Range, l_r As Long, l_c As Long
     Zeile = 0: Spalte = 0
     On Error GoTo ErrorHandler
     For Each Zelle In ws.Cells.SpecialCells(xlCellTypeFormulas)
      If Zeile < Zelle.Row Then Zeile = Zelle.Row
      If Spalte < Zelle.Column Then Spalte = Zelle.Column
     Next
    ->Zeile = ws.Range(adr).Row: Spalte = ws.Range(adr).Column
     Exit Function
    ErrorHandler:
     Err.Clear->keine Formel vorhanden
    End Function
    Private Function ZeileSpalte_letzterWert(ws As Worksheet, _
                 Zeile As Long, Spalte As Long)
    ->bestimmt die Zeile und Spalte des letzten Wertes
    ->auf dem Arbeitsblatt
     Dim l_r As Long, l_c As Long, l_LastRow As Long, l_LastCol As Long
     With ActiveSheet.UsedRange
      l_LastRow = .Row - 1 + .Rows.Count
      l_LastCol = .Column - 1 + .Columns.Count
     End With
     Zeile = 0: Spalte = 0
     For l_c = 1 To l_LastCol
      l_r = ws.Cells(ws.Rows.Count, l_c).End(xlUp).Row
     ->größte Zeilennummer merken
      If Zeile < l_r Then
       If l_r > 1 Then
        Zeile = l_r
       ElseIf ws.Cells(l_r, l_c).Value <>  Then Zeile = l_r
       End If
      End If
     ->Spalte merken, wenn nicht leer
      If l_r > 1 Or ws.Cells(l_r, l_c).Value <>  Then Spalte = l_c
     Next
    End Function
    
     
  3. Danke Matjes, geht es aber nicht einfacher? :D Ich weiß garnicht wo ich dieses Makro einbringen soll, ich bin Anwender und kein Entwickler!

    Gruß und Dank
    misch
     
  4. Hallo misch,

    du könntest das auch von Hand machen.

    a) erste leere (zu löschende) Zeile markieren.
    b) den Scroll-Balken am rechten Rand soweit möglich nach unten ziehen
    c) mit gedrückter Shift-Taste die letzte Zeile markieren
    (so sind alle zu löschenden Zeilen markiert)
    d) rechte Maus-Taste -> Zellen löschen
    e) A1 anklicken
    f) Datei speichern

    Equivalent ist mit Spalten zu verfahren.

    Gruß Matjes :)
     
  5. Danke Matjes, mit Löschen funktioniert es nicht - es ist wie bei der Hydra - die gelöschten Zellen wachsen nach! Man kommt sich vor wie bei Goethes Zauberlehrling. Eher geht es mit Ausblenden. Da habe ich aber auch nur die Zeilen geschafft- bei den Spalten habe ich es dann aufgegeben, es wollte nicht enden beim Markieren. :|
    Gibt es eigentlich nicht die Möglichkeit bei einem neuen Projekt, irgendwo (Registry?) die Anzahl der Zeilen und Spalten festzulegen?

    Gruß
    misch
     
  6. Spalte oder Zeile markieren, ab der ausgeblendet werden soll. Dann wie folgt verfahren:

    Strg + Umschalt-Taste (Shift) + Pfeil nach rechts = dann werden alle Spalten markiert, die rechts von der ersten markierten Spalte liegen
    Strg + Umschalt-Taste (Shift) + Pfeil nach unten = dann werden alle Zeilen markiert, die unterhalb der ersten markierten Zeile liegen
     
  7. Durch das Ausblenden wird die Datei aber auch nicht kleiner. Das war doch der eigentliche Wunsch, oder?
     
  8. Stimmt, im Eingangspost war Löschen die Anfrage gewesen. Hatte im obigen Posting nur das Wort Ausblenden gelesen und darauf geantwortet.
     
  9. Die Anzahl von Zeilen und Spalten ist vorgegeben, hat aber mit der eigentlichen Dateigrösse nichts zu tun. Speichere einfach mal eine leere Excel Datei ab und Du wirst sehen, dass sie nur ein paar KB gross ist. Das Anwachsen der Dateigrösse hat nur etwas mit den Inhalten zu tun. Insbesondere Formatvorgaben wie Farben usw. tragen erheblich zur Vergrösserung bei.
     
  10. Ich glaube, das Missverständnis liegt im Unterschied zwischen genutzten Zeilen (Die Zeile, zu der der Cursor springt, wenn man Strg+Ende drückt) und den sichtbaren Zeilen.
    Excel merkt sich manchmal aus unerfindlichen Gründen die Anzahl der genutzten Zeilen, auch wenn unten welche weggelöscht werden. In Excel gibt es nämlich 3 Arten von leeren Zellen, nämlich leer, ganz leer und wirklich leer(ohne das jetzt näher ausführen zu wollen). Strg+Ende springt nur bei wirklich leer ans Ende des beschriebenen Bereichs, ansonsten weit unter das Ende des beschriebenen Bereichs, was zu unnötig aufgeblähten Dateigrößern führt.
    Erstere kannst du mit dem Makro von Matjes prima auf den tatsächlich beschriebenen Bereich reduzieren, was zur Verkleinerung der Dateigröße führt.
    Letzterer beträgt bei Excel 97-2003 immer 65536 Zeilen und 255 Spalten (Bei Excel 2007/2010 sind es 4x mehr oder so) . Das ist nicht änderbar und für die Dateigröße auch völlig wurscht. Wenn es dir eine optische Pein ist, blende diese Zeilen/Spalten einfach aus.
     
Die Seite wird geladen...

Excel 2007. Nichtbenötigte Zeilen und Spalten entfernen. - Ähnliche Themen

Forum Datum
Excel 2007 Projektschutz Windows XP Forum 22. Apr. 2013
Excel 2007 - Fehler in =TEXT Funktion ? Windows XP Forum 15. Jan. 2013
Excel 2007 - Blatt mit Passwort vor Zugriff schützen Microsoft Office Suite 14. Juni 2012
Datumsberechnung in Excel 2007 Microsoft Office Suite 14. Juni 2012
Excel 2007 - Text in Grafiklegende formatieren Windows XP Forum 16. Apr. 2012