Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Leerezeilen löschen
#1
Hallo,

ich habe folgendes Makro, das mir Zeilen löscht, wenn der Spalte 11 die Zelle leer ist.
Was muss ich ändern, wenn ich die Zeile nur dann löschen möchte, wenn die Zelle in Spalte 4 und Spalte 11 leer ist?
Code:
Sub Leerzeilen_loeschen()

'Leere Zeilen löschen
   Dim lngSpalte As Long

'Spalte, die auf Leerzeichen geprüft werden soll

   lngSpalte = 11

   For a = ActiveSheet.Cells(Rows.Count, lngSpalte).End(xlUp).Row To 1 Step -1
   If ActiveSheet.Cells(a, 11).Value = "" Then
   Rows(a).Delete shift:=xlUp
   End If
   
   Next a
   
End Sub
LG Herbert
Windows 10
Office 365
Antworten Top
#2
Moin Herbert,

ohne deinen Code all zu sehr zu ändern:

Code:
With ActiveSheet
  If .Cells(a, 11).Value = "" Then
     If .Cells(a, 4).Value = "" Then Rows(a).EntireRow.Delete
  End If
End With


... ungeprüft.
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Antworten Top
#3
Hallo Günter

Danke!
LG Herbert
Windows 10
Office 365
Antworten Top
#4
Hi Günther,

(29.10.2015, 20:09)GMG-CC schrieb: ohne deinen Code all zu sehr zu ändern:

geht da nicht auch?

Code:
With ActiveSheet
   If .Cells(a, 11).Value = "" AND .Cells(a, 4).Value = "" Then Rows(a).EntireRow.Delete
End With

PS: Jetzt habe ich auch mal einen Verkürzungsvorschlag gebracht! :87:
Nicht immer nur Jörg und Edgar! :19:
Antworten Top
#5
Moin Ralf,

ja klar geht das auch. Und in diesem Fall ist es sogar optimaler. Und natürlich schön, dass diese Runde ein wenig erweitert wird... Blush
Warum ich das nicht gleich gemacht habe?
Ganz einfach, es gibt zwei bis drei Gründe dafür:
  1. Ich habe einen gehörigen Respekt vor der AND-Verknüpfung in VBA, weil ich schon mal den AND-Teil nicht geklammert habe und mich dann zu Tode gesucht habe, wo der Fehler liegt.
  2. Das Ganze ist so flexibler. In diesem Fall nicht notwendig, aber mitunter sind ja weitere Aktionen erforderlich.
  3. Ich denke, dass das in dieser Form dem sich mir darbietenden Wissensstand des TE eher angepasst ist und somit leichter nachvollziehbar.
Mein Credo ist gewiss, dass ich lieber ein paar Zeilen mehr schreibe als zu wenig, denn mir liegt daran, dass meine Kunden auch mal selbst Hand anlegen können, wenn es sein soll. Und das, obwohl die Transparenz mitunter zu Lasten der Effizienz geht ...

Schönen Rest-Sonntag noch!
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Antworten Top
#6
Moin zusammen!
Ein wenig Senf von mir:
Die rückwärts laufende Schleife ist die denkbar langsamste Variante, um Zeilen anhand von Bedingungen zu löschen.
(Das wisst ihr natürlich, ich richte mich auch eher an den Newbie, der mal über diesen Thread stolpert)

1. Wenn nur die Leerzellen einer Spalte zeilenweise gelöscht werden sollen, reicht der Einzeiler:
Sub Leerweg()
Columns(11).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

2. Bei zu überprüfenden 2 Spalten würde ich in eine Hilfsspalte eine simple Formel schreiben, die Spalte nach 1 filtern, die gefilterten Zeilen löschen und die Hilfsspalte wieder löschen:
Sub Leerweg()
Range(Cells(2, 12), Cells(Cells(Rows.Count, 11).End(xlUp).Row, 12)).FormulaR1C1 = "=ISBLANK(RC[-8])*ISBLANK(RC[-1])"
With Columns(12)
  .AutoFilter Field:=1, Criteria1:="1"
  .Range(Cells(2, 1), Cells(2, 1).End(xlDown)).SpecialCells(xlCellTypeVisible).EntireRow.Delete
  .AutoFilter
  .Clear
End With
End Sub

Dürfte (je nach Tabellengröße) erheblich bis exorbitant schneller sein.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste