Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1448to1452
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Letzte Zelle zurücksetzen/Arbeitsmappe verkleinern

Letzte Zelle zurücksetzen/Arbeitsmappe verkleinern
20.09.2015 12:13:05
erichm
Hallo,
ich habe diverse Arbeitsmappen, die ich mal in größerem und mal in kleinerem Umfang nutzen muss. Dabei geht es meist um Formeln die kopiert bzw. gelöscht werden.
Beim löschen "merkt sich EXCEL" aber trotzdem die "letzte Zelle der Arbeitsmappe" die mit einer Formel gefüllt war. Bei zig-tausenden Zeilen und vielen Spalten wird das immer zum Problem wenn ich irgendwann Spalten einfügen muss (Ressourcen nicht ausreichend).
Um das zu lösen habe ich im Netz folgenden Code gefunden, der die "letzte Zelle zurücksetzt":
Public Sub ResetLastCell()
' Diese Prozedur setzt die letzte Zelle des aktiven Tabellenblattes zurück
' Original-Code: Microsoft Corporation
' Anpassungen:   Philipp von Wartburg
Dim rngLastCell As Range
Dim rowstep As Integer
Dim colstep As Integer
'Aktuelle letzte Zelle des aktiven Blattes merken
Set rngLastCell = Cells.SpecialCells(xlLastCell)
'Adresse der aktuellen letzten Zelle in der Statusleiste anzeigen
Application.StatusBar = "Letzte Zelle: " & rngLastCell.Address
'Variablen rowstep und colstep initialisieren
rowstep = -1
colstep = -1
'Schleife durchlaufen bis letzte Zelle gefunden oder Zelle A1 erreicht ist
While (rowstep + colstep  0) And (rngLastCell.Address  "$A$1")
'Prüfen ob die momentane Spalte eine Zelle mit Daten enthält
If Application.CountA(Range(Cells(1, rngLastCell.Column), rngLastCell)) > 0 Then _
colstep = 0
'Prüfen ob die momentane Zeile eine Zelle mit Daten enthält
If Application.CountA(Range(Cells(rngLastCell.Row, 1), rngLastCell)) > 0 Then _
rowstep = 0
'Objektpointer rngLastCell auf die neue Position setzen
Set rngLastCell = rngLastCell.offset(rowstep, colstep)
'Adresse der "neuen" letzten Zelle in der Statusleiste anzeigen
Application.StatusBar = "Letzte Zelle: " & rngLastCell.Address
Wend
'Unbenutzte Spalten leeren und dann löschen
With Range(Cells(1, rngLastCell.Column + 1), "IV65536")
Application.StatusBar = "Lösche Spalten: " & .Address
.Clear
.Delete
End With
'Unbenutzte Zeilen leeren und dann löschen
With Rows(rngLastCell.Row + 1 & ":65536")
Application.StatusBar = "Lösche Zeilen: " & .Address
.Clear
.Delete
End With
Set rngLastCell = Nothing
'Neue letzte Zelle selektieren
Cells.SpecialCells(xlLastCell).Select
'Statusleiste zurücksetzen und neue letzte Zelle ausgeben
Application.StatusBar = False
MsgBox "Die neue letzte Zelle besitzt die Adresse " & _
Cells.SpecialCells(xlLastCell).Address(False, False) & ".", vbInformation
End Sub
Allerdings steigt der Code wiederum aus (fehlende Ressourcen) wenn viele Zellen (bzw. Zeilen / Spalten) gelöscht werden müssen.
Also habe ich mir folgendes überlegt:
Ich mache das löschen der unnötigen Zeilen etappenweise. Dazu habe ich mir einen Code aufgezeichnet, der wie folgt angepasst werden müsste:
Sub verkleinern()
Cells.SpecialCells(xlLastCell).Select 'hier wird die "letzte Zelle" ermittelt; hier mit Beispiel "Zeile 65000"
Rows("64001:65000").Select 'jetzt müsste diese Range automatisch mit den letzten 1000 Zeilen selektiert werden
Selection.Delete Shift:=xlUp
ActiveWorkbook.Save
End Sub
Dann kann ich den Code mehrmals durchlaufen lassen, bis ich bei der zuletzt zu löschenden Zeile angekommen bin (z.B. Zeile 100).
Besten Dank für eine Hilfe!
mfg

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Letzte Zelle zurücksetzen/Arbeitsmappe verkleinern
20.09.2015 12:18:49
Hajo_Zi
meist hilft speichern.

Letzte Zelle zurücksetzen/Arbeitsmappe verkleinern
20.09.2015 12:25:06
Nepumuk
Hallo,
teste mal:
Public Sub Test()
    Dim objCell As Range
    Set objCell = Cells.Find(What:="*", LookIn:=xlValues, Lookat:=xlWhole, _
        SearchOrder:=xlByColumns, SearchDirection:=xlPrevious)
    Range(Cells(1, objCell.Column + 1), Cells(Rows.Count, Columns.Count)).Delete
    Set objCell = Cells.Find(What:="*", LookIn:=xlValues, Lookat:=xlWhole, _
        SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
    Range(Cells(objCell.Row + 1, 1), Cells(Rows.Count, Columns.Count)).Delete
    ThisWorkbook.Save
End Sub

Gruß
Nepumuk

Anzeige
AW: Letzte Zelle zurücksetzen/Arbeitsmappe verkleinern
20.09.2015 13:43:31
erichm
Hallo Nepumuk,
danke; folgendes passiert:
- Der Code läuft eine Weile.
- Dann kommt eine umfangreiche Meldung wegen fehlender Ressourcen.
- Der Code bleibt stehen bei (gelb markiert):
Range(Cells(1, objCell.Column + 1), Cells(Rows.Count, Columns.Count)).Delete
Ausgangslage: letzte Zelle (vor Code-Durchlauf gesucht): CSH63999
Anzeige der Werte beim Stopp:
objCell.Column = 88
Rows.Count = 1048576
Columns.Count = 16384
Hilft das zum optimieren?
Danke.
@Hajo: ich speichere grundsätzlich relativ oft; bei dem langen Code konnte ich aber nichts finden wo das speichern sinnvoll wäre
mfg

Anzeige
Letzte Zelle zurücksetzen/Arbeitsmappe verkleinern
20.09.2015 15:03:15
Nepumuk
Hallo Erich,
lass mal folgenden Code laufen:
Public Sub Test2()
    
    Dim objCell As Range
    Dim lngIndex As Long
    
    Set objCell = Cells.Find(What:="*", LookIn:=xlValues, Lookat:=xlWhole, _
        SearchOrder:=xlByColumns, SearchDirection:=xlPrevious)
    
    For lngIndex = objCell.Column + 1 To Cells.SpecialCells(xlCellTypeLastCell).Column + 1
        Columns(objCell.Column + 1).Delete
    Next
    
    Set objCell = Cells.Find(What:="*", LookIn:=xlValues, Lookat:=xlWhole, _
        SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
    
    For lngIndex = objCell.Row + 1 To Cells.SpecialCells(xlCellTypeLastCell).Row + 1
        Rows(objCell.Row + 1).Delete
    Next
    
    ThisWorkbook.Save
    
End Sub

Der wird zwar einige Zeit benötigen aber damit ist die Tabelle erst mal bereinigt. In Zukunft lässt du ab und zu den ersten Code laufen und zwar bevor die Tabelle wieder aus allen Nähten platzt. Der braucht ein paar Sekunden für das Ganze.
Gruß
Nepumuk

Anzeige
AW: Letzte Zelle zurücksetzen/Arbeitsmappe verkleinern
20.09.2015 15:32:49
erichm
DANKE; klappt aber leider noch nicht;
nach dem Hinweis auf die fehlenden Ressourcen bleibt der Code dort stehen:
'For lngIndex = objCell.Column + 1 To Cells.SpecialCells(xlCellTypeLastCell).Column + 1
' Columns(objCell.Column + 1).Delete '-- nur diese Zeile ist gelb markiert
objCell.Column = 88
lngIndex = 89
xlCellTypeLastCell = 11
mfg

Letzte Zelle zurücksetzen/Arbeitsmappe verkleinern
20.09.2015 15:38:17
Nepumuk
Hallo Erich,
wenn schon einzelne Spalten löschen nicht mehr funktioniert, dann ist die Tabelle hinüber. Leg eine neue an und kopiere den benutzen Bereich der alten in diese und lösch die alte.
Gruß
Nepumuk

Anzeige
AW: Letzte Zelle zurücksetzen/Arbeitsmappe verkleinern
21.09.2015 10:41:16
erichm
Hallo Nepumuk,
habe ich fast befürchtet; dauert jetzt eine Weile, dann melde ich mich nochmals.
mfg

AW: Letzte Zelle zurücksetzen/Arbeitsmappe verkleinern
25.09.2015 07:55:05
erichm
Hallo Nepumuk,
habe jetzt alles in einer neuen Datei.
Für den 1. Code habe ich eine umfangreiche Testdatei erstellt: hat wunderbar funktioniert!!
DANKE!
Um den Überblick zu haben, hatte ich jetzt folgende Idee:
https://www.herber.de/forum/messages/1449304.html
mfg

AW: Letzte Zelle zurücksetzen/Arbeitsmappe verkleinern
20.09.2015 18:12:40
Peter
Hallo Erich,
wenn ich es richtig verstanden habe, soll die letzte Zelle eines Tabellenbereichs gefunden werden. Die Adresse würde sich aus der letzten benutzten Zeile und der letzten benutzten Spalte zusammensetzen. Da in der Regel jede Spalte eine Überschrift hat, die üblicherweise in einer bestimmten Zeile steht, kann die letzte Spalte ganz leicht gefunden werden, wenn man in der fraglichen Zeile von irgendeiner Spalte weit rechts den Cursor mit "STRG" und Cursortaste "links" verschiebt. Bei der Ermittlung der letzten benutzten Zeile braucht man eine Funktion. Bei meiner Lösung wird eine Zeile in der Tabelle2 verwendet. Man kann die dort vorhandenen Formeln auch woanders hinsetzten, vorausgesetzt, der Bereich wird nicht verändert.
Hier mein Lösungsvorschlag:
https://www.herber.de/bbs/user/100284.xlsm
Wenn Excel streikt ist m. E. die folgende Maßnahme erfolgreich: Datei speichern, Computer herunterfahren und neu starten.
Bitte mal testen; FeedBack wäre schön.
Mit freundlichem Gruß
Peter Kloßek

Anzeige
AW: Letzte Zelle zurücksetzen/Arbeitsmappe verkleinern
21.09.2015 10:40:38
erichm
Hallo Peter,
besten Dank; melde mich auf alle Fälle noch wenn ich das verifiziert habe.
mfg

AW: Letzte Zelle zurücksetzen/Arbeitsmappe verkleinern
25.09.2015 07:57:03
erichm
Hallo Peter,
die Zeilenermittlung klappt. Die Spaltenermittlung aber nicht?
Mich hat das Ganze jetzt aber auf folgende Idee gebracht:
https://www.herber.de/forum/messages/1449304.html
mfg

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige