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

Zeilen löschen

Zeilen löschen
12.06.2013 11:25:22
Werner
Hallo zusammen,
Das Makro zum löschen der Zeile, wenn in der Spalte C etwas eingetragen ist, fuktioniert. Wenn mit If Cells(i, 3) > "" Then z.B. ein Eintrag in C3 gefunden wird, steht in E3 ein Name. Mit diesem Namen gibt es noch einen Eintrag, wo in der Spalte C nichts steht. Diese Zeile soll auch mit gelöscht werden.
Kann mir da einer helfen?
Sub ZeilenLöschenSpalteC()
'Zeilen löschen wenn in Spalte C ein Eintrag steht
Dim i As Long
Application.ScreenUpdating = False
For i = Cells(Rows.Count, 3).End(xlUp).Row To 2 Step -1
If Cells(i, 3) > "" Then Rows(i).Delete
Next i
Application.ScreenUpdating = True
End Sub

Gruß Werner

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen löschen
12.06.2013 11:28:21
Hajo_Zi
Hallo Werner,

If Cells(i, 3) > "" Then
Rows(i).Delete
Rows(i+1).Delete
I=I+1
End if


AW: Zeilen löschen
12.06.2013 11:41:10
Werner
Hallo Hajo,
Das geht noch nicht. Es werden zwar die Zeilen gelöscht, wo in Spalte C was steht.
Es müste vieleicht der Name Aus Spalte E in eine Variable geschrieben werden und danach mit dieser in der Spalte E den Namen suchen und diese Zeile auch löschen.
Gruß Werner

AW: Zeilen löschen
12.06.2013 11:42:48
Hajo_Zi
Hallo Werner,
ich kann nur raten. Jetzt trifft der Tipp von Klaus zu.
Gruß Hajo

Anzeige
AW: Zeilen löschen
12.06.2013 11:29:33
Klaus
Hallo Werner,
lädst du eine kleine Musterdatei hoch bitte?
Grüße,
Klaus M.vdT.

welches Blatt?
12.06.2013 11:48:21
Klaus
Hallo Werner,
lass mich doch bitte nicht rumsuchen.
In welchem Blatt möchtest du "C ist leer, dann Namen aus E" löschen, und wo steht der Code den du bisher hast?
Grüße,
Klaus M.vdT.

AW: welches Blatt?
12.06.2013 11:54:16
Werner
Hallo Klaus,
im Blatt Eingaben.
Gruß Werner

deine Aufgabe kann nicht korrekt formuliert sein!
12.06.2013 11:54:37
Klaus
Hallo Werner,
ich beziehe mich mal auf den Blatt "Eingabe". Wir tuen mal so, als würden die Zeilen nur geleert werden und nicht gelöscht, damit wir über Zeilenindices sprechen können.
Das Makro findet in C12 eine Zahl, geht weiter.
in C11 steht nichts. Zeile geleert. Name "Thomas" gemerkt
C10 = leer, Zeile leeren, Namen +"Judith"
C9 = leer, Zeile leeren, Namen +"Andreas
C8,C7,C6
C5 leeren, Namen +Franz
C4 leeren, Namen +Frank
C3 leeren, Namene +Stephan
C2 leeren, Namen + Andreas
Namensliste ohne Doppler: "Thomas Judith Andreas Franz Frank Stephan"
Zeilen noch vorhanden: 6-8 und 12.
Zeile 6, Name Andreas, löschen
Zeile 7, Name Stephan, löschen
Zeile 8, Name Franz, löschen
Zeile 12, Name Judith, löschen.
noch übrig: nix.
Also, so wie du deine Aufgabe geschildert hast willst du einfach das gesamte Blatt löschen? Das geht auch in einer Zeile, mit "cells.clearcontents" :-)
Beschreib bitte nochmal die Aufgabe am Beispielblatt, am besten in Prosa und nicht in Code.
Grüße,
Klaus M.vdT.

Anzeige
Ansatz:
12.06.2013 11:46:45
Klaus
Hi Werner,
einen Lösungsansatz habe ich, siehe Anbei. Du musst die erste Schleife auf jedem Fall zuende laufen lassen, bevor du die Zeilen mit den gefundenen Namen löscht - sonst gibt es chaos mit der Zeilenzuordnung!
Hast du Randsituationen, zB kann in E ein Name doppelt vorkommen usw?
Sub ZeilenLöschenSpalteC()
'Zeilen löschen wenn in Spalte C ein Eintrag steht
Dim i As Long
dim NamenSammeln as string
Application.ScreenUpdating = False
For i = Cells(Rows.Count, 3).End(xlUp).Row To 2 Step -1
If Cells(i, 3) > "" Then
Namensammeln = namensammeln & cells(i,5).value & ","
Rows(i).Delete
end if
Next i
'AB HIER PSEUDOCODE
MeinArray = split namensammeln ","
Autofilter setzen E2:Exxx
Filtern nach MeinArray
specialcells(visible) löschen
Autofilter aufheben
'ENDE PSEUDOCODE
Application.ScreenUpdating = True
End Sub
Aus dem Pseudocode baue ich dir gerne funktionalen Code, aber nur in einer Musterdatei von dir!
Grüße,
Klaus M.vdT.

Anzeige
AW: Ansatz:
12.06.2013 11:52:10
Werner
Hallo Klaus,
in der Tabelle dürfte der Name immer nur 2 mal enthalten sein, da ich den Eintrag von der Ausfahrt und den für die Einfart löschen möchte.
Gruß Werner

AW: Ansatz:
12.06.2013 11:55:39
Klaus
Hallo Werner,
in der Tabelle dürfte der Name immer nur 2 mal enthalten sein
ist aber in der Musterdatei nicht so!
Lade bitte eine Musterdatei hoch, in der die Voraussetzungen auch stimmen - sonst kann niemand helfen!
Grüße,
Klaus M.vdT.

innere Schleife
12.06.2013 11:56:57
Matthias
Hallo Werner
Option Explicit
Sub ZeilenLöschenSpalteC()
'Zeilen löschen wenn in Spalte C ein Eintrag steht
Dim i As Long, e As Long, strg$
Application.ScreenUpdating = False
For i = Cells(Rows.Count, 3).End(xlUp).Row To 2 Step -1
If Cells(i, 3) > "" Then
If Cells(i, 5) > "" Then strg = Cells(i, 5).Value
e = i - 1
For e = Cells(Rows.Count, 5).End(xlUp).Row To 2 Step -1
If strg = Cells(e, 5) Then Rows(e).Delete
Next
Rows(i).Delete
End If
Next i
Application.ScreenUpdating = True
End Sub
Gruß Matthias

Anzeige
AW: innere Schleife
12.06.2013 12:46:57
Werner
Hallo Matthias,
die Lösung funktioniert nicht richtig.
Die Zeilen werden richtig gelöscht, aber zum Schluß wird noch die letzte Zeile gelöscht.
Gruß Werner

Fehler gefunden ( i = i -1 )
12.06.2013 23:35:22
Matthias
Hallo
Option Explicit
Sub ZeilenLöschenSpalteC()
'Zeilen löschen wenn in Spalte C ein Eintrag steht
Dim i As Long, e As Long, strg$
Application.ScreenUpdating = False
For i = Cells(Rows.Count, 3).End(xlUp).Row To 2 Step -1
If Cells(i, 3) > "" Then
If Cells(i, 5) > "" Then strg = Cells(i, 5).Value
e = i - 1
For e = Cells(Rows.Count, 5).End(xlUp).Row To 2 Step -1
If strg = Cells(e, 5) Then Rows(e).Delete: i = i - 1
Next
Rows(i).Delete
End If
Next i
Application.ScreenUpdating = True
End Sub
Userbild

Anzeige
AW: Fehler gefunden ( i = i -1 )
13.06.2013 09:06:29
Werner
Hallo Matthias,
es geht immer noch nicht. Ich versuche mal es zu erklären.
Immer wenn Cells(e, 5) = "Name" also e=1 springt also noch in die erste Zeile.
Beim ersten Durchlauf wird die Zeile 10 + 4 gelöscht ist richtig aber auch bei e=1 Zeile 8 der Name Thomas ist falsch.
Beim Zweiten Durchlauf wird Franz gelöscht ist richtig aber auch der Name Judith bei e=1 falsch.
https://www.herber.de/bbs/user/85799.xlsm
Gruß Werner

Rows(i).Delete muss weiter hoch im Code
13.06.2013 10:29:45
Matthias
Hallo
und ein Exit For extra, da beim ersten Fund die innere Schleife abbrechen kann.
Sub ZeilenLöschenSpalteC()
'Zeilen löschen wenn in Spalte C ein Eintrag steht
Dim i As Long, e As Long, strg$
Application.ScreenUpdating = False
For i = Cells(Rows.Count, 3).End(xlUp).Row To 2 Step -1
If Cells(i, 3) > "" Then
If Cells(i, 5) > "" Then strg = Cells(i, 5).Value
Rows(i).Delete
e = i - 1
For e = Cells(Rows.Count, 5).End(xlUp).Row To 2 Step -1
If strg = Cells(e, 5) Then Rows(e).Delete: i = i - 1: Exit For
Next
End If
Next i
Application.ScreenUpdating = True
End Sub
Sollte nun klappen
Gruß Matthias

Anzeige
AW: Rows(i).Delete muss weiter hoch im Code
13.06.2013 14:50:00
Werner
Hallo Hallo Matthias,
jetzt klappt es, danke für Deine Mühe.
Gruß Werner

Danke für Deine Rückmeldung ... kwT
14.06.2013 10:12:03
Matthias

Ganz anderer Ansatz: AW: Zeilen löschen
12.06.2013 12:11:22
Klaus
Hallo Werner,
neuer Ansatz, ganz ohne Namensdoppler usw:
Zähl doch einfach das vorkommen des Nummernschildes in einer Hilfsspalte!
Ab J2 runterkopieren:
=Zählenwenn(D:D;D2)
Ist das Ergebnis eine gerade Zahl, ist das Auto verfügbar. Ist das Ergebnis eine ungerade Zahl, ist das Auto grad unterwegs.
Jetzt kannst du im VBA einfach alle Zeilen löschen, in denen in J eine gerade Zahl steht.
Das würde ich OHNE Schleife machen, mit dem Zelle-Fehler Trick. Kopiere ab J2 diese Formel nach unten:
=1/rest(zählenwenn(D:D;D2);2)
Das VBA-Kommando, um alle verfügbaren Autos zu löschen, ist jetzt super simpel:
Columns("J:J").SpecialCells(xlCellTypeFormulas, 16).EntireRow.Delete
Grüße,
Klaus M.vdT.

Anzeige
Ganz anderer Ansatz: AW: Zeilen löschen
12.06.2013 12:44:39
Werner
Hallo Klaus,
die Lösung mit der Hilfsspalte funktioniert.
Gruß Werner

Danke für die Rückmeldung! owT.
12.06.2013 12:52:36
Klaus
.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige