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

Spalte in Abhängigkeit kopieren

Spalte in Abhängigkeit kopieren
22.09.2021 14:01:16
Matthias
Guten Tag werte VBA Gemeinde
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

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalte in Abhängigkeit kopieren
22.09.2021 15:29:10
GerdL
Moin Matthias,
teste mal mit Matchtype "genau".
zielspalte = Application.Match(Datum, Worksheet.Rows(2), 0)
Gruß Gerd
AW: Spalte in Abhängigkeit kopieren
22.09.2021 15:38:23
ChrisL
Hi Mattes

Sub t()
With Worksheets("test")
With .Range("A2")
If IsEmpty(.Value) Or Not IsDate(.Value) Then
MsgBox "keine Datumseingabe"
Exit Sub
ElseIf Year(.Value)  2021 Then
MsgBox "Datum muss im 2021 sein."
Exit Sub
ElseIf Day(.Value)  1 Then
MsgBox "Datum muss am 1. im Monat sein."
Exit Sub
End If
End With
.Range("A3:A100").Copy .Cells(3, Month(.Range("A2")) + 2)
End With
End Sub
Tipp: Verwende Namen für Variablen, welche sich klar von der Bezeichnung des Datentyps und von anderen "VBA-Befehlen" unterscheiden. Also nicht Worksheet As Worksheet oder Datum As Date.
(abgesehen von der schwachen Aussagekraft geht es schief wenn du einen Schlüsselbegriff erwischst)
cu
Chris
Anzeige
AW: Spalte in Abhängigkeit kopieren
22.09.2021 15:39:43
UweD
Hallo
so müssten alle Regeln abgedeckt sein
- nur bei 100%iger Übereinstimmung wird durch den 3. Parameter 0 bei match gewährleistet
- Den Suchbereich nicht auf ganze Zeile2 sondern nur B2:M2; sonst findet der Wert sich immer in Spalte 1

Sub Transfer()
Dim zielspalte As Variant
Dim Datum As Date
Dim WS As worksheet
Set WS = Worksheets("test")
Datum = IIf(IsDate(WS.Cells(2, 1)), WS.Cells(2, 1), 0)
zielspalte = Application.Match(CDbl(Datum), WS.Range("B2:M2"), 0)
If IsNumeric(zielspalte) Then
WS.Cells(3, zielspalte + 1).Resize(98, 1).Value = _
WS.Range("a3:a100").Value
Else
MsgBox "Datum nicht gefunden"
End If
Set WS = Nothing
End Sub
LG UweD
Anzeige
AW: Spalte in Abhängigkeit kopieren
22.09.2021 16:36:57
Matthias
Problem gelöst!
Gerd, danke für deinen Tip! Das mit der 0 hatte ich vorher auch schon mal getestet. Das hat bei mir nur mit einem festen Bereich, nicht aber mit "row" funktioniert.
Chris, Uwe..danke auch Euch fürs umschreiben. Beide Versionen funktionieren und haben Ihren Charme..eine Zeugnis dafür, dass wir auch hier wieder mehrere Pfade beschreiten können.
Einen schönen Tag noch und nochmal vielmals danke!
Gruß
Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige