Supportnet / Forum / Tabellenkalkulation
leere Zeilen mit formeln löschen
Frage
hallo!
ich habe eine tabelle, die ich per verweise und wenn/dann-bezügen aus einem anderen tabellenblatt erstelle. nun erhalte ich dadurch auch viele leere zeilen, die natürlich die formeln, aber "" enthalten. ich habe mal hier im forum folgendes makro gefunden
Sub LeereZellenLöschen()
Dim Zeile As Long
Application.ScreenUpdating = False
Zeile = Range("S65536").End(xlUp).Row
Range("B3:B" & Zeile).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
aber das funzt nicht, weil die zelle eben nicht leer ist, sondern eine formel enthält. kann mir jemand das makro so schreiben, dass die kompletten zeilen, wo die formel "" ergibt, löscht?
vielen dank
babe
Antwort 1 von Hajo_Zi
Antwort 2 von babe2504
hallo hajo,
nein, es geht nicht um den druck. ich möchte von dem einen blatt (komplette zusammenfassung) nur bestimmte daten haben. diese hole ich mir mit wenn/dann. und eine bedingung ergibt halt, den zellinhalt "". wenn das so ist, will ich nicht nur diese leere zelle löschen, sondern die ganze zeile, damit die beschriebenen zeilen alle untereinander stehen und so aus 400 zeilen eben nur ca. 100 zeilen werden.
gruß
babe
nein, es geht nicht um den druck. ich möchte von dem einen blatt (komplette zusammenfassung) nur bestimmte daten haben. diese hole ich mir mit wenn/dann. und eine bedingung ergibt halt, den zellinhalt "". wenn das so ist, will ich nicht nur diese leere zelle löschen, sondern die ganze zeile, damit die beschriebenen zeilen alle untereinander stehen und so aus 400 zeilen eben nur ca. 100 zeilen werden.
gruß
babe
Antwort 3 von nighty
hi babe :-)
wie gewünscht :-)
gruss nighty
Option Explicit
Sub such()
Dim suche1 As Range
Dim zaehler1, lager As Long
Do
zaehler1 = zaehler1 + 1
Set suche1 = ActiveSheet.Range("B" & zaehler1 & ":B" & ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row).Find("", LookIn:=xlValues)
If Not suche1 Is Nothing Then
lager = suche1.Row
ActiveSheet.Cells(suche1.Row, suche1.Column).EntireRow.Delete
zaehler1 = lager
Else
zaehler1 = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
End If
Loop Until zaehler1 = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
End Sub
wie gewünscht :-)
gruss nighty
Option Explicit
Sub such()
Dim suche1 As Range
Dim zaehler1, lager As Long
Do
zaehler1 = zaehler1 + 1
Set suche1 = ActiveSheet.Range("B" & zaehler1 & ":B" & ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row).Find("", LookIn:=xlValues)
If Not suche1 Is Nothing Then
lager = suche1.Row
ActiveSheet.Cells(suche1.Row, suche1.Column).EntireRow.Delete
zaehler1 = lager
Else
zaehler1 = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
End If
Loop Until zaehler1 = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
End Sub
Antwort 4 von nighty
hi babe :-)
ups korrigiert :-))
gruss nighty
Option Explicit
Sub such()
Dim suche1 As Range
Dim zaehler1, lager As Long
zaehler1 = 1
Do
Set suche1 = ActiveSheet.Range("B" & zaehler1 & ":B" & ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row).Find("", LookIn:=xlValues)
If Not suche1 Is Nothing Then
lager = suche1.Row
ActiveSheet.Cells(suche1.Row, 2).EntireRow.Delete
zaehler1 = lager - 1
Else
zaehler1 = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
End If
Loop Until zaehler1 = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
End Sub
ups korrigiert :-))
gruss nighty
Option Explicit
Sub such()
Dim suche1 As Range
Dim zaehler1, lager As Long
zaehler1 = 1
Do
Set suche1 = ActiveSheet.Range("B" & zaehler1 & ":B" & ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row).Find("", LookIn:=xlValues)
If Not suche1 Is Nothing Then
lager = suche1.Row
ActiveSheet.Cells(suche1.Row, 2).EntireRow.Delete
zaehler1 = lager - 1
Else
zaehler1 = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
End If
Loop Until zaehler1 = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
End Sub
Antwort 5 von babe2504
hallo nighty,
du schon wieder, wie schön... und prompt läuft meine tabelle ;-) vielen dank!!
gibt es eigentlich excel-kurse, die es direkt auf makro und vba abgesehen haben? hab, was das betrifft, echt gar keine ahnung. böhmische wälder. oder lernt man das nach und nach?
lg
babe
du schon wieder, wie schön... und prompt läuft meine tabelle ;-) vielen dank!!
gibt es eigentlich excel-kurse, die es direkt auf makro und vba abgesehen haben? hab, was das betrifft, echt gar keine ahnung. böhmische wälder. oder lernt man das nach und nach?
lg
babe
Antwort 6 von babe2504
hallo nighty,
ich hatte wohl den totalen denkfehler in meiner arbeitsmappe. dein makro tut das, was es soll. aber:
meine arbeitsmappe enthält 3 blätter. blatt eins enthält im mom ca. 400 daten zu fahrzeugen mit div. informationen u.a. auch einem abmeldedatum. dieses blatt "lebt" durch ständiges aktualisieren (hier mal eine abmeldung zu einem bestehenden auto. oder am schluß der tabelle wird noch ein auto dazugetragen). aus dieser gesamtliste entstehen zwei weitere blätter. einmal sollen alle bereits abgemeldeten kennzeichen ein blatt füllen (man erkennt diese auswahl durch den datumseintrag unter abmeldedatum. das dritte blatt solte dann aus allen noch angemeldeten kennzeichen bestehen (erkennt man also daran, dass kein abmeldedatum eingetragen wurde). gelöst habe ich es folgendermaßen:
=WENN(Fahrzeugliste!P3>0;Fahrzeugliste!B3;"")
wobei in spalte P eben das abmeldedatum steht. damit hole ich mir das kennzeichen. rechts davon sollen die gleichen daten stehen, die zum kennzeichen passen. das habe ich mit folgender formel erreicht:
=WENN($B2="";"";VERWEIS($B2;Fahrzeugliste!$B:$B;Fahrzeugliste!C:C))
das kopiere ich also ca. für 400 zeilen. dabei entstehen halt unheimlich viele leerzeilen, die ich mit deinem makro lösche. das funktioniert auch.
dann kommt aber mein denkfehler. jetzt trage ich in der gesamtliste zu einem bestehenden kennzeichen ein abmeldedatum ein. nun sollte ja automatisch in dem zweiten arbeitsblatt (alle abgemeldeten autos) dieses kennzeichen auch wieder erscheinen. tut es aber nicht, weil ja die formel dafür mit dem makro gelöscht wurde. wäre ja auch nicht so schlimm, ich könnte die formeln ja nach ausführen des makros wieder kopieren. aber dann kriege ich alle abgemeldeten kennzeichen doppelt.
kannst du mir trotzdem helfen?
babe
ich hatte wohl den totalen denkfehler in meiner arbeitsmappe. dein makro tut das, was es soll. aber:
meine arbeitsmappe enthält 3 blätter. blatt eins enthält im mom ca. 400 daten zu fahrzeugen mit div. informationen u.a. auch einem abmeldedatum. dieses blatt "lebt" durch ständiges aktualisieren (hier mal eine abmeldung zu einem bestehenden auto. oder am schluß der tabelle wird noch ein auto dazugetragen). aus dieser gesamtliste entstehen zwei weitere blätter. einmal sollen alle bereits abgemeldeten kennzeichen ein blatt füllen (man erkennt diese auswahl durch den datumseintrag unter abmeldedatum. das dritte blatt solte dann aus allen noch angemeldeten kennzeichen bestehen (erkennt man also daran, dass kein abmeldedatum eingetragen wurde). gelöst habe ich es folgendermaßen:
=WENN(Fahrzeugliste!P3>0;Fahrzeugliste!B3;"")
wobei in spalte P eben das abmeldedatum steht. damit hole ich mir das kennzeichen. rechts davon sollen die gleichen daten stehen, die zum kennzeichen passen. das habe ich mit folgender formel erreicht:
=WENN($B2="";"";VERWEIS($B2;Fahrzeugliste!$B:$B;Fahrzeugliste!C:C))
das kopiere ich also ca. für 400 zeilen. dabei entstehen halt unheimlich viele leerzeilen, die ich mit deinem makro lösche. das funktioniert auch.
dann kommt aber mein denkfehler. jetzt trage ich in der gesamtliste zu einem bestehenden kennzeichen ein abmeldedatum ein. nun sollte ja automatisch in dem zweiten arbeitsblatt (alle abgemeldeten autos) dieses kennzeichen auch wieder erscheinen. tut es aber nicht, weil ja die formel dafür mit dem makro gelöscht wurde. wäre ja auch nicht so schlimm, ich könnte die formeln ja nach ausführen des makros wieder kopieren. aber dann kriege ich alle abgemeldeten kennzeichen doppelt.
kannst du mir trotzdem helfen?
babe
Antwort 7 von nighty
hi babe :-)
ich bin nur ein schüler hajo ist der lehrer :-))
anfangen kannst du ganz einfach mit altbackenen schulbasic,dann in foren ueber suchfunktionen gezielte info holen und dann viel experimentieren,dann kommt alles von selbst mit der zeit :-)))
gruss nighty
meinst du es so ?
tabelle1 wird zeile gelöscht
tabelle2 wird am ende die zuvor gelöschte rangehangen
Sub such()
Dim suche1 As Range
Dim zaehler1, lager As Long
zaehler1 = 1
Do
Set suche1 = Sheets(1).Range("B" & zaehler1 & ":B" & Sheets(1).Range("B" & Rows.Count).End(xlUp).Row).Find("", LookIn:=xlValues)
If Not suche1 Is Nothing Then
lager = suche1.Row
Sheets(1).Rows(suche1.Row).Copy
Sheets(2).Rows(Sheets(2).UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1).Insert Shift:=xlDown
Sheets(1).Cells(suche1.Row, 2).EntireRow.Delete
zaehler1 = lager - 1
Else
zaehler1 = Sheets(1).Range("B" & Rows.Count).End(xlUp).Row
End If
Loop Until zaehler1 = Sheets(1).Range("B" & Rows.Count).End(xlUp).Row
End Sub
sollten die werte allerdings von formeln stammen dann muss ich es umschreiben,mit info von dir welche spalten kopiert werden sollen,von - bis
ich bin nur ein schüler hajo ist der lehrer :-))
anfangen kannst du ganz einfach mit altbackenen schulbasic,dann in foren ueber suchfunktionen gezielte info holen und dann viel experimentieren,dann kommt alles von selbst mit der zeit :-)))
gruss nighty
meinst du es so ?
tabelle1 wird zeile gelöscht
tabelle2 wird am ende die zuvor gelöschte rangehangen
Sub such()
Dim suche1 As Range
Dim zaehler1, lager As Long
zaehler1 = 1
Do
Set suche1 = Sheets(1).Range("B" & zaehler1 & ":B" & Sheets(1).Range("B" & Rows.Count).End(xlUp).Row).Find("", LookIn:=xlValues)
If Not suche1 Is Nothing Then
lager = suche1.Row
Sheets(1).Rows(suche1.Row).Copy
Sheets(2).Rows(Sheets(2).UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1).Insert Shift:=xlDown
Sheets(1).Cells(suche1.Row, 2).EntireRow.Delete
zaehler1 = lager - 1
Else
zaehler1 = Sheets(1).Range("B" & Rows.Count).End(xlUp).Row
End If
Loop Until zaehler1 = Sheets(1).Range("B" & Rows.Count).End(xlUp).Row
End Sub
sollten die werte allerdings von formeln stammen dann muss ich es umschreiben,mit info von dir welche spalten kopiert werden sollen,von - bis
Antwort 8 von babe2504
moin nighty!
hab schon ziemlich ungeduldig auf dich gewartet ;-)
hmm, nee. also im ersten tabellblatt (=Fahrzeugliste) wird nichts gelöscht. Hier kommen sämtliche Eintragungen rein. Hier wird beispielsweise nur ein Kennzeichen mit entsprechenden weiteren Daten (Gewicht, Hersteller, Fahrgestellnrn. usw) dazugetragen. Oder aber beispielsweise: Das Fahrzeug in Zeile 9 wird nun abgemeldet. Unter Spalte P kommt hier also ein Abmeldedatum rein. Dies ist die Bedingung für das zweite Arbeitsblatt (=abgemeldet). Wenn also ein Abmeldedatum vorhanden ist, soll das in dieses zweite Blatt automatisch eingetragen werden. Hast du ne Mail-Adresse? Darfst du mir die geben? Dann würde ich dir die Tabelle einfach mal schicken?!
Gruß
Babe
hab schon ziemlich ungeduldig auf dich gewartet ;-)
hmm, nee. also im ersten tabellblatt (=Fahrzeugliste) wird nichts gelöscht. Hier kommen sämtliche Eintragungen rein. Hier wird beispielsweise nur ein Kennzeichen mit entsprechenden weiteren Daten (Gewicht, Hersteller, Fahrgestellnrn. usw) dazugetragen. Oder aber beispielsweise: Das Fahrzeug in Zeile 9 wird nun abgemeldet. Unter Spalte P kommt hier also ein Abmeldedatum rein. Dies ist die Bedingung für das zweite Arbeitsblatt (=abgemeldet). Wenn also ein Abmeldedatum vorhanden ist, soll das in dieses zweite Blatt automatisch eingetragen werden. Hast du ne Mail-Adresse? Darfst du mir die geben? Dann würde ich dir die Tabelle einfach mal schicken?!
Gruß
Babe
Antwort 9 von nighty
hi babe :-)
oberley@t-online.de
komm aber erst richtung sonntag/montag dazu
gruss nighty
oberley@t-online.de
komm aber erst richtung sonntag/montag dazu
gruss nighty
Antwort 10 von babe2504
hallo nighty,
bin nun aus dem urlaub zurück und hab gleich in mein postfach geguckt. leider hab ich nichts von dir gefunden :-( bist du nicht dazu gekommen, oder kannst du mir nicht weiterhelfen?
lg
babe
bin nun aus dem urlaub zurück und hab gleich in mein postfach geguckt. leider hab ich nichts von dir gefunden :-( bist du nicht dazu gekommen, oder kannst du mir nicht weiterhelfen?
lg
babe