Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1300to1304
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

Makro Zeilen / Spalten löschen

Makro Zeilen / Spalten löschen
11.03.2013 18:04:57
claus
Hallo,
ich würde gerne per Makro Spalten und Zeilen nach folgendem Kriterium löschen wollen.
Wenn in der Zeile 1 ein "-" Symbol vorhanden ist, dann soll die entsprechende Spalte gelöscht werden.
Wenn in der Spalte A ein "-" Symbol vorhanden ist, dann soll die entsprechnde Zeile gelöscht werden.
Bitte beachten, dass ich die Löschung der gesamten Spalte und Zeile meine und nicht die Inhalte.
Sobald in der Zeile 1 oder Spalte A kein Inhald mehr vorhanden ist, dann muss auch nicht mehr überprüft werden. Also nur bis zu dieser Zeile oder Spalte muss überprüft werden.
Vielen Dank im Voraus für Eure Hilfe.
VG
Claus

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro Zeilen / Spalten löschen
11.03.2013 18:36:02
Daniel
Hi
wie kommen denn die "-" Symbole zustande?
stehen die da direkt drin oder werden die durch eine Formel erzeugt?
gruß Daniel

Was ist denn daran relevant? owT
12.03.2013 02:48:12
Luc:-?
:-?

AW: Was ist denn daran relevant? owT
12.03.2013 09:18:39
Daniel
daran ist relevant, daß es einen einfacheren Lösungsweg gibt, wenn die Werte als Fixwerte in den Zellen stehen als wenn sie durch Formeln gebildet werden.
Gruß Daniel

AW: Makro Zeilen / Spalten löschen
12.03.2013 08:58:52
Klaus
Hi,
lass in der Tabelle dieses Makro laufen:
Option Explicit
Sub ZeilenSpaltenMinusRaus()
Dim lRow As Long
Dim iCol As Long
Dim lTMP As Long
With ActiveSheet
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
iCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
'Zeilen löschen
For lTMP = lRow To 1 Step -1
If .Cells(lTMP, 1).Value = "-" Then .Cells(lTMP, 1).EntireRow.Delete Shift:=xlUp
Next lTMP
'Spalten löschen
For lTMP = iCol To 1 Step -1
If .Cells(1, lTMP).Value = "-" Then .Cells(1, lTMP).EntireColumn.Delete Shift:=xlToLeft
Next lTMP
End With
End Sub
Spalte A und Zeile 1 sind fest im Code verbastelt, ebenso das "-" Zeichen. Ich gehe davon aus, dass die Zelleninhalte sich zur Laufzeit nicht ändern und das gewünschte löschen von Spalten und Zeilen keine #BEZUG Fehler verursacht. Ebenso gehe ich davon aus, dass in Zeile 1 und Spalte A nur Werte und "-" stehen, keine Fehler wie #NV!, #DIV/0! oder andere.
Grüße,
Klaus M.vdT.

Anzeige
AW: Makro Zeilen / Spalten löschen
12.03.2013 15:36:06
claus
SUPER. Es hat funktioniert.
VIELEN DANK!

Danke für die Rückmeldung! owT.
12.03.2013 15:46:22
Klaus
owT im Betreff, trotzdem ein paar Worte fürs Archiv:
die Lösung mit dem ZEILEN löschen ist hier nicht ganz so elegant. Schneller währe es, per VBA einen Autofilter auf Spalte A zu setzen, nach "-" zu filtern und dann zu löschen.
Um das Löschen der SPALTEN ebenso zu beschleunigen, könnte man "-" durch einen Fehlerwert ersetzen (zB =1/0) und dann mit SpecialCells alle Fehler-Spalten auf einmal greifen und löschen.
Beide Ansätze lohnen den Aufwand aber erst bei sehr großen Dateien.
Grüße an die Archiv-Leser aus der Zukunft!
Klaus M.vdT.

Anzeige
AW: Danke für die Rückmeldung! owT.
12.03.2013 16:08:09
Daniel
m.E. ist der Aufwand bei der Methode mit Ersetzen durch Fehlerwert und mit SpecialCells auf die Zellen zugreifen sogar geringer als bei der Schleifenmethode.
Sub test()
Range("1:1,A:A").Replace "-", "#N/A", xlWhole
Rows(1).SpecialCells(xlCellTypeConstants, 16).EntireColumn.Delete
Columns(1).SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete
End Sub

weswegen sich das auch schon bei kleineren Datenmengen lohnen kann.
desweiteren sollte man sich diese Methode merken, weil man das Lösungsprinzip auch ohne Makro einsetzen kann, um schnell eine grössere Datenmenge zu bearbeiten.
Nachteil ist, daß es nicht funktioniert, wenn in den Zellen Formeln stehen.
Gruß Daniel

Anzeige
AW: Danke für die Rückmeldung! owT.
12.03.2013 16:55:04
claus
Super, diese Variante funktioniert auch sehr gut. Vorteil ich kann mehrere Tabelleblätter durchlaufen lassen. Beim anderen ging es wegen dem DIM nicht (oder ich wusste nicht wie...)
VIELEN DANK!

AW: Danke für die Rückmeldung! owT.
13.03.2013 10:34:01
Klaus
Hi Daniel,
Nachteil ist, daß es nicht funktioniert, wenn in den Zellen Formeln stehen.
Wenn in den Zellen eh Formeln stehen und "-" eh die Lösch-Bedingung ist, kann man einfach die Formel den Fehlerwert erzeugen lassen.
Aus =WENN(X10=X9;"Hallo";"-") macht man =WENN(X10=X9;"Hallo";1/0), dann läuft dein Code sogar ohne replace. Halte ich sogar für die beste Lösung.
Grüße,
Klaus M.vdT.
Anzeige

319 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige