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

mit Space gelöschte Zelle als leer erkennen

mit Space gelöschte Zelle als leer erkennen
12.03.2009 22:13:27
bully
Hallo Excelfreunde,
ich suche mit "Cells(20, 5).End(xlUp).Offset(1, 0).Select" in einem Zellbereich die erste leere Zelle. Wurde eine Zelle aber mit einem Leerschlag gelöscht, wird diese nicht mehr als leer erkannt (wieso ist mir klar).
Gibt es eine möglichkeit, die erste Zelle ohne ersichtliche Zeichen zu suchen?
Das heisst, ich möchte die erste leere Zelle finden, unabhängig davon wie sie geleert wurde.
Gruss bully

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: dann solltest du den Leerschlag vorher löschen
12.03.2009 23:00:00
Daniel
mit:

Columns(5).Replace " ", "", lookat:=xlWhole


Gruß, Daniel

AW: dann solltest du den Leerschlag vorher löschen
12.03.2009 23:19:19
bully
Hallo Daniel,
danke für die schnelle Antwort. Für eine Spalte funktioniert es so. Ich möchte die Abfrage aber über die Spalten E,F und G machen. Geht das auch? Ich habe es mit "Columns("E:G").Replace " ", "", lookat:=xlWhole" und Range statt Columns versucht, aber es funktioniert nicht.
Gruss bully
AW: Range("E:G").Replace " ", "", lookat:=xlWhole"
12.03.2009 23:24:14
Daniel
funktioniert.
es darf halt immer nur genau ein Leerzeichen sein und nicht 2 oder mehr.
den Rest deines Makro kenne ich nicht.
Gruß, Daniel
Anzeige
AW: hat das einfügen der leerzeilen
12.03.2009 23:51:42
bully
Also, das Ersetzen des Leerzeichens funktioniert nur teilweise. Soblad in mehreren Zellen ein Leerschlag vorhanden ist geht es meisst nicht mehr. Ich konnte aber noch nicht feststellen, wie die Konstellation sein muss, damit es funktioniert, oder eben nicht.
Mit dem Leerzeilen einfügen, habe ich es leider nicht hinbekommen. Ich habe aber dann das Vorgehen umgedreht, (den Bereich mit den Leerzeilen kopiert, und nachher die Leerzeilen entfernt). So bin ich ebenfalls zum Ziel gekommen.
Gruss bully
Anzeige
AW: hat das einfügen der leerzeilen
13.03.2009 00:14:15
Daniel
Hi
prüfs doch bitte nach, das Ersetzen des Leerzeichens durch eine Leerzelle funktioniert zuverlässig!
vielleicht ist ja dein .End(xlup).select nicht das geeignete Werkzeug, um leere Zellen zu finden.
je nach konstellation findest .End(xlup) auch mal gefüllte Zellen.
und der befehl funktioniert auch nur in einer Spalte.
wenn du Leerzellen suchst, ist vieleicht:

Range("E:G").SpecialCells(xlCellTypeBlanks)(1).Select


das geeignetere Mittel
falls das nicht klappt, solltest du mal ne Beispieldatei hochladen, damit klarer wird, was du eigentlich suchst.
Gruß, Daniel

Anzeige
AW: hat das einfügen der leerzeilen
13.03.2009 00:52:07
bully
unten steht nun der gesamte Code, vielleicht findest du einen Fehler.
ich habe es jetzt mehrmals getestet. Wenn ich den Code ein zweites Mal starte, sind alle Zellen mit einem Leerschlag weg! Also habe ich mir gedacht, ich starte nur den Replace Befehl ein zweits Mal sogar mit einer Wait-Funktion dazwischen, das Resultat bleibt aber das gleiche wie beim enfachen Durchlauf (es entstehen Leerzeilen in der abgespeicherten Datei). Lasse ich aber den ganzen Code zweimal durchlaufen, sind die Leerzeichen weg, und in der abgespeicherten Datei sind auch keine Leerzeilen mehr vorhanden.
Das kann ich mir nicht erklären. Weisst du worin der Unterschied besteht?
Gruss bully

Sub Eberdatei()
'Eberliste downloaden --->  Internetverbindung muss aktiv sein!!
Anfang:
If MsgBox("Eberliste Herunterladen? - Ja/Nein", vbYesNo + vbQuestion, " ") = vbYes Then
If MsgBox("Ist Ihre Internetverbindung aktiv?" & Chr(13) & Chr(13) & "Ziel-Diskette im  _
Laufwerk A: ?", _
vbOKCancel + vbQuestion, "Bitte prüfen Sie vor dem Download: ") = vbOK Then
Else
Worksheets("Eber").Activate
Exit Sub
End If
Else
Worksheets("Eber").Activate
Exit Sub
End If
'öffnen der Website und download der txt.datei mit Modul 5
download
'stoppt das Makro für 1 Sekunde
Application.Wait Now + TimeValue("00:00:01")
Application.DisplayAlerts = False
Application.ScreenUpdating = False
'öffnet die KB-Eber Datei und kopieert die Bestandeseber hinein
Workbooks.OpenText Filename:= _
"D:\Daten 09\Fredy\Temporär\Eber.txt", Origin:= _
xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
Range("A7").Select
Selection.EntireRow.Insert
Windows("Auswertung1.xls").Activate
Rows("3:17").Select
Selection.Copy
Windows("Eber.txt").Activate
Selection.EntireRow.Insert
'entfernt die überzähligen Leerzeilen
Dim f As Long
Dim LZ As Long
LZ = ActiveSheet.UsedRange.Rows.Count
Range("E7").Select
For f = f To LZ
If Len(ActiveCell.Value) = "0" _
Then Selection.EntireRow.Delete _
Else ActiveCell.Offset(1, 0).Select
Next f
'speichert die Datei unter neuem Namen
ActiveWorkbook.SaveAs Filename:="D:\Daten 09\Fredy\Temporär\Eber.txt", _
FileFormat:=xlText, CreateBackup:=False
ActiveWorkbook.Save
ActiveWindow.Close
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Range("E:G").Replace " ", "", LookAt:=xlWhole
Cells(20, 5).End(xlUp).Offset(1, 0).Select
If MsgBox("               Datei erfolgreich gespeichert               ", vbOKOnly) Then
Exit Sub
End If
End Sub


Anzeige
AW: hat das einfügen der leerzeilen
13.03.2009 02:03:47
Daniel
Hi
irgendwie hab ich nicht den Eindruck daß du so richtig kapierts, was du da machst.
schau dir mal die Reihenfolge von deinen Aktionen an, und gehe im zweifelsfall das Makro im Einzelstepmodus durch, vielleicht kommst du dann von alleine dahinter, wo der Fehler steckt, denn eigentlich ist ganz logisch, warum die Leerzeilen, die nur mit dem Leerschlag gelöscht wurden, nach dem Ersten durchlauf noch vorhanden sind.
Aber bevor du weiter programmierst, solltest du das hier lesen, verstehen und anwenden:
http://www.online-excel.de/excel/singsel_vba.php?f=78
Gruß, Daniel
Anzeige
AW: nun doch Leerzeilen einfügen
15.03.2009 19:35:43
bully
Hallo,
ich habe mir den genannten Link zu Gemühte geführt, und habe dabei gelernt, dass auch der Makrorecorder nicht optimiert, sonden nur macht was man ihm vorgibt.
Also habe ich meinen Code nochmals überarbeitet. Dabei bin ich zum Schluss gekommen, dass das einfügen der Leerzeilen mit CurrentRegion.count doch einfacher zum Ziel führen dürfte. Ich kriege es aber einfach nicht hin. Wie bringe ich die Anzahl der Leerzeilen in die txt-Datei? Ich habe das Archiv durchforstet, aber nichts passendes gefunden.
Unten findet ihr mein Code wie er im Moment aussieht.
Hat mir jemand einen Tipp
Gruss bully

Sub Eberdatei()
'Eberliste downloaden --->  Internetverbindung muss aktiv sein!!
Anfang:
'    If MsgBox("Eberliste Herunterladen? - Ja/Nein", vbYesNo + vbQuestion, " ") = vbYes Then
'      If MsgBox("Ist Ihre Internetverbindung aktiv?" & Chr(13) & Chr(13) & "Ziel-Diskette im  _
Laufwerk A: ?", _
'         vbOKCancel + vbQuestion, "Bitte prüfen Sie vor dem Download: ") = vbOK Then
'       Else
'         Worksheets("Eber").Activate
'         Exit Sub
'        End If
'      Else
'       Worksheets("Eber").Activate
'       Exit Sub
'    End If
'öffnen der Website und download der txt.datei mit Modul 5
'    download
'öffnet die KB-Eber Datei und kopieert die Bestandeseber hinein
Application.ScreenUpdating = False
Workbooks.OpenText Filename:= _
"D:\Daten 09\Fredy\Temporär\Eber.txt"
Windows("Auswertung2.xls").Activate
Range("E4:G18").Replace " ", "", LookAt:=xlWhole
Range("E4").CurrentRegion.Rows.Copy
'?    Windows("Eber.txt").Activate
'?    Sheets("Eber").Range("E7").Insert.CurrentRegion
'speichert die Datei unter neuem Namen
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="D:\Daten 09\Fredy\Temporär\Eber.txt", _
FileFormat:=xlText, CreateBackup:=False
ActiveWindow.Close
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Cells(20, 5).End(xlUp).Offset(1, 0).Select
If MsgBox("               Datei erfolgreich gespeichert               ", vbOKOnly) Then
Exit Sub
End If
End Sub


Anzeige
AW: nun doch Leerzeilen einfügen
16.03.2009 08:05:43
schauan
Hallo Bully,
nach dem Copy sehe ich kein Paste. Count zählt übrigens und fügt nicht ein. Schaue mal in die Excel-Hilfe. Da wird zwar immer mal was anderes gezählt, aber es wird g e z ä h l t.
Gruß, Andre
AW: nun doch Leerzeilen einfügen
16.03.2009 13:10:58
bully
Hallo Andre,
ich weis, dass ein Past fehlt, das wird dann noch dazu kommen. Mein Latein ist aber vorher schon am Anschlag. Ich weis nicht, wie die Abfolge der Befehle sein muss, dass ich mein Ziel erreiche. Meine Vorstellung lautet:
1. Bereich kopieren
2. Zeilen zählen
3. Wechsel in txt-Datei
4. gezählte Anzahl Zeilen einfügen
5. kopierter Bereich einfügen
Aber ich habe (fast) keine Ahnung wie das Code mässig aussehen soll. Der Makrorecorder funktionier mit dem Zeilen zählen leider nicht! Ich wäre dankbar für einen etwas ausführlichern Code, die enzelnen Befehle wurden schon fast alle genannt, aber wie muss ich die verschachteln?
Gruss bully
Anzeige
AW: nun doch Leerzeilen einfügen
16.03.2009 16:11:10
schauan
Hallo Bully,
was ist hier der Unterschied?
4. gezählte Anzahl Zeilen einfügen
5. kopierter Bereich einfügen
Einfügen kannst Du nur, was Du vorher kopiert hast. Nach dem Kopieren musst Du aufpassen, dass Du vor dem Einfügen keine Aktionen ausführst, die den Kopierstatus aufheben. Der Wechsel ist nicht unbedingt nötig, das kommt aber bei der Aufzeichnung so. Ist ja auch nicht schlimm.
Beim Zeilen zählen kommt es darauf an, was Du zählen willst und ob das überhaupt nötig ist. Du kannst z.B. leere Zeilen ausblenden, alles kopieren und im Ziel alles in A1 einfügen. Dann sollten die ausgeblendeten Zellen fehlen.
Diese Aktion kannst Du auch aufzeichnen. Ist eben nur die Frage, ob dass das ist, was Du willst.
Ich habe z.B. in Spalte A folgende Tabelle:
Arbeitsblatt mit dem Namen 'Tabelle1'
 A
1Wer
2Ich
3Du
4Er
5Ich
6Es

Mit dem folgenden Makro habe ich im Ziel nur noch die Überschrift und die beiden Ich.

Sub Makro1()
' Makro1 Makro
' Makro am 16.03.2009 von Andre aufgezeichnet
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="Ich"
Cells.Select
Selection.Copy
Sheets("Tabelle2").Select
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A1").Select
End Sub


Ist zwar nicht schön, aber funktioniert.
Gruß, ANdre

Anzeige
AW: nun doch Leerzeilen einfügen
16.03.2009 19:01:09
bully
Hallo Andre,
das ist mir soweit klar. Es ist aber nicht das was ich eigentlich bräuchte.
Ich habe in meiner Exel-Datei Datensätze die im Blatt in den Spalten E;F;G stehen. Das kann einmal nur 1 Datensatz sein, beim nächsten Mal aber 15, variabel eben. Genau diese Datensätze muss ich in der txt-Datei einfügen. Dort muss ich sie ab Zeile 7 zwischen bestehende Datensätze einfügen, das heisst oberhalb und unterhalg der einzufügenden Zeilen sind bereits Datensätze vorhanden.Die Zielspalten sind ebenfalls wieder E;F;G. Deshalb das Zeilen zählen, die Zeilen kopieren, den Dateiwechsel, das Zeilen einfügen und am Schluss das Werte einfügen. Das sind die Einzelschritte, dass da das Eine oder Andere mit einem Behfehl zu machen ist, kann schon sein, weis ich aber eben nicht. Deshalb versuche ich hier ja auch Hife zu bekommen.
Gruss bully
Anzeige
AW: nun doch Leerzeilen einfügen
16.03.2009 21:39:15
schauan
Hallo bully,
sorry, wenn wir nicht so schnell mit einer Lösung zur Hand sind, aber auch die Antworter verstehen nicht immer gleich, was genau los ist, oder sehen verschiedene Möglichkeiten, wo man erst auf was passendes hin arbeiten muss.
Also nicht die Geduld verlieren, wir schaffen das schon.
Wäre es machbar, die Daten auszuschneiden und in der txt als "ausgeschnittene Zellen" einzufügen? Dann werden die Daten ja automatisch heruntergeschoben.
Was steht eigentlich ausserhalb E:G? Ist dort nichts? Dann bekommst Du die letzte Zeile z.B. mit
Cells.SpecialCells(xlCellTypeLastCell).Row
und kannst danach die Zeilenzahl ausrechnen - falls Ausschneiden nicht geht.
Eine Möglichkeit wäre auch
Cells.SpecialCells(xlCellTypeConstants).Address
Grüße, ANdre
AW: nun doch Leerzeilen einfügen
16.03.2009 23:25:41
bully
Hallo Andre,
ich wollte nicht drängen, aber ich versuche schon über mehrere Tage eine Lösung für mein Problem zu erhalten, bekomme aber nur ganz allgemeine Tipps. Die ich zum Teil schon kannte, aber nicht zur gewünschten Lösung führten. Ich habe mich zu sehr auf den Befehl CurrentRegion fixiert. Heute Abend habe ich das Archiv nach dem Begriff "Zeilen einfgügen" durchforstet, und siehe da, etwa auf der 20.ten Seite habe ich ein Code gefunden der ziemlich genau dem entsprach, was ich suchte. Nach ein paar wenigen Anpassungen hatte ich was ich braute.
Das soll jetzt kein Vorwurf an die Antwortenden sein, denn es ist mir auch klar, dass manchmal zuwenig klar formuliert wird, was genau gesucht wird. Aber manchmal ist das Formulieren der Frage eben auch nicht ganz einfach, wenn man nicht weis, welchen Weg man gehen muss, oder kann, um ans Ziel zu kommen.
Bleibt mir noch zu danken für deine Mühe.
Gruss bully
P.S.: Der vollständigkeit halber noch den Code wie ich ihn nun benutze um die variable Zeilenzahl aus meinem Excelsheet in die txt-Datei zu kopieren. (die Zeilen werden am Ende der txt-Datei eingefügt, das Tüpfelchen auf dem i wäre natürlich, die Zeilen würden vor der Zeile 7 eingefügt. Aber ich kann es so auch verwenden)
' BereichKopieren()
     Dim ws As Worksheet, wsZ As Worksheet, efz%, i%, leer As Boolean
     Dim c As Range, Bereich As Range
     Set ws = ThisWorkbook.Worksheets("Eber")
     Set wsZ = Workbooks("Eber.txt").Worksheets("Eber")
        
     For i = 4 To 18
        If ws.Cells(i, 5).Value <> 0 Then
            efz = wsZ.Cells(Rows.Count, 5).End(xlUp).Row + 1
            ws.Rows(i).Copy
            wsZ.Cells(efz, 1).PasteSpecial Paste:=xlPasteValues
            Application.CutCopyMode = False
        End If
      Next i

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige