Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
460to464
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
460to464
460to464
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

leere Zellen löschen

leere Zellen löschen
03.08.2004 03:02:56
Jake
Hallihallo,
vielleicht kann mir ja irgendjemand bei meinem kleinen Problemchen helfen.
Also: ich habe ein Tabellenblatt mit vielen Spalten, die eine Menge leerer
Zellen enthalten. Nur sind die Zellen nicht wirklich leer, sondern gefüllt mit Formeln, die Werte aus einem anderem Tabellenblatt abrufen. Es sind halt nur keine Werte in den Zellen. Ich möchte nun, daß in dem gesamten Tabellenblatt (vielleicht mir einem Schalter?) alle leeren Zellen gelöscht werden und die Werte quasi nach oben rutschen.

Ist sowas irgendwie machbar? Oder könnte man die Daten vielleicht irgendwie
umkopieren in eine andere Tabelle und diese dann auf die beschriebene Art und Weise anordnen?
Wäre schön, wenn mir irgendjemand helfen könnte.
Grüße vom Jake.



16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: leere Zellen löschen
03.08.2004 08:13:01
WernerB.
Hallo Jake,
was hältst Du hiervon?

Sub Jake()
Dim Adr As String, ru As String
Dim i As Integer, sr As Integer
Dim j As Long, laR As Long
Application.ScreenUpdating = False
Adr = ActiveSheet.UsedRange.Address(False, False)
ru = Right(Adr, Len(Adr) - InStr(Adr, ":"))
sr = Range(ru).Column
For i = 1 To sr
laR = Cells(Rows.Count, i).End(xlUp).Row
For j = laR To 1 Step -1
If Cells(j, i).Text = "" Then
Cells(j, i).Delete Shift:=xlUp
End If
Next j
Next i
Application.ScreenUpdating = True
End Sub

Viel Erfolg wünscht
WernerB.
P.S.: Das Forum lebt auch von den Rückmeldungen der Fragesteller an die Antworter !
Anzeige
AW: leere Zellen löschen
03.08.2004 08:20:25
Harald Kapp
Hallo Werner, hallo Jake,
oder ein wenig kürzer so:

Sub Test()
Dim Zelle As Range
Application.CutCopyMode = False
For Each Zelle In Selection
If Zelle.Text = "" Then
Zelle.Delete Shift:=xlUp
End If
Next
End Sub


Wird nur auf den vorher manuell zuu selektierenden Bereich angewendet.
Gruß Harald
Einspruch, Euer Ehren !
03.08.2004 08:42:41
WernerB.
Hallo Harald,
da mit Deiner Vorgehensweise die Zellen in den Spalten von oben nach unten abgearbeitet werden (anstatt umgekehrt), werden wegen leider nicht alle "leeren" Zellen gelöscht.

Gruß
WernerB.
Wo er Recht hat...
03.08.2004 09:14:44
Harald Kapp
Hmm,
ich glaube, Du könntest Recht haben. Wenn die hochgeshiftete Zell ebenfalls leer ist, wird sie wahrscheinlich ignoriert, da sie den Platz der alten zelle einnimmt, die ja bereits bearbeitet worden ist.
Ist mir beim Test mit nur 1 Leerzelle durchgeschlupft.
Sorry,
Harald
Anzeige
AW: leere Zellen löschen
03.08.2004 19:17:29
Jake
Hallo,
erstmal vielen Dank für eure Mühe. Klappt auch ganz gut, nur das eine oder andere Problemchen gibt's dann doch noch. Habe das auch schon in meiner Antwort auf Ingo geschrieben.
Also: Zunächst einmal muß ich mehrere Male den Schalter drücken, wenn ich möchte, daß die Werte alle in die höchstmögliche Reihe rutschen und zum anderen gibt's dann da immer noch das Problem mit den Zellbezügen, die als Fehler erscheinen.
Ich hab mal meine Excel-Tabelle mit drangehängt. Die Zusammenführung der Spalten soll im Tabellenblatt 3 laufen, am besten ohne Verlust der Zellbezüge.
https://www.herber.de/bbs/user/9187.xls
Bitte nicht lachen, denn das Ganze ist bestimmt viel viel umständlicher gemacht als man es letztendlich hätte machen müssen.
Ist halt erst meine 2. Excel-Tabelle.
Wäre nett, wenn ihr euch das mal anschauen könntet.
Ach ja, ich hab da noch mal ein zweites Makro mit drangehängt, welches ich im Internet gefunden hab. Es nennt sich "verdichten". Könnte man das vielleicht irgendwie anpassen?

Die Datei https://www.herber.de/bbs/user/9188.xls wurde aus Datenschutzgründen gelöscht

Viele Grüße vom
Jake.
Anzeige
AW: leere Zellen löschen
04.08.2004 08:44:16
WernerB.
Hallo Jake,
Du hast uns in Deiner ersten Anfrage leider einige wesentliche Punkte unterschlagen.
- Es gibt da verbundene Zellen – die können für ein Makro tödlich sein.
- Du arbeitest im relevanten Bereich mit ausgeblendeten Zeilen bzw. Gruppierung/Gliederung.
- Die Aktion soll wohl erst ab Zeile 7 abwärts laufen.
- Das Problem mit den Zellbezügen kommt noch erschwerend hinzu.
Ich will nicht behaupten, dass es unmöglich ist, eine passende Lösung dafür zu finden bzw. das "Verdichten-Makro" anzupassen. Mir persönlich ist der Aufwand zu groß, um mich weiter damit auseinanderzusetzen. Zumal musste ich schon oft die Erfahrung machen, dass in solchen oder ähnlich gelagerten Fällen dann immer noch weitere Anforderungen nachgeschoben werden – was ich Dir aber nicht unterstellen will.
Vielleicht kann Dir ja ein anderer williger Helfer aus dem Forum mit mehr Erfahrung und Freizeit eine Lösung erarbeiten – ich jedenfalls strecke die Waffen und klinke mich hier aus.

Gruß
WernerB.
Anzeige
AW: leere Zellen löschen
04.08.2004 10:35:44
WernerB.
Hallo Jake,
ich habe mich doch noch mal aufgerafft und Deine Anregung, die Daten in eine andere Tabelle zu kopieren und dort die Leerzellen zu entfernen, aufgegriffen.
Wenn
- der relevante Datenbereich in "Tabelle3" immer "A7:X36" ist
- und ab Spalte "B" jede dritte Spalte ausgeblendet ist
- und die sichtbaren Daten von "Tabelle3" in "Tabelle2" ab Zeile 7 kopiert und dort verdichtet werden sollen,
dann funktioniert bei mir dieses Makro:

Sub Jake2()
Dim i As Integer
Dim j As Long, laR As Long
Application.ScreenUpdating = False
Sheets("Tabelle3").Range("A7:X36").SpecialCells(xlCellTypeVisible).Copy
With Sheets("Tabelle2")
.Range("A7").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
For i = 1 To 16
laR = .Cells(Rows.Count, i).End(xlUp).Row
If laR < 7 Then laR = 7
For j = laR To 7 Step -1
If .Cells(j, i).Text = "" Then
.Cells(j, i).Delete Shift:=xlUp
End If
Next j
Next i
Application.Goto Reference:=.Range("A1"), Scroll:=True
End With
Application.ScreenUpdating = True
End Sub

Einen Tabelllenkopf, Spaltenbreite, Zoomfaktor usw. in "Tabelle2" kannst Du ja selbst einbauen.

Gruß
WernerB.
Anzeige
AW: leere Zellen löschen
04.08.2004 22:34:15
Jake
Hi Werner,
vielen vielen Dank für deine Mühe. Zum Problem mit dem unterschlagen von Informationen kann ich nur soviel sagen, als daß ich immer, wenn's um ein Excel Problem geht, die Frage so einfach wie nur möglich formulieren möchte und mir dieses Makro dann gegebenfalls selber noch ein wenig anpassen möchte...mit ein wenig gesunden Menschenverstand und hier und da mal nachschlagen in diversen Fachbüchern ging das dann des öfteren schon mal ganz gut.
Ich find's großartig, daß ihr hier unentgeltlich die Probleme anderer User löst...ehrlich...alle Achtung. Und so denke ich, kann ich auch mein kleines Schärflein dazu beitragen und euch ein wenig Arbeit abnehmen und lerne gleich auch noch dabei.
Wenn's dann in diesem Fall dann mal schief geht...ein großes Sorry...war nicht bös gemeint.
Ich bin leider noch soeben erst nach Haus gekommen und volkkommen erledigt...muß gleich ins Bett und so werde ich heute leider nicht mehr dazu kommen dein Makro noch einzubauen.
Morgen werd ich mich aber gleich dran machen und dir mitteilen, ob ich Erfolg hatte.
Nochmals vielen Dank.
Eine geruhsame Nacht wünscht
Jake.
Anzeige
AW: leere Zellen löschen
05.08.2004 08:17:50
WernerB.
Hallo Jake,
dass Du es "nicht bös gemeint" hast, ist mir schon klar.
Eine Frage so einfach wie möglich zu formulieren, ist prinzipiell auch richtig.
Allerdings: Je komplexer die Ausgangsvoraussetzungen sind, desto genauer sollte der Makroprogrammierer darüber Bescheid wissen, wenn er nicht für den Papierkorb arbeiten will.
Sehr oft führt diese Unkenntnis dann zu diesen zeitaufwändigen und platzraubenden "Elefantenthreads", die bei genauer Kenntnis der Ausgangssituation für den Antworter - ohne Nebelstochern mit großen Zeitaufwand - viel kürzer und effizienter ausfallen könnten.
Dass es trotzdem zu Rückfragen (Verständnisprobleme, Fehler im Vorschlags-Makro, usw.) kommen kann, liegt in der Natur der Sache.
Wenn Du also noch Fragen hast, dann melde Dich ruhig noch mal.

Gruß
WernerB.
Anzeige
AW: leere Zellen löschen
05.08.2004 19:31:07
Jake
Hallo Werner,
hab soeben dein Makro getestet und es funzt wunderbar. Super!
Ich komme aber gern nochmal auf dein Angebot zurück, denn ich hab da nämlich doch noch ein kleines Problemchen, welches ich noch nicht hab lösen können.
Die Tabelle wird sich im Laufe der Zeit wahrscheinlich erweitern. D.h., dein Makro kopiert die Tabelle von A7:X36 ins Tabellenlatt zwei. So weit -so gut. Jetzt ist die Tabelle aber schon im Verlauf der letzten Tage angewachsen von A7 bis BT102. Wenn ich innerhalb des Makros aber jetzt einfach die X36 gegen BT102 austausche, kopiert er mir zwar alles rüber ins Tabellenblatt zwei, verdichtet aber ab nach Spalte X nicht mehr.
Woran liegt das? Was muß ich denn da zusätzlich noch ändern?
Wäre prima, wenn du mir da nochmal ne kleine Hilfestellung geben würdest.
Ansonsten noch mal vielen vielen Dank. Dein Makro erspart mir wirklich Kopier- und Löscharbeit von Stunden.
Viele Grüße,
Jake.
Anzeige
AW: leere Zellen löschen
06.08.2004 09:23:32
WernerB.
Hallo Jake,
auch die wichtige Information, dass die Anzahl betroffener Spalten und Zeilen variieren kann, hast Du uns/mir vorenthalten.
Dies bedeutet wiederum einen erhöhten nachträglichen Programmieraufwand, den ich Dir in Rechnung stellen werde.
Spaß beiseite: Du brauchst an dem nachstehenden Makro nichts mehr verändern – es findet die Größe des relevanten Zellbereiches selbsttätig heraus. Einzig die Zelle "A7" ist als Ausgangspunkt in beiden Tabellenblättern (Quelle und Ziel) festgelegt.
Du musst auch keinen Zellbereich markieren. Es spielt auch keine Rolle, von welchem Blatt aus das Makro gestartet wird.

Sub Jake3()
Dim Adr As String
Dim i As Integer, laC As Integer
Dim j As Long, laR As Long
Application.ScreenUpdating = False
With Sheets("Tabelle3")
On Error Resume Next
Adr = .Cells(.Cells.Find("*", .Range("A1"), xlFormulas, , xlByRows, xlPrevious).Row, _
.Cells.Find("*", .Range("A1"), xlFormulas, , xlByColumns, xlPrevious).Column).Address(0, 0)
On Error GoTo 0
If Adr = "" Then Exit Sub
.Range("A7:" & Adr).SpecialCells(xlCellTypeVisible).Copy
End With
With Sheets("Tabelle2")
.Range("A7").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
On Error Resume Next
laC = .Cells.Find("*", .Range("A1"), , , xlByColumns, xlPrevious).Column
On Error GoTo 0
If laC = 0 Then Exit Sub
For i = 1 To laC
laR = .Cells(Rows.Count, i).End(xlUp).Row
If laR < 7 Then laR = 7
For j = laR To 7 Step -1
If .Cells(j, i).Text = "" Then
.Cells(j, i).Delete Shift:=xlUp
End If
Next j
Next i
Application.Goto Reference:=.Range("A1"), Scroll:=True
End With
Application.ScreenUpdating = True
End Sub

Gruß
WernerB.
Anzeige
AW: leere Zellen löschen
06.08.2004 15:45:32
Jake
Hi Werner,
great! Funktioniert super. Was soll ich sagen...?!
Sorry, wenn ich dir mehr Arbeit gemacht hab, als nötig.
Ich werd das nächste Mal genauer über meine Fragestellung nachdenken und dann versuchen es besser zu formulieren. Aber manchmal kommen die Probleme ja auch erst, wenn man an einer Tabelle arbeitet. So zum Beispiel dieses Mal. Mir war selbst noch nicht klar, daß die Tabelle sich im Laufe der Zeit nach rechts erweitern würde...ich dachte, es geht immer nur weiter nach unten.
Nur mal kurz zur Info...wäre es denn für mich überhaupt möglich gewesen, mit ein paar Änderungen, wie zum Beispiel Start- und Endzelle das Makro anzupassen...?
Oder liegt's eher wieder in der Natur der Sache, daß dieses Makro sich so nicht hätte anpassen lassen...
Vielen vielen Dank nochmal.
Grüße vom
Jake.
AW: leere Zellen löschen
06.08.2004 21:42:16
WernerB.
Hallo Jake,
es freut mich, wenn ich Dir endlich (wenn auch nach mehreren Anläufen) so helfen konnte, dass Deinerseits (hoffentlich) keine weiteren Wünsche offen geblieben sind.
Du hättest auch selbst in dieser Zeile
For i = 1 To 16
die "16" (=Spalte "P") durch die neue Spaltennummer in der "Tabelle2" ersetzen können, dann hätte es auch funktionieren sollen.
Aber die Spaltennummer wird jetzt vom Makro selbst ermittelt (Variable "laC") und entsprechend eingesetzt.
Um so ein Makro bei veränderten Eingangsbedingungen richtig anpassen zu können, bedarf es schon einiger Makro-Erfahrung (Schleifentechnik u.ä.). Erst wenn Du so ein Makro wie ein Buch lesen kannst, bist Du reif dafür. Nur üben, üben und nochmals üben bringt Dich weiter. Den Schwierigkeitsgrad solltest Du dabei nur langsam steigern (wegen den notwendigen Erfolgserlebnissen). Versuche, Dir aus dem Forum die eine oder andere relativ einfache Anfrage herauszupicken, eine Lösung zu erarbeiten (auch wenn es anfangs viel Zeit kostet) und mit den eingegangenen Antworten dazu zu vergleichen; so kannst Du selbst viel dazulernen.

Weiterhin viel Spaß und Erfolg mit Excel-VBA-Makros
wünscht
WernerB.
AW: leere Zellen löschen
07.08.2004 04:19:19
Jake
Hi Werner,
nochmal vielen Dank. Ich werde deine Ratschläge beherzigen. Aber es wird bestimmt noch ein langer steiniger Weg...
Zunächst bin ich einmal sehr froh, daß die Tabelle so funktioniert, wie sie es jetzt tut.
Aber nach deiner Mail bin ich schon wieder ein wenig schlauer. Langsam nährt sich das Eichhörnchen...ich denke, die Zeit wird's bringen.
Auch dir weiterhin viel Spass und viel Erfolg.
Viele Grüße,
Jake.
prinzipielle Frage
03.08.2004 09:54:29
IngoG
Hallo Jake,
wie Du schreibst stehen in den Zellen eigentlich Formeln.
Bei der oben beschriebenen Methode müsstest Du noch sicherstellen, dass nicht durch das Löschen von Zeilen die bezüge verloren gehen und in einigen Zellen #bezug! erscheint was ja ungleich leer ist...
Gruß Ingo
AW: prinzipielle Frage
03.08.2004 18:04:30
Jake
Hallo Ingo,
du hast natürlich völlig recht, allerdings ist das Ganze nicht ganz so schlimm, da ich jetzt einfach jedesmal die gesamte Tabelle in ein anderes Tabellenblatt kopiert habe, hier aber nur noch die reinen Werte kopiert habe und dann das Makro angewendet hab.
Etwas umständlich ist's schon - naja.
Aber vielleicht hast du ja eine Idee, wie man die Werte der Tabelle mit den Zellbezügen automatisch in eine anderes Tabellenblatt kopieren kann, in welcher dann nur noch die reinen Werte ohne die Zellbezüge stehen. Dann wäre das Ganze ja kein Problem mehr.
Grüße vom Jake.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige