Hallo Mathias,
das grenzt schon fast an Auftragsprogrammierung. Da der Code dafür aber ziemlich schnell geschrieben ist, hab ich dir hier mal ein Beispiel erstellt.
Anhand deiner Beschreibung gehe ich davon aus, dass deine Eingabetabelle wie folgt aufgebaut ist (Die Lastwerte sind dabei Phantasie):
|
A |
B |
C |
D |
E |
1 |
|
0:00 |
0:15 |
0:30 |
0.45 |
2 |
01.01.2021 |
4500 |
4600 |
4700 |
4800 |
3 |
02.01.2021 |
4501 |
4601 |
4701 |
4801 |
Frage: Was machst du bei Beginn der Winterzeit? Da gibts die Stunde von 2:00 bis 3:00 doppelt. Es könnten dabei unterschiedliche Leistungsspitzen anfallen. In meinem Code verwende ich die eingegebenen Leistungsspitzen dann für die CSV ebenfalls doppelt. Das macht die Sache einfacher.
Hier der Code für Modul1. Das Tabellenblatt "Tabelle1" musst du natürlich an deinen Blattnamen anpassen.
Sub ExportCSV()
Dim Blatt As Worksheet, Jahr As Long, BeginnSZ As Date, BeginnWZ As Date, sz As Boolean
Dim Pfad As String, Zeitstrng As String, Datum As Date, Zeit As Date, p As Boolean
Set Blatt = Sheets("Tabelle1")
Pfad = ThisWorkbook.Path & "\" & Left(ThisWorkbook.Name, InStr(ThisWorkbook.Name, ".")) & "csv"
lzei = Cells(Rows.Count, 1).End(xlUp).Row
Open Pfad For Output As #1
For z = 2 To lzei
Datum = Blatt.Cells(z, 1)
Jahr = Year(Datum)
BeginnSZ = DateSerial(Jahr, 3, 31) - Weekday(DateSerial(Jahr, 3, 31)) + 1
BeginnWZ = DateSerial(Jahr, 10, 31) - Weekday(DateSerial(Jahr, 10, 31)) + 1
For s = 2 To 97
'If (Datum = BeginnSZ And s = 10) Or (Datum = BeginnWZ And s = 14) Then Stop
Zeit = Blatt.Cells(1, s)
If Datum = BeginnSZ And CStr(Zeit) = "02:00:00" Then
s = s + 4
Zeit = Blatt.Cells(1, s)
ElseIf Datum = BeginnWZ And CStr(Zeit) = "03:00:00" And p = False Then
s = s - 4
Zeit = Blatt.Cells(1, s)
p = True
End If
If Datum + Zeit >= BeginnSZ + TimeValue("03:00:00") And Datum + Zeit < BeginnWZ + TimeValue("03:00:00") And p = False Then sz = True Else sz = False
Print #1, Format(Datum + Zeit, "yyyy-mm-dd hh:nn:ss") & IIf(sz, "+02:00", "+01:00"), Cells(z, s)
Next s
Next z
Close #1
MsgBox "Die Datei " & Pfad & " wurde erzeugt."
End Sub
Im Beispiel wird eine Tabstopp-getrennte CSV-Datei erstellt. Wenn du lieber eine CSV mit Trennzeichen haben möchtest, ersetze die Print-Zeile wie folgt: Print #1, Format(Datum + Zeit, "yyyy-mm-dd hh:nn:ss") & IIf(sz, "+02:00", "+01:00") & ";" & Cells(z, s)
Die CSV befindet sich im gleichen Pfad und trägt den gleichen Namen wie die Excel-Datei.
Falls du weitere Fragen hast, kannst du dich gern melden.
Gruß Mr. K.
|