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

Habe noch was schwieriges, Zeilen löschen

Habe noch was schwieriges, Zeilen löschen
Walter
Hallo zusammen,
habe noch was schrieriges.
Ich möchte gern in einer Tabelle von einer doppelten Zeile 1Zeile löschen aber
nach einer Prüfung.
Also die Tabelle von A6 bis M... reicht der Bereich, das Ende ist die letzte belegte
Zelle in der Spalte A .
Wenn die Nummer in der Spalte gleich ist aber in der Spalte L das Datum ebenfalls gleich ist,
soll eine Zeile von der doppelten gelöscht werden.
mfg Walter MB
AW: Habe noch was schwieriges, Zeilen löschen
03.03.2010 16:19:15
Josef

Hallo Walter,
Nummer steht in A, Datum in L.

Sub loescheZeilen()
  Dim rng As Range
  Dim lngLast As Long
  
  On Error GoTo ErrExit
  Application.ScreenUpdating = False
  
  With ActiveSheet
    lngLast = Application.Max(2, .Cells(.Rows.Count, 1).End(xlUp).Row)
    .Columns(14).Insert
    .Range(.Cells(2, 14), .Cells(lngLast, 14)).Formula = "=SUMPRODUCT((A2:$A$2=A2)*(L2:$L$2=L2))"
    .Range("A1:N" & lngLast).AutoFilter field:=14, Criteria1:="<>1", Operator:=xlAnd
    On Error Resume Next
    .Range("A2:N" & lngLast).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    On Error GoTo ErrExit
    .Range("A1:N" & lngLast).AutoFilter
    .Columns(14).Delete
  End With
  
  ErrExit:
  Application.ScreenUpdating = True
End Sub

Gruß Sepp

Anzeige
Hallo Sepp, peinlich
03.03.2010 16:26:42
Walter
Hallo Sepp,
ist mir peinlich, es soll die Zeile gelöscht werden von der das DATUM in der
Spalte L kleiner ist.
Also von der doppelten Nummer in Spalte A davon das Datum in Spalte L kleiner !
Sorry,
mfg Walter MB
AW: Hallo Sepp, peinlich
03.03.2010 16:33:13
Josef

Hallo Walter,
ja ja der Schapps ;-))
Ist kein Problem.

Sub loescheZeilen()
  Dim rng As Range
  Dim lngLast As Long
  
  On Error GoTo ErrExit
  Application.ScreenUpdating = False
  
  With ActiveSheet
    lngLast = Application.Max(2, .Cells(.Rows.Count, 1).End(xlUp).Row)
    .Columns(14).Insert
    .Cells(2, 14).FormulaArray = "=SUMPRODUCT((A2:$A$2=A2)*(L2:$L$2<MAX(IF($A$2:$A$27=A2,$L$2:$L$27))))"
    .Range(.Cells(2, 14), .Cells(lngLast, 14)).FillDown
    .Range(.Cells(2, 14), .Cells(lngLast, 14)) = .Range(.Cells(2, 14), .Cells(lngLast, 14)).Value
    .Range("A1:N" & lngLast).AutoFilter field:=14, Criteria1:="<>1", Operator:=xlAnd
    On Error Resume Next
    .Range("A2:N" & lngLast).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    On Error GoTo ErrExit
    .Range("A1:N" & lngLast).AutoFilter
    .Columns(14).Delete
  End With
  
  ErrExit:
  Application.ScreenUpdating = True
End Sub

Gruß Sepp

Anzeige
Hiermit wird alles gelöscht
03.03.2010 16:43:58
Walter
Hallo Sepp, das erste Makro war ok., bis auf die Zeilen wo
das Datum unterschiedlich ist.
Hiermt wird bis Zeile 2 alles gelöscht.
mfg walter mb
AW: Hiermit wird alles gelöscht
03.03.2010 16:51:00
Josef

Hallo Walter,
"Hiermit wird alles gelöscht"
Ja, weil meine Formel Käse ist, jetzt sollte es tun.

Sub loescheZeilen()
  Dim rng As Range
  Dim lngLast As Long
  
  On Error GoTo ErrExit
  Application.ScreenUpdating = False
  
  With ActiveSheet
    lngLast = Application.Max(2, .Cells(.Rows.Count, 1).End(xlUp).Row)
    .Columns(14).Insert
    .Cells(2, 14).FormulaArray = "=(L2=MAX(IF($A$2:$A$7=A2,$L$2:$L$7)))*1"
    .Range(.Cells(2, 14), .Cells(lngLast, 14)).FillDown
    .Range(.Cells(2, 14), .Cells(lngLast, 14)) = .Range(.Cells(2, 14), .Cells(lngLast, 14)).Value
    .Range("A1:N" & lngLast).AutoFilter field:=14, Criteria1:="<>1", Operator:=xlAnd
    On Error Resume Next
    .Range("A2:N" & lngLast).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    On Error GoTo ErrExit
    .Range("A1:N" & lngLast).AutoFilter
    .Columns(14).Delete
  End With
  
  ErrExit:
  Application.ScreenUpdating = True
End Sub

Gruß Sepp

Anzeige
Hallo Sepp irgenwie habe ich
03.03.2010 17:13:29
Walter
Hallo Sepp,
ab Zeile 6 stehen die Werte, die Zeile 5 ist die Überschriftszeile,
habe gerade geändert, aber jetzt habe ich wohl MIST gebaut.
Das 1.Makro klappt, nur die doppelten wo das Datum unterschiedlich
ist waren noch drin.
mfg Walter mb
Hier nochmal das Makro was ich
03.03.2010 17:20:26
Walter
Hallo Sepp,
dieses Makro habe ich angepasst u. läuft soweit.
Jetzt müssen die noch raus die doppelt aber wenn das
Datum in der Spalte L unterschiedlich ist, soll die Zeile raus wo das Datum kleiner ist !
mfg walter mb
Nachtrag
03.03.2010 16:29:54
Walter
Hallo Sepp,
ich habe neben der Tabelle / Bereich erst dab Spalte "T" alles Frei,
mfg walter mb
Anzeige
AW: Nachtrag
03.03.2010 16:34:26
Josef

Hallo Walter,
das ist egal, weil ich ja eine Spalte einfüge und anschliessend wieder lösche.

Gruß Sepp

Geil, aber habe noch
03.03.2010 16:37:52
Walter
Hallo Sepp,
bin begeistert, es wurden alle gelöscht wo das Datum gleich ist in Spalte M.
Jetzt sollte noch geprüft werden wenn ein Datum kleiner ist, die Zeile mit dem
kleineren Datum löschen.
mfg walter mb
Anzeige
So habe ich nur die...
03.03.2010 16:52:10
Walter
Hallo Sepp,
so habe ich nur die doppelten drin.
Dim rng As Range
Dim lngLast As Long
On Error GoTo ErrExit
Application.ScreenUpdating = False
With ActiveSheet
lngLast = Application.Max(6, .Cells(.Rows.Count, 1).End(xlUp).Row)
.Columns(14).Insert
.Range(.Cells(6, 14), .Cells(lngLast, 14)).Formula = "=SUMPRODUCT((A6:$A$6=A6)*(L6:$L$6=L6))"
.Range("A5:N" & lngLast).AutoFilter field:=14, Criteria1:="1", Operator:=xlAnd
On Error Resume Next
.Range("A6:N" & lngLast).SpecialCells(xlCellTypeVisible).EntireRow.deLete
On Error GoTo ErrExit
.Range("A5:N" & lngLast).AutoFilter
.Columns(14).deLete
End With
ErrExit:
Application.ScreenUpdating = True
mfg walter mb
Anzeige
OT wieso deLete und nicht Delete ? o.w.T.
03.03.2010 16:55:17
Reinhard


istdoch das selbe,...
03.03.2010 17:02:33
mumpel
Hallo!
... war vermutlich nur ein Schreibfehler. Manchmal aber hat VBA merkwürdige Mucken. Da werden einige Parameter automatisch einfach klein geschrieben (z.B. .text anstatt .Text). Aber das Ergebnis ist das selbe.
Gruß, René
AW: istdoch das selbe,...
03.03.2010 17:05:36
Reinhard
Hallo René,
aha, kannte ich so überhaupt nicht bei Delete u.ä.
Kenne das nur von so Argumenten wie savechanges:=True u.ä.
Gruß
Reinhard
Editor ändert deLete nicht in Delete?
03.03.2010 21:08:21
Reinhard
Hallo Wissende,
Frage noch offen weil mich das interessiert.
Es ist mir völlig unbekannt daß der Editor Begriffe wie delete range cells worksheets u.v.m. NICHT umwandelt in Delete Range Cells Worksheets
Bekannt ist es mir wie gesagt bei Args wie bei savechanges:= u.v.m.
Jetzt wollte ich nur wissen ob ich bisher "Glück hatte" oder ob sowas durchaus geschehen kann.
Danke ^ Gruß
Reinhard
Anzeige
AW: Habe noch was schwieriges, Zeilen löschen
03.03.2010 17:20:51
Josef

Hallo Walter,
wir sollten wohl beide auf Entzug gehen ;-))))))))))))))
Ich hab auch wieder Mist gebaut, aber jetzt sollte es entgültig klappen.

Sub loescheZeilen()
  Dim rng As Range
  Dim lngLast As Long
  
  On Error GoTo ErrExit
  Application.ScreenUpdating = False
  
  With ActiveSheet
    lngLast = Application.Max(6, .Cells(.Rows.Count, 1).End(xlUp).Row)
    .Columns(14).Insert
    .Cells(6, 14).FormulaArray = "=(L6=MAX(IF($A$6:$A$" & lngLast & "=A6,$L$6:$L$" & lngLast & ")))*1"
    .Range(.Cells(6, 14), .Cells(lngLast, 14)).FillDown
    .Range(.Cells(6, 14), .Cells(lngLast, 14)) = .Range(.Cells(6, 14), .Cells(lngLast, 14)).Value
    .Range("A5:N" & lngLast).AutoFilter field:=14, Criteria1:="<>1", Operator:=xlAnd
    On Error Resume Next
    .Range("A6:N" & lngLast).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    On Error GoTo ErrExit
    .Range("A5:N" & lngLast).AutoFilter
    .Columns(14).Delete
  End With
  
  ErrExit:
  Application.ScreenUpdating = True
End Sub

Gruß Sepp

Anzeige
Guten Abend Sepp
03.03.2010 21:57:03
walter
Hallo Sepp,
soweit ich das beurteilen kann, hatte es geklappt, werde allerdings
morgen in der Fa. nochmals testen, weil ich die Unterlagen vergessen habe.
Melde mich morgen Früh,
mfg walter mb
Guten Morgen Sepp
04.03.2010 09:13:53
Walter
Guten Morgen Sepp,
habe jetzt getestet.
Es bleiben jetzt die noch stehen, wo das Datum in der Spalte L
GLEICH ist, eine Zeile kann dann raus.
Ich meine das hattest Du im 1. Makro hinterlegt, will aber
jetzt nicht reinfuschen.
Übrings haben wir beide NICHT getrunken, ich habe mich halt auch nicht direkt
vernünftig ausgedrückt.
mfg walter mb
Test mit 1.Makro einwandfrei
04.03.2010 09:17:48
Walter
Hallo Sepp,
habe gerade das 1. Makro anschließend auch laufen lassen,
einwandfrei !
Jetzt müsste man dies in einem Verbinden.
PS. kannst Du mir mal davor oder dahinter beschreiben was da abläuft ?
mfg walter mb
Anzeige
AW: Test mit 1.Makro einwandfrei
04.03.2010 10:36:40
Josef

Hallo Walter,
dann sollte der folgende Code alles auf einmal erledigen.

Sub loescheZeilen()
  Dim rng As Range
  Dim lngLast As Long
  
  On Error GoTo ErrExit
  Application.ScreenUpdating = False
  
  With ActiveSheet
    lngLast = Application.Max(6, .Cells(.Rows.Count, 1).End(xlUp).Row)
    .Columns(14).Insert
    .Cells(6, 14).FormulaArray = "=(L6+ROW()*10^-9=MAX(IF($A$6:$A$" & lngLast & "=A6,$L$6:$L$" & lngLast & "+ROW($6:$17)*10^-9)))*1"
    .Range(.Cells(6, 14), .Cells(lngLast, 14)).FillDown
    .Range(.Cells(6, 14), .Cells(lngLast, 14)) = .Range(.Cells(6, 14), .Cells(lngLast, 14)).Value
    .Range("A5:N" & lngLast).AutoFilter field:=14, Criteria1:="<>1", Operator:=xlAnd
    On Error Resume Next
    .Range("A6:N" & lngLast).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    On Error GoTo ErrExit
    .Range("A5:N" & lngLast).AutoFilter
    .Columns(14).Delete
  End With
  
  ErrExit:
  Application.ScreenUpdating = True
End Sub

Gruß Sepp

Da hat sicher der Teufel seine hand dran...
04.03.2010 10:44:38
Josef

Hallo Walter,
..., weil ich den Code schon wieder verbockt habe!
Das sollte es aber entgültig sein.


Sub loescheZeilen()
  Dim rng As Range
  Dim lngLast As Long
  
  On Error GoTo ErrExit
  Application.ScreenUpdating = False
  
  With ActiveSheet
    lngLast = Application.Max(6, .Cells(.Rows.Count, 1).End(xlUp).Row)
    .Columns(14).Insert
    .Cells(6, 14).FormulaArray = "=(L6+ROW()*10^-9=MAX(IF($A$6:$A$" & lngLast & "=A6,$L$6:$L$" & lngLast & "+ROW($6:$" & lngLast & ")*10^-9)))*1"
    .Range(.Cells(6, 14), .Cells(lngLast, 14)).FillDown
    .Range(.Cells(6, 14), .Cells(lngLast, 14)) = .Range(.Cells(6, 14), .Cells(lngLast, 14)).Value
    .Range("A5:N" & lngLast).AutoFilter field:=14, Criteria1:="<>1", Operator:=xlAnd
    On Error Resume Next
    .Range("A6:N" & lngLast).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    On Error GoTo ErrExit
    .Range("A5:N" & lngLast).AutoFilter
    .Columns(14).Delete
  End With
  
  ErrExit:
  Application.ScreenUpdating = True
End Sub

Gruß Sepp

...oder Bockbier vom (Ziegen)Bock ;-)) owT
04.03.2010 10:46:46
Renee

Wer wird hier entgolten..., Sepp?
04.03.2010 15:00:05
Luc:-?
Oder war's das jetzt endlich… ;-)
Gruß Luc :-?
So langsam ist es mir peinlich
04.03.2010 20:52:38
walter
Hallo Sepp,
konnte jetzt erst das Makro prüfen.
Leider klappt das letzte Makro nicht.
Aber diese beide hintereinander durchlaufen lasse alles o.k.
Public Sub Doppelte_Zeile_Löschen()
Dim rng As Range
Dim lngLast As Long
On Error GoTo ErrExit
Application.ScreenUpdating = False
With ActiveSheet
lngLast = Application.Max(6, .Cells(.Rows.Count, 1).End(xlUp).Row)
.Columns(14).Insert
.Cells(6, 14).FormulaArray = "=(L6=MAX(IF($A$6:$A$" & lngLast & "=A6,$L$6:$L$" & lngLast & " _
)))*1"
.Range(.Cells(6, 14), .Cells(lngLast, 14)).FillDown
.Range(.Cells(6, 14), .Cells(lngLast, 14)) = .Range(.Cells(6, 14), .Cells(lngLast, 14)). _
Value
.Range("A5:N" & lngLast).AutoFilter field:=14, Criteria1:="1", Operator:=xlAnd
On Error Resume Next
.Range("A6:N" & lngLast).SpecialCells(xlCellTypeVisible).EntireRow.Delete
On Error GoTo ErrExit
.Range("A5:N" & lngLast).AutoFilter
.Columns(14).Delete
End With
ErrExit:
Application.ScreenUpdating = True
Call loescheZeilen
End Sub
Sub loescheZeilen()
Dim rng As Range
Dim lngLast As Long
On Error GoTo ErrExit
Application.ScreenUpdating = False
With ActiveSheet
lngLast = Application.Max(6, .Cells(.Rows.Count, 1).End(xlUp).Row)
.Columns(14).Insert
.Range(.Cells(6, 14), .Cells(lngLast, 14)).Formula = "=SUMPRODUCT((A6:$A$6=A6)*(L6:$L$6=L6))"
.Range("A5:N" & lngLast).AutoFilter field:=14, Criteria1:="1", Operator:=xlAnd
On Error Resume Next
.Range("A6:N" & lngLast).SpecialCells(xlCellTypeVisible).EntireRow.Delete
On Error GoTo ErrExit
.Range("A5:N" & lngLast).AutoFilter
.Columns(14).Delete
End With
ErrExit:
Application.ScreenUpdating = True
End Sub herzlichst Walter wb
AW: So langsam ist es mir peinlich
04.03.2010 21:33:53
Josef

Hallo Walter,
also wenn deine Vorgaben stimmen, dann wir durch das letzte Makro aus dieser Tabelle
Userbild
diese hier
Userbild
das sollte doch passen, oder?

Gruß Sepp

Ja aber
05.03.2010 20:53:22
walter
Guten Abend Sepp,
ja das müßte ja stimmen. Wenn ich die beiden Makros
laufen lasse, werden ja im 2. Makro von der doppelten Nummer wird dann das
kleinere Datum in Spalte L gelöscht.
Mit dem letzten Makro was beides durchführen sollte, klappt es nicht.
Ich kann aber auch die beiden Makros so laufen lassen.
Ich möchte kein Streß machen.
mfg walter MB
AW: Ja aber
05.03.2010 21:59:52
Josef

Hallo Walter,
das ist kein Stress. Erstelle doch mal eine kleine Beispieldatei wo es mit meinem letzten Code nicht klappt.

Gruß Sepp

Hallo Sepp
08.03.2010 15:30:19
Walter
Hallo Sepp,
habe die 2 Makros hintereinander im MOMENT gelassen.
Funktioniert einwandfrei.
Bin gleich und morgen nicht im Haus.
Die Datei enthält viele Daten, deshalb muß ich mal sehen wie das mache.
Melde mich,
mfg walter MB
AW: Hallo Sepp
08.03.2010 22:00:32
Hajo_Zi
Halo Walter,
warum offen, soll Sepp vorbeikommen dann hättest Du es auch schreiben müssen.

Du hast Recht --))
09.03.2010 08:27:27
Walter
Guten Morgen Hajo,
Du hast RECHT, wird geschlossen.
mfg walter mb

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige