Yes und außerdem habe ich noch kleine Anpassungen durchgeführt, damit "fast" das gewünschte Ergebnis kommt. Statt immer wieder eine leere Zeile als Trennung zu verwenden, schneide ich den Teil ab und füge es in eine neue Tabellenblatt ein. Mit einer Anwendung aus C# mache ich dann pro Tabellenblatt eine csv-Datei. Umständlich aber wahrscheinlich am schnellsten, da ich wirklich zum ersten Mal mit VBA, wie ihr sicherlich gemerkt habt.)
Danke nochmal für eure Hilfe. Hier ist mein Code (nehme gerne noch Verbesserungsvorschläge an):
Sub Tuncer_Teil_1()
Dim wksQuelle As Worksheet
Dim wks As Worksheet
Dim i As Integer
Dim Ueberschriften(4) As String
Dim lngLetzteZeile As Long
Dim lngZaehler As Long
' Überschriften ins Array
Ueberschriften(0) = "DATUM"
Ueberschriften(1) = "STRING 1"
Ueberschriften(2) = "STRING 2"
Ueberschriften(3) = "STRING 3"
Ueberschriften(4) = "STRING 4"
' Quellblatt kopieren
Set wksQuelle = ThisWorkbook.Worksheets("Tabelle1")
wksQuelle.Copy After:=Sheets(Sheets.Count)
' Zielblatt benennen und auswählen (ggf. unnötig)
Sheets(Sheets.Count).Name = "Kopie"
Set wks = Sheets("Kopie" & Sheets.Count)
With wks
.Select
' Zeilen Auswählen und nach Datum sortieren
lngLetzteZeile = .Cells(Rows.Count, 1).End(xlUp).Row
With .Sort
.SortFields.Clear
' zunächst nach Spalte A, danach nach Splate B sortieren
.SortFields.Add Key:=Range("A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("B1" & lngLetzteZeile), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("A2:D" & lngLetzteZeile)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' Zwischen den Zeilen jeder Datumsklasse
For lngZaehler = lngLetzteZeile To 3 Step -1
If .Cells(lngZaehler, 1).Value <> .Cells(lngZaehler - 1, 1) Or _
.Cells(lngZaehler, 2).Value <> .Cells(lngZaehler - 1, 2) Then
' Tabellenblatt für den Import erzeugen
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "Import" & Sheets.Count - 1
' An die richtige Stelle springen
wks.Activate
.Rows(lngZaehler).Select
' 1 Zeile einfügen, dabei Überschrift einsetzen
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
For i = 0 To 4
.Cells(lngZaehler, i + 1).Value = Ueberschriften(i)
Next i
' Den Import in die erzeugte Tabelle hinzufügen Cut/Paste
Range(Selection, Selection.End(xlDown)).Select
Selection.Cut
Sheets(Sheets.Count).Select
Range("A1").Select
ActiveSheet.Paste
' Die richtige Tabelle wieder aktivieren
wks.Activate
End If
Next lngZaehler
End With
'Kopie noch umbennen Import
Sheets("Kopie").Name = "Import" & Sheets.Count - 1
Set wks = Nothing
Set wksQuelle = Nothing
End Sub
|