Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
896to900
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
896to900
896to900
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Datum kleiner als - Zeile löschen

Datum kleiner als - Zeile löschen
23.08.2007 17:28:22
Larissa

Hallo,
ich möchte mit einem Makro alle Zeilen löschen, bei denen das Datum in dem markierten Bereich einer Spalte kleiner ist, als das vorher selektierte Datum (lastdate)
Ich kann das nicht so einfach erklären, deshalb habe ich mal die Mappe beigefügt mit einem Makro, mit dem es nicht funktioniert. Vielleicht weiß jemand, was da falsch läuft.
https://www.herber.de/bbs/user/45330.xls
Vielen Dank,
LArissa

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datum kleiner als - Zeile löschen
23.08.2007 18:45:06
Daniel
hi
du arbeitest zuviel mit SELECT !!!!!
wenn du der Variable LastDate den Wert zuweist, hast du voher schon in deinem Makro das Datum in der Zeile selektiert, in der BALANCE steht, daher ist das LastDate immer der 18.06.07.
Wenn jetzt LastDate ein vom Anwender ausgewähltes Datum sein soll, muß die Zeile
lastdate = Selection
ganz am Anfang stehen (dh. direkt nach den Variablendeklarationen mit DIM, und auf jeden Fall, bevor du selber im Makro ein .Select verwendest.
Gruß, Daniel

AW: Datum kleiner als - Zeile löschen
23.08.2007 19:08:49
Larissa
Hallo Daniel,
Ich bin noch sehr unerfahren und muss noch lernen, wie man auf das "böse" SELECT verzichten kann ;-)
In etwa habe ich verstanden, was Du meinst und habe das Makro etwas abgeändert, so dass das erste Datum der Selection mit selektiert ist. Aber warum werden auch Daten gelöscht, die größer (also später) als der 18.06.07 sind? Wie z.B. der 14.07.07 ? Oder kann man das "kleiner als" Zeichen nicht für Datum nehmen?
https://www.herber.de/bbs/user/45336.xls
Vielen dank nochmal für Hilfe,
Lieben Gruß,
Larissa

Anzeige
AW: Datum kleiner als - Zeile löschen
23.08.2007 19:53:04
Daniel
Hi
das mit dem Grösser/Kleiner hat ja Harry schon geklärt.
als Datum kommt der 1.1.2007 natürlich NACH dem 2.1.2006, bei einem Stringvergleich (so,wie LastDate ursprünglich defniert hattest) kommt der 1.1.2007 VOR dem 2.1.2006 weil bei Strings zunächsteinmal das 1. Zeichen ausschlaggebend ist.
(Deswegen ist es bei uns in der Firma Vorgabe, das Datum immer so anzugeben: 2007-12-24, dann ist die Sortierung auch als String immer richtig (merkt man ganz Schnell, wenn man das Datum als Teil des Dateinamens verwendet.)
ich würde das ganze so umschreiben, denn die erste FOR-Schleife kannst du durch die FIND-Funktion ersetzten, man muß nur die Parameter richtig einstellen, so daß von unten nach oben gesucht wird:

Sub datum()
Dim lastdate As Date
Dim sel As Range
Columns(1).Find(what:="Balance", after:=Cells(Rows.Count, 1), searchdirection:=xlPrevious). _
Offset(0, 1).Select
lastdate = Selection
neu:
For Each sel In Range(ActiveCell, Cells(Rows.Count, 1).End(xlUp).Offset(0, 1))
If sel.Value  "" Then
sel.EntireRow.Delete
GoTo neu
Else
End If
Next
End Sub


je nach dem, ob jetzt LastDate das Datum bei "Balance" oder ein vom Anwender ausgewähltes Datum sein soll, muß jetzt die Zeile "lastDate = selection" NACH oder VOR der Zeile Columns(1).FIND... stehen.
Gruß, Daniel

Anzeige
AW: Datum kleiner als - Zeile löschen
23.08.2007 18:57:00
Harry
Hallo Larissa,
meinst Du vielleicht so?
Option Explicit

Sub datum()
Dim I As Long
For I = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If Cells(I, 1).Value = "Balance" Then
Cells(I, 1).Select
Exit For
End If
Next I
ActiveCell.Offset(0, 1).Select
Dim lastdate As Date 'Wichtig: Datumskonstanten werden nach anderen Wertekriterien  _
sortiert als Zeichenfolgenkonstanten!
lastdate = Selection.Value
Range(ActiveCell.Offset(1, 0), Cells(Rows.Count, 1).End(xlUp).Offset(0, 1)).Select
Dim sel As Range
neu:
For Each sel In Selection
If sel.Value  "" Then
sel.EntireRow.Delete
GoTo neu
Else
End If
Next
End Sub


Gruß
Harry

Anzeige
AW: Datum kleiner als - Zeile löschen
23.08.2007 19:18:29
Larissa
Hallo Harry,
Richtig! So funktioniert es. "As Date" ist die Zauberformel ;-)
Wie stelle ich denn "Option Explicit" ein? Das ist doch dafür, dass die Variable genau definiert ist, oder?
Danke für die Hilfe.
Lieben Gruß, Larissa

AW: Datum kleiner als - Zeile löschen
23.08.2007 19:59:25
Harry
Hi Larissa,
ganz einfach:
"Option Explicit" im betreffenden Modul in die erste Zeile schreiben (ohne Anführungszeichen!).
Diese Anweisung zwingt die Programmierer, alle Variablen in diesem Modul zu deklarieren - ist 'ne
Grundlage für "sauberes" Programmieren.
Freut mich, wenn ich Dir helfen konnte :)
Liebe Grüsse
Harry

Anzeige
AW: Datum kleiner als - Zeile löschen
23.08.2007 20:03:00
Daniel
... und erleichtert einem auch selbst die Arbeit, weil man Befehle und Variablennamen nicht mehr vollständig eintippen muß, sondern nur die ersten Buchstaben und dann drückt man STRG+, dann bekommt man eine Auswahlliste mit den Möglichen Variablen oder Befehlen.
Gruß, Daniel

AW: @Daniel
23.08.2007 20:22:00
Harry
Hi Daniel,
das hab' ich noch gar nicht gewußt - Danke für den Tipp!
Bei mir funkt es zur Zeit leider nicht (vielleicht, da ich noch auf WinXP/Excel2002 arbeite?)
Gruß
Harry
P.S.: Man lernt immer mal wieder was Neues dazu...

AW: @Daniel
23.08.2007 20:54:00
Daniel
Hi
in der Version müsste das schon lange drin sein.
viellicht muß man den Extras Opitonen noch nen Schalter setzen, ich habe aber noch nicht rausgefunden, welchen.
Gruß, Daniel

Anzeige
AW: @Daniel
24.08.2007 10:52:00
Harry
Hi Daniel,
...werd also mal wieder recherchieren ;)
Grüsse
Harry

AW: Ein anderer Vorschlag - ganz ohne select
23.08.2007 20:08:00
Harry
Hi Larissa,
ein Beispiel:
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
'In ein Standardmodul:
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Option Explicit
Public lngZ As Long

Public Sub datum()
Dim lngI As Long ', lngN As Long
lngI = Cells(Rows.Count, 1).End(xlUp).Row
marke1:
If lastdate(lngI) = "01.01.2007" Then '(If no "Balance" exists...)
Exit Sub
End If
MsgBox "gesuchtes Datum: " & lastdate(lngI), vbInformation, _
"Addresse für Zellbereich: " & lastrange(lngI)
Dim sel As Range
neu:
For Each sel In Range(lastrange(lngI))
If sel.Value  "" Then
sel.EntireRow.Delete
GoTo neu
End If
Next
lngI = lngZ - 1
GoTo marke1
End Sub



Public Function lastdate(lngZeile As Long) As Date
Dim lngN As Long
For lngN = lngZeile To 1 Step -1
If Cells(lngN, 1).Value = "Balance" Then
lastdate = Cells(lngN, 2).Value
Exit Function
End If
Next lngN
lastdate = "01.01.2007" '(If no "Balance" exists...)
End Function



Public Function lastrange(lngZeile As Long) As Variant
Dim lngN As Long
For lngN = lngZeile To 1 Step -1
If Cells(lngN, 1).Value = "Balance" Then
lastrange = Range(Cells(lngN + 1, 2), Cells(lngZeile, 2)).Address
lngZ = lngN
Exit Function
End If
Next lngN
lastrange = Range(Cells(1, 2), Cells(lngZeile, 2)).Address '(If no "Balance" exists...)
End Function


Liebe Grüsse
Harry

Anzeige

316 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige