Excel 2007. Nichtbenötigte Zeilen und Spalten entfernen.

  • #1
M

misch

Bekanntes Mitglied
Themenersteller
Dabei seit
09.01.2005
Beiträge
327
Reaktionspunkte
0
Ort
Freudental
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
misch schrieb:
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. :|

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.
 
  • #11
Hallo Misch,

Versuche einmal folgendes:
Die Leerzeile nach der letzten Datenzeile durch Klick auf den Zeilenkopf markieren,
mit STRG+Umschalt+Pfeil nach Unten- Taste die Tabelle bis zum Ende markieren,
Rechtsklick auf den markierten Zeilenkopf und Zellen löschen wählen.

Leerspalte nach der letzten Datenspalte durch Klick auf den Spaltenkopf markieren
mit STRG+Umschalt+Pfeil nach Rechts- Taste die Tabelle bis zum Ende markieren,
Rechtsklick auf den markierten Spaltenkopf und Zellen löschen wählen.

Anschließend Speichern unter wählen und die Tabelle schließen.
Tabelle öffnen und nochmals Speichern unter wählen.

Jetzt sollte die Tabelle um einige KB oder auch MB kleiner sein.

Gruß Karl

*Thema zusammengefügt* von XLS Dateiumfang
 
  • #12
Hallo hddiesel!

Wenn ich Deinen letzten Rat befolge, dann erhalte ich angefügte Fehlermeldung.

Und die anfängliche VBA-Code ist mit meinen Kenntnissen nicht dahingehend zu ändern, dass er funktioniert, da ich viel roten Text finde.
 

Anhänge

  • Fehlermeldung.PNG
    Fehlermeldung.PNG
    17,7 KB · Aufrufe: 175
  • #13
Dann lösche einfach die leeren Zellen in Etappen.
So Hunderter Weise.
 
  • #14
mit diesem Artikel und dem darin beschriebenen Add-In geht es kinderleicht und Excel stösst auch keine Warnungen etc. aus.
Zurücksetzen der letzten Zelle in Excel
 
Thema:

Excel 2007. Nichtbenötigte Zeilen und Spalten entfernen.

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.961
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben