Ich würde gerne folgendes Szenario in die Runde stellen:
Gegeben ist ein Tab mit einer Datumsangabe in Zelle A2 und beliebigen Daten ab Zeile 3 in dieser Spalte.
Ab Spalte C folgen dann 12 feste Spalten, jeweils mit einer 2021 Monatsangabe in Zeile 2 (diese erfolgt immer im Format 01.Monat.Jahr).
Wenn nun der Monat gemäß Zelle A2 für die Daten erreicht ist, soll die passsende Spalte die Daten aus den Zellen A3:A100 aufnehmen.
Folgender Code ist im Einsatz:
Sub Transfer()
Dim zielspalte As Variant
Dim Datum As Long
Dim worksheet As Worksheet
Set Worksheet = Worksheets("test")
Datum = IIf(Worksheet.Cells(2, 1) = "", "", Worksheet.Cells(2, 1))
zielspalte = Application.Match(Datum, Worksheet.Rows(2))
If IsNumeric(zielspalte) Then
Worksheet.Range("a3:a100").Copy
Worksheet.Cells(3, zielspalte).PasteSpecial Paste:=xlValues
Else
MsgBox "Datum nicht gefunden"
End If
Set Worksheet = Nothing
End Sub
Funktioniert grundlegend auch, allerdings möchte ich die Sicherheit das die Spalten für die Monate nur bei 100%iger Übereinstimmung des Datums auch Daten erhalten. Das passiert noch nicht wirklich:Folgende Szenarien:
i) Zelle A2 ist leer oder hat falsches Format, kopiert nicht die Daten irgendwo ein (so gewollt)
ii) Zelle A2 hat ein Datum kleiner als 2021, kopiert nicht die Daten irgendwo ein (so gewollt)
iii) Zelle A2 ist z.B. mit dem 02.01.2021 gefüllt, das Makro kopiert in die Januar Spalte ein obwohl dort der Header als 01.01.2021 gesetzt ist. (noch verkraftbar)
iv) Zelle A2 hat ein Datum größer als 2021 das überschreibt derzeit immer den Dezember (fatal)
Jemand eine Idee welchen Zusatz ich setzten müsste um das zu bewerkstelligen?
Ich habe es mit dieser Alternative versucht, was auch den gewünschten 1:1 Erfolg hatte. Leider leitete sich hier aber eine falsche Ziel Spalte ab und ich bin nicht dahinter gekommen warum.
If Not IsError(Application.Match(Datum, worksheet.Rows(2))) Then
zielspalte = Application.Match(Datum, worksheet.Rows(2))
Wenn einer mal kurz Zeit hat drüber zu schauen, wäre das sehr nett.
Gruß
Mattes