Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
VBA Wert suchen vorherige Zeilen löschen
31.05.2022 07:01:53
Alex
Hallo,
ich habe das komplette Jahr in 15-Minuten Zeiteinheiten unterteilt und diese in Spalte A abwärts aufgelistet.
Hier werden von mir regelmäßig Zeilen gelöscht, so dass gewisse Zeitintervalle fehlen. Ich suche nun eine Möglichkeit, womit ich den ersten Eintrag in Spalte A finde, bei dem die Uhrzeit 00:00 Uhr ist. Alle Zeilen vorher (Ausnahme die Kopfzeile) möchte ich löschen.
In diesem Beispiel wäre "19.05.2022 00:00" mein gesuchter Wert:
18.05.2022 00:45
18.05.2022 01:00
18.05.2022 01:15
18.05.2022 01:30
18.05.2022 01:45
.
.
.
18.05.2022 23:30
18.05.2022 23:45
19.05.2022 00:00
19.05.2022 00:15
19.05.2022 00:30
19.05.2022 00:45
Hat jemand eine Idee, wie ich dies per VBA umsetzen kann? Mein Problem ist, dass es ja nicht immer der 19.05.2022 00:00 Uhr ist, sondern dass es variieren kann.
Ich hatte diesen Beispielcode verwendet, jedoch weiß ich nicht, wie ich vorstehende Zeilen lösche:
https://www.herber.de/forum/archiv/908to912/910712_Wert_per_VBA_suchen_gefunden_Zeile_loeschen.html

Private Sub CommandButton3_Click()   '  Löschen
Dim intZ As Integer
Dim durchsuchen, finden As Range
Set durchsuchen = Sheets("Tabelle1").Range("B4:B" & _
Sheets("Tabelle1").Range("B65536").End(xlUp).Row)
For Each finden In durchsuchen
If finden.Text = TextBox1.Text Then
intZ = finden.Row
Exit For
End If
Next finden
Rows(intZ).Delete
End Sub
Grüße

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

Betreff
Datum
Anwender
Anzeige
AW: VBA Wert suchen vorherige Zeilen löschen
31.05.2022 08:33:32
peterk
Hallo

If  intZ > 4 then
Rows("4:" & intZ).Delete
end if
Peter
AW: VBA Wert suchen vorherige Zeilen löschen
31.05.2022 08:46:28
Yal
Hallo Alex,
ein Datum/Uhrzeit ist ein Zahl: vor der Kommastelle das Datum, nach der Kommastelle die Uhrzeit. Dementsprechend ist der Uhrzeit "00:00" ein Datum ohne Nachkommastelle.

Private Sub btnLöschen_Click()   ' Man kann die Button umbenennen
Dim Z As Range 'Z wie Zelle
With Sheets("Tabelle1")
For Each Z In Range(.Range("B4"), .Range("B65536").End(xlUp)).Cells
If Z.Value = Int(Z.Value) Then
Range(Range("A4"), Z).EntireRow.Delete
Exit For
End If
Next
End With
End Sub
VG
Yal
Anzeige
AW: VBA Wert suchen vorherige Zeilen löschen
31.05.2022 09:20:13
GerdL
Moin

Sub Unit()
Dim C As Range
For Each C In Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))
If IsDate(C.Text) Then
If CDate(CLng(C)) = C.Value Then
Range(Cells(2, 1), C.Offset(-1, 0)).EntireRow.Delete
Exit Sub
End If
End If
Next
End Sub
Gruß Gerd
AW: VBA Wert suchen vorherige Zeilen löschen
31.05.2022 09:30:25
Yal
Hallo Gerd,
in der Tat: die fehlende Prüfung, dass es sich um eine Datum handelt (in meiner Vorschlag), könnte unangenehmen Nebeneffekte herbeiführen.
VG
Yal
AW: VBA Wert suchen vorherige Zeilen löschen
31.05.2022 09:42:52
Alex
Das sieht so ziemlich nach dem aus, was ich suche.
Aber was ich hier nicht verstehe - an welcher Stelle findet die Abfrage der Uhrzeit 00:00 Uhr statt?
Anzeige
AW: VBA Wert suchen vorherige Zeilen löschen
31.05.2022 10:21:41
GerdL
Der Uhrzeitanteil(Stunden/Minuten/Seckunden) am Zeitwert wird sofern vorhanden bzw. größer "00.00.00" ist wie Yal schon beschrieb beim Zellenwert als Bruchteil im Nachkommabereich dargestellt. Also kann man abgleichen, ob der Zellenwert eine Ganzzahl ist oder nicht ist.
AW: VBA Wert suchen vorherige Zeilen löschen
31.05.2022 10:27:40
Yal
Hallo Alex,
Datum: kein Nachkommastelle, Uhrzeit: Nachkommastelle.
CLng(Zahl) schneidet die Nachkommastelle ab (Konvertierung vom Typ Datum in Typ Long, das keine Nachk. hat)
CLng(Zahl) = Zahl bedeutet, der Zahl mit Nachkommastelle ("Zahl") ist gleich wie der Zahl mit abgeschnittene Nachkommastelle ("Clng(Zahl)"), also hat der Zahl keine Nachkommastelle, also Uhrzeit ist 00:00
Eigentlich macht CLng auch eine Rundung, was Nebenwirkung haben könnte, aber nicht im diesem Fall (muss man aber davon bewusst sein).
VG
Yal
Anzeige
AW: VBA Wert suchen vorherige Zeilen löschen
31.05.2022 10:37:49
Alex
Ok, das habe ich verstanden. Da wäre ich nie drauf gekommen.
Ich habe mal den Code und einige Daten in eine Beispiel-Tabelle gehauen. Es gibt auch ein Register mit den Daten als Kopie.
Der Code funktioniert schon, jedoch wird zu viel gelöscht. Nach einem Klick auf "Schaltfläche 1" sollte "17.05.2022 00:00" ganz oben stehen, jedoch steht "21.05.2022 00:00" da. Es ist doch aber codemäßig richtig?
https://www.herber.de/bbs/user/153339.xlsm
AW: VBA Wert suchen vorherige Zeilen löschen
31.05.2022 10:59:22
GerdL
Da ist beim 17.05. eine Sekunden-Wert von 22 drin.
Änderen den Code deshalb etwas ab.

Sub BereichLoeschen()
Dim C As Range
For Each C In Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))
If IsDate(C.Text) Then
If CDate(Fix(C)) = C.Text Then
Range(Cells(2, 1), C.Offset(-1, 0)).EntireRow.Delete
Exit Sub
End If
End If
Next
End Sub

Anzeige
AW: VBA Wert suchen vorherige Zeilen löschen
31.05.2022 12:13:51
Alex
Vielen Dank euch, das hilft mir sehr weiter!
Eigentlich...
31.05.2022 13:20:16
Yal
...wäre folgende Prüfung am "richtigsten" (im Sinne von Datentyp bzw. Bedeutung der inhalt):

If IsDate(C.Value) Then
If Hour(CDate(C.Value)) = 0 And Minute(CDate(C.Value)) = 0 Then
VG
Yal

360 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige