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

Datumsspalte nach Wochentag trennen

Datumsspalte nach Wochentag trennen
01.12.2022 13:10:03
Weis
Hallo,
ich habe eine Tabelle A1 : U999 mit einer Datumsspalte
2022-11-15 13:00:00 WERT2 WERT3 WERTX
2022-11-15 13:00:00
2022-11-15 13:00:00
2022-11-15 14:00:00
2022-11-16 05:00:00
2022-11-16 05:00:00
2022-11-16 07:30:00
2022-11-16 09:00:00
2022-11-16 10:00:00
2022-11-16 12:00:00
2022-11-16 18:00:00
2022-11-16 19:00:00
2022-11-16 20:00:00
2022-11-17 02:00:00
2022-11-17 04:30:00
2022-11-17 12:00:00
2022-11-17 13:00:00
2022-11-17 18:00:00
2022-11-17 20:00:00
Die möchte ich gerne Trennen also Leerzeile mit Wochentag darüber.
Mittwoch
2022-11-16 10:00:00
2022-11-16 12:00:00
2022-11-16 18:00:00
2022-11-16 19:00:00
2022-11-16 20:00:00
Donnerstag
2022-11-17 20:00:00
2022-11-17 12:00:00
2022-11-17 13:00:00
2022-11-17 18:00:00
2022-11-17 20:00:00
Das ganze gerne in VBA, da ich das automatisieren möchte.
Ich hoffe ich habe mich klar ausgedrückt.
Momentan fällt mir leider nix zur Lösung ein:-(
VG
Holger

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

Betreff
Datum
Anwender
Anzeige
AW: Datumsspalte nach Wochentag trennen
01.12.2022 13:30:57
ReginaR
Hi,
teste mal diesen Code. Die Datumswerte stehen dabei in Spalte A ab Zeile 1. Kannst Du aber auch im Code ändern:

Public Sub Trenner()
Dim lng_zeile As Long
Dim lng_merk_tag As Long
lng_zeile = 1 ' Zeile mit dem ersten datum
With Worksheets("Tabelle1")
lng_merk_tag = Day(.Cells(lng_zeile, 1))  ' Die 1 bei allen Cells-Objekten steht für Spalte A
.Rows(lng_zeile).Insert Shift:=xlDown
.Cells(lng_zeile, 1) = Format(.Cells(lng_zeile + 1, 1), "DDDD")
lng_zeile = lng_zeile + 1
Do Until .Cells(lng_zeile, 1) = ""
If lng_merk_tag  Day(.Cells(lng_zeile, 1)) Then
lng_merk_tag = Day(.Cells(lng_zeile, 1))
.Rows(lng_zeile).Insert Shift:=xlDown
.Cells(lng_zeile, 1) = Format(.Cells(lng_zeile + 1, 1), "DDDD")
End If
lng_zeile = lng_zeile + 1
Loop
End With
End Sub
Gruß Regina
Anzeige
AW: Datumsspalte nach Wochentag trennen
01.12.2022 13:40:05
Holger
Danke für Deinen Ansatz.
Nach der Anpassung ich bekomme jedoch den Fehler 13 Typen unverträglich?
lng_zeile = 2 ' Zeile mit dem ersten datum
With Worksheets("Page 1")
lng_merk_tag = Day(.Cells(lng_zeile, 2)) ' Die 1 bei allen Cells-Objekten steht für Spalte A bei uns B also 2
.Rows(lng_zeile).Insert Shift:=xlDown
.Cells(lng_zeile, 1) = Format(.Cells(lng_zeile + 1, 1), "DDDD")
lng_zeile = lng_zeile + 1
Do Until .Cells(lng_zeile, 1) = ""
If lng_merk_tag Day(.Cells(lng_zeile, 1)) Then
lng_merk_tag = Day(.Cells(lng_zeile, 1))
.Rows(lng_zeile).Insert Shift:=xlDown
.Cells(lng_zeile, 1) = Format(.Cells(lng_zeile + 1, 1), "DDDD")
End If
lng_zeile = lng_zeile + 1
Loop
End With
VG
Holger
Anzeige
AW: Datumsspalte nach Wochentag trennen
01.12.2022 13:53:33
Holger
Hmmm das habe ich zu demFehler gefunden:
Typenkonflikt (Fehler 13)
Visual Basic kann zahlreiche Werte konvertieren und umwandeln, um Datentyp-Zuordnungen zu realisieren, die in früheren Versionen nicht möglich waren.
Dieser Fehler kann jedoch weiterhin auftreten. Er hat die folgenden Ursachen und kann wie folgt gelöst werden:
Ursache: Die Variable oder die Eigenschaft entspricht nicht dem richtigen Typ. Beispielsweise kann eine Variable, für die ein Ganzzahlenwert erforderlich ist, keine Zeichenfolgenwerte akzeptieren - es sei denn, die gesamte Zeichenfolge kann als Ganzzahl erkannt werden.
Anzeige
Warum?
01.12.2022 14:08:25
RPP63
Moin!
Warum um alles in der Welt willst Du eine korrekte (und vor allem auswertbare) Liste mutwillig zerstören?
Nimm eine Zusatzspalte mit dem Wochentag und gut ist's!
Gruß Ralf
AW: Datumsspalte nach Wochentag trennen
01.12.2022 14:09:17
Rudi
Hallo,
Zeilen einfügen/ löschen immer von unten.

Sub aaa()
Dim lRow As Long
For lRow = Cells(Rows.Count, 1).End(xlUp).Row To 3 Step -1
If Int(Cells(lRow, 1))  Int(Cells(lRow - 1, 1)) Then
Rows(lRow).Insert
Cells(lRow, 1) = Format(Cells(lRow + 1, 1), "DDDD")
End If
Next lRow
Rows(lRow).Insert
Cells(lRow, 1) = Format(Cells(lRow + 1, 1), "DDDD")
End Sub
Gruß
Rudi
Anzeige
AW: Datumsspalte nach Wochentag trennen
01.12.2022 14:44:39
Holger
Noch immer der Fehler Typen unverträglich Fehler 13
bei
For lRow = Cells(Rows.Count, 1).End(xlUp).Row To 3 Step -1
If Int(Cells(lRow, 1)) Int(Cells(lRow - 1, 1)) Then
Rows(lRow).Insert
Muss die Spalte B erstmal mit einem Format ala Datum belegt werden?
Fragende Grüße
Holger
wieso B?
01.12.2022 14:50:58
Rudi
der Code geht durch A!
AW: wieso B?
01.12.2022 15:06:23
Holger
Mist , sorry hab ich übersehen muss ich noch ändern.
Danke für den Hinweis (Manchmal sieht man den Wald....)
AW: wieso B?
01.12.2022 15:15:55
Holger
Super Dankeschön !!
Kannst Du mir auch verraten wie jetzt noch die Zeile wo der Wochentag drinnsteht von A bis U gelb umfärbe?
For lRow = Cells(Rows.Count, 1).End(xlUp).Row To 3 Step -1
If Int(Cells(lRow, 2)) Int(Cells(lRow - 1, 2)) Then
Rows(lRow).Insert
Cells(lRow, 2) = Format(Cells(lRow + 1, 2), "DDDD")
End If
Next lRow
Rows(lRow).Insert
Cells(lRow, 2) = Format(Cells(lRow + 1, 2), "DDDD")
Anzeige
AW: wieso B?
02.12.2022 10:59:20
Rudi
klar kann ich das.
Cells(lRow, 1).Resize(, 21).Interior.Color = vbYellow
Gruß
Rudi
AW: Datumsspalte nach Wochentag trennen
01.12.2022 16:42:20
snb
Wie RPP schon erwähnte:

Sub M_snb()
sn = UsedRange.Columns(1).SpecialCells(2)
sp = sn
sp(3, 1) = ""
For j = 4 To UBound(sp)
sp(j, 1) = IIf(Day(sn(j, 1)) = Day(sn(j - 1, 1)), "", Format(sn(j, 1), "dddd"))
Next
Cells(1, 2).Resize(UBound(sp)) = sp
End Sub
Wenn in VBA, vermeide Interaktion mit dem Arbeitsblatt und verwende Arrays.
Die unrichtige Vorgehensweise (doch mit Arrays)

Sub M_snb()
sn = UsedRange.Columns(1).SpecialCells(2)
ReDim sp(UBound(sn) + 100, 0)
sp(0, 0) = sn(1, 1)
sp(1, 0) = sn(2, 1)
sp(2, 0) = sn(3, 1)
n = 3
For j = 4 To UBound(sn)
If Day(sn(j, 1))  Day(sn(j - 1, 1)) Then
sp(n, 0) = Format(sn(j, 1), "dddd")
n = n + 1
End If
sp(n, 0) = sn(j, 1)
n = n + 1
Next
Cells(1, 3).Resize(UBound(sp)) = sp
End Sub

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige