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

Zeilen mit Datumsbereich kopieren

Zeilen mit Datumsbereich kopieren
10.06.2021 18:43:36
aculix
Hallo,
ich lese schon länger mit und konnte viele Probleme bisher mit den Beiträgen hier lösen.
Nun habe ich allerdings ein Problem für das ich keine funktionierende Lösung finde.
Problemstellung:
Vergleich von zwei Datumseinträgen: Spalte C (Startdatum) Spalte D ( Enddatum)
Sofern das Datum von heute zwischen C&D liegt sollen alle Zeilen, auf welche es zutrifft in eine andere Tabelle kopiert werden; Spalten A - M
Das funktioniert gelegentlich, wobei er nicht alle Zellhinhalte mit kopiert, sondern hin und wieder ab E nix überträgt oder nur vereinzelt.
Die Quelldaten in der Tabelle L23 sind nicht nach Datum sortiert, da sich um eine Tabelle zur Dateneditierung/Sammlung handelt.
Im zweiten Zug soll er weiterhin prüfen ob das Datum von C in der Zukunft liegt und diese Zeilen in ein weiteres Tabellenblatt kopieren. Da wird maximal C&D und irgendein Müll kopiert.
Die erste Zeile soll nicht kopiert werden.
Vielen Dank im Voraus.
Den folgenden Code habe ich mir halb lauffähig gebastelt:

Dim i As Integer
Dim ls As Integer
Dim ly As Integer
'Sheets("asd").Unprotect
Sheets("asd").Range("A1:N1337").ClearContents
Sheets("dsa").Range("A1:N1337").ClearContents
For i = 1 To Sheets("L23").Cells(Rows.Count, 1).End(xlUp).Row
If Sheets("L23").Cells(i, 3)  Date + 1 Then
ls = Sheets("L23").Cells(i, 15).End(xlToLeft).Column
lz = Sheets("asd").Cells(Rows.Count, 1).End(xlUp).Row + 1
Sheets("L23").Range(Cells(i, 1), Sheets("L23").Cells(i, ls)).Copy Sheets("asd").Cells(lz, 1)
ElseIf Sheets("L23").Cells(i, 3) > Date - 1 Then
ls = Sheets("L23").Cells(i, 15).End(xlToLeft).Column
ly = Sheets("asd").Cells(Rows.Count, 1).End(xlUp).Row + 1
Sheets("L23").Range(Cells(i, 1), Sheets("L23").Cells(i, ly)).Copy Sheets("asd").Cells(ly, 1)
End If
Next i
'Sheets("asd").Protect
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen mit Datumsbereich kopieren
10.06.2021 23:07:09
Yal
Hallo aculix,
Ich würde es mit Power Query machen. Wenn deine Spalten die Überschriften "Anfang" und "Ende" haben wird der PQ-Abfrage ungefähr so aussehen.

let
Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
TypeChange = Table.TransformColumnTypes(Quelle,{{"Anfang", type datetime}, {"Ende", type datetime}}),
DateExtract = Table.TransformColumns(TypeChange,{{"Anfang", DateTime.Date, type date}, {"Ende", DateTime.Date, type date}}),
IsStarted = Table.AddColumn(DateExtract, "Gestartet", each Duration.Days(Date.From(DateTime.LocalNow())-[Anfang])>=0),
IsEnded = Table.AddColumn(IsStarted, "Beendet", each Duration.Days(Date.From(DateTime.LocalNow())-[Ende])>=0),
Filter = Table.SelectRows(IsEnded, each ([Gestartet] = true) and ([Beendet] = false)),
ThrowColumns = Table.RemoveColumns(Filter,{"Gestartet", "Beendet"})
in
ThrowColumns
Dann aktualisierst Du mit Alt+F5 oder Shift+Alt+F5 (Alle aktualisieren).
VG
Yal
Anzeige
AW: Zeilen mit Datumsbereich kopieren
11.06.2021 11:52:49
aculix
Danke für die schnelle Antwort. Damit kann ich leider nix anfangen. Habe damit bisher nicht gearbeitet.
Bekomme, auch wenn es eine Tabelle1 gibt folgenden Fehler angezeigt:

Expression.Error: Es wurde keine Excel-Tabelle mit der Bezeichnung "Tabelle1" gefunden.
Details:
Tabelle1
Muss das nicht auch irgendwie mit einer vba-Lösung funktionieren?
AW: Zeilen mit Datumsbereich kopieren
11.06.2021 12:10:31
EtoPHG
Hallo,
Muss das nicht auch irgendwie mit einer vba-Lösung funktionieren?
Klar, wenn man den Code richtig schreibt. Ist das ein Problem bei VBA gut?
Und das gleiche gilt für den Fehler Es wurde keine Excel-Tabelle mit der Bezeichnung "Tabelle1" gefunden.
Was könnte das wohl heissen?
Gruess Hansueli
Anzeige
AW: Zeilen mit Datumsbereich kopieren
11.06.2021 12:24:51
aculix

Klar, wenn man den Code richtig schreibt. Ist das ein Problem bei VBA gut?
Das ist immer relativ ;) Wenn es funktionieren würde, hätte ich die Frage vermutlich nicht gestellt. :p
AW: Zeilen mit Datumsbereich kopieren
11.06.2021 14:39:04
EtoPHG
Hallo,
Unter VBA gut, verstehe ich etwas mehr als nur einfache For/Next und If-then-else-Konstrukte zusammenzusticken. Damit relativiert sich wohl deine Ansicht von "relativ". Auch relativ muss einen Bezugspunkt haben, aber der sollte vom eigenen Standpunkt verschieden sein ;-)
1. Du dimensionierst Variablen zur Aufnahme von Zeilen- und Spalten-Indexen. Diese müssen von Typ Long sein. Das Integer-Zeitalter hat Excel längst hinter sich gelassen.
2. Du benutzt kein Option Explicit, sonst würdest du beim Kompilieren merken, dass du undimensionierte Variablen hast und solche, die in deinem Code nie gebraucht werden.
Gruess Hansueli
Anzeige
AW: Zeilen mit Datumsbereich kopieren
11.06.2021 16:32:13
Yal
Hallo Aculix,

Sub Test()
Dim Z As Range
Dim wQ As Worksheet 'Quelle
Dim wZ As Worksheet 'Ziel
Dim wZ2 As Worksheet 'Ziel 2
Dim Gestern As Date
Dim Morgen As Date
Dim Anfang As Date
Dim Ende As Date
Set wQ = Worksheets("L23")
Set wZ = Worksheets("asd")
Set wZ2 = Worksheets("dsa")
'wZ.Unprotect
wZ.Range("A1:N1337").ClearContents
wZ2.Range("A1:N1337").ClearContents
Gestern = Date - 1
Morgen = Date + 1
For Each Z In wQ.Range(wQ.Range("A1"), wQ.Range("A9999").End(xlUp)).Cells
Anfang = CDate(Z.Range("C1"))
Ende = CDate(Z.Range("D1"))
If Anfang  Morgen Then
wQ.Range("A1:N1").Copy wZ.Range("A9999").End(xlUp).Offset(1, 0)
ElseIf Anfang > Gestern Then
wQ.Range("A1:N1").Copy wZ2.Range("A9999").End(xlUp).Offset(1, 0)
End If
Next
'wz.Protect
End Sub
Einige Tipps (Klugscheisser-Modus an, es ist Freitag):
_ gewönnt dich, mit den Objekt zu arbeiten, anstatt nur Eigenschaften davon: Zelle als Range-Objekt, anstatt nur Row und Column
_ dann kannst Du relative Adresse davon verwenden: A1:N1 von der gegebene Zelle, am beispiel A4, wäre absolut A4:N4. Bei B4, B4:O5, usw.
_ wenn schon überangebot an Variablen, dann sprechenden Variablen. Der "ElseIf Anfang > Gestern" ist von Dir. Nur dass jetzt es auffällt, dass eher Anfang > Morgen gemeint war (was wahrscheinlich der Grund deiner Frage war).
_ Warum prüfen, ob links vom Spalte 15 etwas vorliegt? wenn es leer ist, wird leer kopiert. Zielbereich hast Du eh leer gemacht. Das Coding ist dann leichter.
Klugscheisser-Modus aus. Schönes Wochenende.
VG
Yal
Anzeige

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige