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

Daten nach Datum sortieren

Daten nach Datum sortieren
18.03.2024 13:45:52
Gabi
Hallo zusammen,

Yal hat mir dieses wunderbare Programm geschrieben, das auch hervorragend funktioniert. Leider ist mein alter Thread nun abgelegt und ich kann ihn nicht mehr reaktivieren. Ich benötige jedoch noch eine Erweiterung:
Nachdem die Daten in die Zieldatei übertragen wurden, müssen die Daten von A5 bis J300 nach Datum, also Spalte A sortiert werden, da die Reisekostenabrechnungen nicht in zeitlich korrekter Reihenfolge eingegeben werden. Ich weiß nicht, an welcher Stelle ich das einbauen muss. Kann mir jemand helfen?


Sub TestUebertragGesamttabelle()
Dim Quelle As Worksheet
Dim ServiceMA As String
Dim ZielWB As Workbook

Set ZielWB = ActiveWorkbook 'man muss das Makro straten, während das Ziel-wb aktiv ist!!
With Application.FileDialog(msoFileDialogFilePicker)
If .Show = False Then
Exit Sub 'der User hat den Dialog mit "Abbrechen" verlassen
Else
Set Quelle = Workbooks.Open(.SelectedItems(1)).Worksheets("Reisekosten")
ServiceMA = Zielblatt_finden(ZielWB, Quelle.Range("G3").Value)
If ServiceMA = "" Then
Quelle.Activate
MsgBox "Name der Service-Mitarbeiter wahrscheinlich falsch: " & Quelle.Range("G3").Value, , "Bitte prüfen"
Exit Sub
End If
End If
End With

With ZielWB.Worksheets(ServiceMA).Cells(Rows.Count, "A").End(xlUp)
If Quelle.Range("A8").Value > 0 Then
.Offset(1, 0).Value = Quelle.Range("A8").Value 'Datum
.Offset(1, 1).Value = Quelle.Range("N8").Value 'Abwesenheit
.Offset(1, 2).Value = Quelle.Range("O8").Value 'Spesen Neu
.Offset(1, 4).Value = Quelle.Range("P8").Value 'Spesen KU
.Offset(1, 7).Value = Quelle.Range("Q8").Value 'Frühstück
.Offset(1, 8).Value = Quelle.Range("R8").Value 'Mittag Abend
End If
If Quelle.Range("A9").Value > 0 Then
.Offset(2, 0).Value = Quelle.Range("A9").Value 'Datum
.Offset(2, 1).Value = Quelle.Range("N9").Value 'Abwesenheit
.Offset(2, 2).Value = Quelle.Range("O9").Value 'Spesen Neu
.Offset(2, 4).Value = Quelle.Range("P9").Value 'Spesen KU
.Offset(2, 7).Value = Quelle.Range("Q9").Value 'Frühstück
.Offset(2, 8).Value = Quelle.Range("R9").Value 'Mittag Abend
End If
End With
End Sub

Function Zielblatt_finden(WB As Workbook, Name) As String
Dim N
Dim Blattname As String
On Error Resume Next
For Each N In Split(Name)
Blattname = WB.Worksheets(N).Name
If Blattname > "" Then
Zielblatt_finden = Blattname
Exit Function
End If
Next
End Function

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten nach Datum sortieren
18.03.2024 13:58:52
Yal
Hallo Gabi,

ohne Datei wird es schwierig das Vorhaben zu erzeugen.
Prinzipiell verwende ich für solche Aufgaben den Makrorekorder: das Menüband so anpassen (Rechtsklick auf Menü, "Menüband anpassen"), dass die Hautpregisterkarte "Entwicklertools" sichtbar wird (rechte Auflistung), dann in diesem Menü "Makro aufzeichnen" anklicken, Sortierung vornehmen, "Aufzeichnung beenden" und über "Visual Basic" den Code anschauen.

Makroname anpassen und im Hauptcode "TestUebertragGesamttabelle" ganz unten vor dem End Sub den Namen des Makros eintragen.

VG
Yal
AW: Daten nach Datum sortieren
18.03.2024 15:16:24
Gabi
Hallo Yal,

so habe ich es probiert. Ich scheitere jedoch daran, dass das Worksheet ja jedes Mal einen anderen Namen hat (hier "Beispiel befüllt" - in echt der jeweilige Mitarbeitername)
Ich hänge hier nochmals die zwei Dateien aus dem Original-Thread an.

Eingefügt vor End Sub
'Sortieren der Daten nach Datum
Range("A5:J300").Select
ActiveWorkbook.Worksheets("Beispiel befüllt").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Beispiel befüllt").Sort.SortFields.Add2 Key:=Range _

("A5:A300"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Beispiel befüllt").Sort
.SetRange Range("A5:J300")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

https://www.herber.de/bbs/user/168090.xlsx
https://www.herber.de/bbs/user/168091.xlsx

Liebe Grüße
Gabi


Anzeige
AW: Daten nach Datum sortieren
18.03.2024 19:34:23
Yal
Hallo Gabi,

mit folgendem Zusatz sollte es funktionieren. Ich habe es nicht gestestet.

Die Formeln in Spalten F und G werden mit Formel_erweitern stets neu gesetzt. Also müssen diese nicht im Voraus bis Zeile 100 vorliegen.
Die Summenformel in Zeile 4 ebenfalls.

Sub TestUebertragGesamttabelle()

Dim Quelle As Worksheet
Dim ServiceMA As String
Dim ZielWB As Workbook

Set ZielWB = ActiveWorkbook 'man muss das Makro straten, während das Ziel-wb aktiv ist!!
With Application.FileDialog(msoFileDialogFilePicker)
If .Show = False Then
Exit Sub 'der User hat den Dialog mit "Abbrechen" verlassen
Else
Set Quelle = Workbooks.Open(.SelectedItems(1)).Worksheets("Reisekosten")
ServiceMA = Zielblatt_finden(ZielWB, Quelle.Range("G3").Value)
If ServiceMA = "" Then
Quelle.Activate
MsgBox "Name der Service-Mitarbeiter wahrscheinlich falsch: " & Quelle.Range("G3").Value, , "Bitte prüfen"
Exit Sub
End If
End If
End With

With ZielWB.Worksheets(ServiceMA).Cells(Rows.Count, "A").End(xlUp)
If Quelle.Range("A8").Value > 0 Then
.Offset(1, 0).Value = Quelle.Range("A8").Value 'Datum
.Offset(1, 1).Value = Quelle.Range("N8").Value 'Abwesenheit
.Offset(1, 2).Value = Quelle.Range("O8").Value 'Spesen Neu
.Offset(1, 4).Value = Quelle.Range("P8").Value 'Spesen KU
.Offset(1, 7).Value = Quelle.Range("Q8").Value 'Frühstück
.Offset(1, 8).Value = Quelle.Range("R8").Value 'Mittag Abend
End If
If Quelle.Range("A9").Value > 0 Then
.Offset(2, 0).Value = Quelle.Range("A9").Value 'Datum
.Offset(2, 1).Value = Quelle.Range("N9").Value 'Abwesenheit
.Offset(2, 2).Value = Quelle.Range("O9").Value 'Spesen Neu
.Offset(2, 4).Value = Quelle.Range("P9").Value 'Spesen KU
.Offset(2, 7).Value = Quelle.Range("Q9").Value 'Frühstück
.Offset(2, 8).Value = Quelle.Range("R9").Value 'Mittag Abend
End If
End With
Formeln_erweitern ZielWB, ServiceMA
Sortieren ZielWB, ServiceMA
End Sub

Function Zielblatt_finden(WB As Workbook, Name) As String
Dim N
Dim Blattname As String

On Error Resume Next
For Each N In Split(Name)
Blattname = WB.Worksheets(N).Name
If Blattname > "" Then
Zielblatt_finden = Blattname
Exit Function
End If
Next
End Function

Sub Formeln_erweitern(WB As Workbook, Blattname As String)
Dim Zeile As Long

With WB.Worksheets(Blattname)
Zeile = .Cells(Rows.Count).End(xlUp).Row
.Range("B4:IO4").FormulaR1C1 = "=SUM(R[1]C:R[" & (Zeile - 4) & "]C"
.Range("F5:F" & Zeile).FormulaLocal = "=WENN(C5=0;0;E5-C5)"
.Range("G5:G" & Zeile).FormulaLocal = "=WENN(C5>0;0;E5)"
End With
End Sub

Sub Sortieren(WB As Workbook, Blattname As String)
Dim Zeile As Long

With WB.Worksheets(Blattname)
Zeile = .Cells(Rows.Count).End(xlUp).Row
With .Sort
.SortFields.Clear
.SortFields.Add2 Key:=Range("A5:A" & Zeile), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.SetRange Range("A5:I" & Zeile)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End Sub


VG
Yal
Anzeige
AW: Daten nach Datum sortieren
20.03.2024 13:32:12
Gabi
Hallo Yal,

es ergibt sich folgender Laufzeitfehler '1004' - Anwendungs- oder objektdefinierter Fehler bei folgender Zeile im Sub Formeln_erweitern

.Range("B4:IO4").FormulaR1C1 = "=SUM(R[1]C:R[" & (Zeile - 4) & "]C"

Gruß
Gabi
AW: Daten nach Datum sortieren
20.03.2024 17:31:41
schauan
Hallöchen,

Zeile = .Cells(Rows.Count).End(xlUp).Row

ergibt vermutlich in Spalte XFD die 1, und somit ergibt Zeile-4 einen Wert 1 - was zur Zelladressierung reichlich ungeeignet ist.

Ich würde bei ... .Cells(Rows.Count). ... noch eine Spalte angeben, um sicher zu gehen, wo ich den Wert her hole, also z.B. ... .Cells(Rows.Count, 1). ... wenn da Spalte A zutrifft.
Anzeige
AW: Daten nach Datum sortieren
20.03.2024 21:07:12
Yal
Ja, richtig. Mal kurz schlampig gearbeitet (keine Testdatei)

Entweder
Zeile = .Cells(Rows.Count, 1).End(xlUp).Row
oder
Zeile = .Cells(Rows.Count, "A").End(xlUp).Row

VG
Yal
AW: Daten nach Datum sortieren
22.03.2024 07:44:14
GGG2019
Hallo Yal,

ich habe nun die vorhergehende Zeile geändert. Dennoch bleibt der Fehler in der nächsten Zeile:

.Range("B4:IO4").FormulaR1C1 = "=SUM(R[1]C:R[" & (Zeile - 4) & "]C"

LG
Gabi
AW: Daten nach Datum sortieren
22.03.2024 09:54:01
schauan
Hallo Gabi,

prüfe doch mal, welchen Wert die Variable Zeile enthält. Wenn in Deinem Mitarbeiterblatt in Spalte A noch nix steht, steht in Zeile der Wert 4. 4-4 ergibt 0 ...
Ich kenne das Ausgangsprojekt nicht und in Deinem Beispiel 168090 sind keine Reisedaten enthalten. Die müssten wohl erst mit dem von Yal komplett geposteten Code aus der 191 übernommen werden.
(Nicht nur) Bei einem "leeren" Mitarbeiter kommt es dann allerdings zu Fehlern, weil...

1)
Zeile = .Cells(Rows.Count).End(xlUp).Row
liefert dann in Spalte A den Wert 4. Will man generell keine Zeile überschreiben, könnte man
Zeile = .Cells(Rows.Count).End(xlUp).Row + 1
nehmen, falls doch, außer bei Zeile 4, dann
Zeile = Worksheetfunction.Max(.Cells(Rows.Count).End(xlUp).Row,5)

2)
Im Bereich B4:I4 trägst Du die Spaltensummen mit festen Begrenzungen ein, z.B. =SUMME(B5:B100).
Die Codezeile
.Range("B4:IO4").FormulaR1C1 = "=SUM(R[1]C:R[" & (Zeile - 4) & "]C"
soll das variabel gestalten. Jedenfalls fast - wenn denn noch am Ende eine Klammer gesetzt ) wird :-)

3)
.Range("F5:F" & Zeile).FormulaLocal = "=WENN(C5=0;0;E5-C5)"
würde "ausvariabelt" :-) zu
.Range("F5:F4").FormulaLocal = "=WENN(C5=0;0;E5-C5)"

Anzeige
AW: Daten nach Datum sortieren
22.03.2024 10:22:26
Gabi
Hallo schauan,
hallo Yal,

ich habe zu wenig Kenntnisse, um Deinem Post zu folgen, schauan.

Was ich verstanden und getan habe:
Ich habe die Klammer gesetzt gemäß Deinem Punkt 2 - und zwar vor den letzten Anführungszeichen.
.Range("B4:IO4").FormulaR1C1 = "=SUM(R[1]C:R[" & (Zeile - 4) & "]C)"
Das Ganz in dem Sub Formeln_erweitern und im Sub Sortieren.

Dabei kommt die Sortierung gemäß beigefügter Datei heraus --> der Inhalt der Zeile 5 wird in Zeile 1 versetzt.
https://www.herber.de/bbs/user/168244.xlsm

Vielleicht kann Yal Deine Ausführungen besser verstehen und entsprechend Tipps geben. Oder ihr gemeinsam. Ich kann dem Programm aufgrund meiner spärlichen VBA Kenntnisse schon lange nicht mehr folgen.

Gruß
Gabi



Anzeige
AW: Daten nach Datum sortieren
22.03.2024 11:22:43
Yal
Hallo Gabi

verwende bitte diese leich abgewanderte Version:

Sub Formeln_erweitern(WB As Workbook, Blattname As String)

Dim Zeile As Long

With WB.Worksheets(Blattname)
Zeile = WorksheetFunction.Max(5, .Cells(Rows.Count, 1).End(xlUp).Row)
.Range("B4:IO4").FormulaR1C1 = "=SUM(R[1]C:R[" & (Zeile - 4) & "]C)"
.Range("F5:F" & Zeile).FormulaLocal = "=WENN(C5=0;0;E5-C5)"
.Range("G5:G" & Zeile).FormulaLocal = "=WENN(C5>0;0;E5)"
End With
End Sub


Versuche den Code "eingedeutscht" zu lesen (es sind ja keine chinesische Zeichen). Idealerweise laut mit Dir selbst sprechen. Klingt komisch, ist aber sehr effektiv. So wirst Du nach und nach immer mehr von VBA verstehen (deine Ergänzungen zeigen, dass Du den Zeug dazu hast ;-) Aktuell ist es so, als ob Du in ein Auto gestiegen und Gas gegeben hättest und entdeckst, dass Du nicht weisst, wie man bremst. Auf Dauer nicht gut.

VG
Yal

Anzeige
AW: Daten nach Datum sortieren
22.03.2024 11:35:42
GGG2019
Hallo Yal,

ich sollte mal einen Kurs belegen oder zumindest mir viel Zeit für ein Selbststudium nehmen. Mir war aber auch nicht klar, dass auch dieser vermeintlich einfachen Aufgabe etwas so Komplexes entsteht. :-)

Ich habe den gesamten Part ersetzt. Leider ist das Ergebnis das selbe. Es wird nur der Inhalt von Zeile fünf in Zeile 1 gesetzt. M.E. müsste der Fehler im Sub Sortieren liegen, oder nicht?

Gruß
Gabi
AW: Daten nach Datum sortieren
22.03.2024 15:50:55
Yal
Hallo Gabi,

wenn Du auf dem Schalter an die Wand betätigt und das Licht geht an, dann ist es einfach. Die Kabel zu verlegen und die Anbindung an Stromkasten, das ist nur kompliziert, wenn man es zum ersten mal macht. Willkommen auf die andere Seite.

Aber zu deinem Problem: Ich würde deine Excel anders gestalten. Im Blatt vom ServiceMA habe ich eine Tabelle (auch manchmal Intelligente Tabelle benannt) eingeführt (Siehe Menü "Einfügen", "Tabelle"). Diese Tabelle haben die Besonderheit, dass wenn eine Zeile darunterkommt, die Formel und Formatierung automatisch übernommen werden. Dann brauchst Du nicht die "wenn(..)" vorzubelegen. Zweitens kann der besamte Bereich einer Spalte durch den Namen der Spalte adressiert werden. Siehe Summenformeln.
Es sind 2 Problemstellen, die wegfallen.
Dann hat man auch die Möglichkeit die Zeile direkt zu adressieren. Das sieht man in den neuen VBA-Code.

Du musst nur achten, dass die Tabelle einen Namen nach dem Muster "tbl_" (ohne >! Siehe Menü "Tabellen-tools" wenn eine Zelle der Tabelle aktiv ist). Ich habe den Code nicht getestet.
https://www.herber.de/bbs/user/168255.xlsm

VG
Yal
Anzeige
AW: Daten nach Datum sortieren
25.03.2024 08:16:11
Gabi
Guten Morgen Yal,

leider funktioniert das überhaupt nicht.
Anbei das Ergebnis der Tabelle nach zwei Überträgen (Zeilen 19-23 und 24-28). Es tritt der Laufzeitfehler 438 auf: Objekt unterstützt diese Eigenschaft oder Methode nicht bei Zeile:

.SortFields.Add2 Key:=.ListColumns(1).DataBodyRange, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

Die Sortierung funktioniert nicht und es werden wieder leere Zeilen übertragen, die er nachher als Ende der Tabelle sieht und beibehält.
https://www.herber.de/bbs/user/168309.xlsm

Warum kann man nicht einfach in dem ursprünglichen Programm, das ja hervorragend funktioniert hat, an geeigneter Stelle nach dem Übertrag der Daten den Part "sortiere A5:J300 nach Spalte A einfügen"? Für mich klingt das einfach und plausibel. Ich weiß nur nicht, wo die geeignete Stelle ist.

Liebe Grüße und einen guten Start in die Woche!
Gabi
Anzeige
AW: Daten nach Datum sortieren
25.03.2024 08:30:33
Oberschlumpf
hi Gabi,

ich weiß nicht, ob ich - hier - noch antworten kann.
Aber auch dieser Beitrag von dir wurde schon ins Archiv verschoben...antworten also eigtl nicht mehr möglich!

Du musst...
a) ...also einen neuen Beitrag erstellen; am besten mit Archiv-Link zu diesem Beitrag hier
b) ...in Zukunft schneller auf Lösungsvorschläge antworten, damit deine Beiträge nicht wieder "zu früh" im Archiv verschwinden

Wenn du meine Antwort noch erhalten solltest, dann antworte - nicht - direkt auf meinen Beitrag, sondern führe gleich sofort a) + b) durch.

Ciao
Thorsten
Anzeige
AW: Daten nach Datum sortieren
25.03.2024 09:01:35
Yal
Hallo zusammen,

lustigerweise ist der Beitrag unter der Suche nach https://www.herber.de/cgi-bin/meinebeitraege?name=ggg2019 noch ein paar Tage erreichbar und "beantwortbar".

Das Problem liegt woanders: ohne Basiswissen in VBA kann der Fragenstellende nur von Fehlermeldung zu Fehlermeldung nach Hilfe rufen.

Man kann einen neuen Beitrag öffnen, meine Hilfe endet jedoch hier.

VG
Yal

AW: Daten nach Datum sortieren
25.03.2024 09:38:43
schauan
Hallöchen,

sind glaube 7 Tage, also noch bis heute Mittag, bevor man ins Archiv gehen muss, oder?
AW: Daten nach Datum sortieren
25.03.2024 10:57:00
Gabi
Hallo Ihr Lieben,

ich habe das Problem des Sortierens nun selbst auf ganz einfache Weise gelöst. Für alle, die es jetzt noch interessiert:

'Sortieren nach Spalte A
ZielWB.Worksheets(ServiceMA).Sort.SortFields.Clear
ZielWB.Worksheets(ServiceMA).Sort.SortFields.Add2 Key:=Range _
("A5:A300"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ZielWB.Worksheets(ServiceMA).Sort
.SetRange Range("A5:J300")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

Auf diesem Wege nochmals besten Dank an Yal!!!

Gruß
Gabi
Super! vielen Dank für die Rückmeldung
25.03.2024 11:22:47
Yal

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige