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

VBA finde Übereinstimmung, dann copy paste range

VBA finde Übereinstimmung, dann copy paste range
26.02.2024 18:42:07
Nadja123
Hallo. Ich benötige ein Makro mit dem ich in meinem Workbook1 "CIB" Spalte C mit meinem Workbook2 "Z_IDeaS_CIB - Kopie" Spalte C vergleiche und wenn es eine Übereinstimmung gefunden hat, ab da die Tabelle kopiert. In Spalte C sind in beiden Sheets Anreisedaten angeben. "CIB" wird täglich als Report an uns gesendet mit dem aktuellem Datum +366 Tage. In "Z_IDeaS_CIB - Kopie" sollen die vergangenen Anreisedaten bestehen bleiben und dann die aktuellen Daten ersetzt/überschrieben werden.
Ich wurde schon Online fündig und hab versucht das Makro anzupassen. Leider habe ich nur Basic VBA Kenntnisse und ich finde den Fehler nicht. Ich vermute es hat etwas mit der Range zu tun. Wäre toll, wenn mir jemand helfen kann.

Sub FindAndCopy()

Dim WS1 As Worksheet
Dim WS2 As Worksheet
Dim Rng1 As Range
Dim Rng2 As Range
Dim c As Range

Application.ScreenUpdating = False
Set WS1 = Workbooks("Z_IDeaS_CIB - Kopie.xlsm").Sheets("Data_Extraction")
Set WS2 = Workbooks("CIB.xlsx").Sheets("Property")
Set Rng1 = WS1.Range(WS1.Range("C2"), WS1.Range("C" & Rows.Count).End(xlUp))
Set Rng2 = WS2.Range(WS2.Range("C2"), WS2.Range("C" & Rows.Count).End(xlUp))
For Each c In Rng1
On Error Resume Next
Rng2.Find(What:=c).Offset(0, 1).Resize(, 60).Copy Destination:=c.Offset(0, 1)
Err.Clear
Next c
Set WS1 = Nothing
Set WS2 = Nothing
Set Rng1 = Nothing
Set Rng2 = Nothing
Application.ScreenUpdating = True
End Sub

LG
Nadja

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA finde Übereinstimmung, dann copy paste range
26.02.2024 20:39:44
daniel
Hi
ist es nicht einfacher, in der Zieldatei alle Zeilen zu löschen, in der das Datum größer als Heute ist und dann alle Quelldaten am Ende einzufügen?
also beispielsweise mit dem Autofilter nach "größer Heute" filtern, das löschen , dann den filter aufheben und die Daten rüber kopieren.
Code könnte so aussehen:

dim WS1 as Worksheet

dim WS2 as Worksheet
Set WS1 = ...
Set WS2 = ...

'--- ehemalige Zukunftsdaten löschen
With WS1.UsedRange
.AutoFilter Field:=1, Criteria1:=">=" & Format(Date, "MM\/DD\/YYYY")
.Offset(1, 0).SpecialCells(xlCellTypeVisible).Clear
.AutoFilter
End With

'--- Neue Zukunftsdaten einfügen
WS2.Usedrange.Offset(1, 0).Copy Desitnation:=WS1.Cells(Rows.count, 1).End(xlup).Offset(1, 0)


bei Autofilter Field:=... musst du die Spaltennummer der Spalte mit dem Datum eingeben.
das .Offset(1 0) im Filter und beim .Copy schließt die Überschriftenzeile aus.

Gruß Daniel
Anzeige
AW: VBA finde Übereinstimmung, dann copy paste range
26.02.2024 20:52:54
Yal
Hallo Nadja,

verstehe ich richtig, wenn einen Treffer in Spalte C gefunden wurde, sollen von diesen Treffer von eine Zeile nach unter bis x Zeilen die 60 Spalten kopiert werden und unter die Referenzwert eingefügt?

Sub FindAndCopy()

Dim Quelle As Range
Dim Z As Range 'Z wie Zelle
Dim T As Range 'T wie Treffer

Application.ScreenUpdating = False
With Workbooks("CIB.xlsx").Sheets("Property")
Set Quelle = Range(.Range("C2"), .Cells(Rows.Count, "C").End(xlUp))
End With
With Workbooks("Z_IDeaS_CIB - Kopie.xlsm").Sheets("Data_Extraction")
For Each Z In Range(.Range("C2"), .Cells(Rows.Count, "C").End(xlUp))
Set T = Quelle.Find(Z.Value)
If Not T Is Nothing Then
T.Offset(0, 1).Resize(366, 60).Copy Destination:=Z.Offset(0, 1)
Exit Sub 'eine zweite Kopiererei wäre sinnlos
End If
Next Z
End With
Application.ScreenUpdating = True
End Sub


VG
Yal
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige