Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Werte vergleichen und Zellen kopieren

Werte vergleichen und Zellen kopieren
26.08.2024 06:58:43
Olli
Hallo zusammen

dank eurer Hilfe habe ich eine funktionierende VBA-Programmierung für das Vergleichen der Werte von Spalte A, Tabelle 2, mit den Werten der Spalte R, Tabelle 1. Sofern der Wert gleich ist, werden die Zellen B - F der Tabelle 2 neben dem entsprechenden Wert kopiert und in Spalte S - W der Tabelle 1 kopiert.

Dies funktioniert alles Bestens! Jedoch kommt es vor, dass ein Wert mehrmals in der Spalte R vorkommen kann und durch das VBA sollte bei jedem Wert die vorgenannten Zellen eingefügt werden. Mit der bestehenden VBA wird jeweils nur beim obersten Wert (der gleichen Werte) die Zellen eingefügt.

Sub WerteVergleichenUndKopieren2()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim i As Long
Dim j As Long
Dim werte_rng As Range
Dim Wert As Range

' Arbeitsblätter definieren
Set ws1 = ThisWorkbook.Sheets("Tabelle1")
Set ws2 = ThisWorkbook.Sheets("Tabelle2")
Set werte_rng = ws2.Range("A:A").SpecialCells(xlConstants)

' Durchlaufe alle werte_rng in Tabelle 2, Spalte A
For Each Wert In werte_rng

i = Wert.Row
Set gef = ws1.Range("R:R").Find(what:=Wert, LookIn:=xlValues, lookat:=xlWhole) ' Findet alle Werte in Tabelle 1, Spalte R
If Not gef Is Nothing Then
Wert.Interior.Color = vbGreen
j = gef.Row
' Wenn gleich, kopiere die Werte
ws1.Cells(j, 19).Value = ws2.Cells(i, 2).Value ' Kopiere B -> S
ws1.Cells(j, 20).Value = ws2.Cells(i, 3).Value ' Kopiere C -> T
ws1.Cells(j, 21).Value = ws2.Cells(i, 4).Value ' Kopiere D -> U
ws1.Cells(j, 22).Value = ws2.Cells(i, 5).Value ' Kopiere E -> V
ws1.Cells(j, 23).Value = ws2.Cells(i, 6).Value ' Kopiere F -> W
Else 'nicht gefunden!
fehl_txt = fehl_txt & Chr(10) & Wert & " nicht gefunden"
Wert.Interior.Color = vbRed
End If
Next Wert

If fehl_txt > "" Then
MsgBox fehl_txt, vbCritical
Else
MsgBox "Werte wurden erfolgreich kopiert!", vbInformation
End If
End Sub

Hat jemand eine Idee wie ich den VBA anpassen kann, dass wenn der Wert in der Spalte R der Tabelle 1 mehrmals vorkommt, die entsprechenden Zellen aus Tabelle 2 entsprechend mehrmals kopiert werden?

Besten Dank für eure Hilfe!

Gruss

Olli

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Werte vergleichen und Zellen kopieren
26.08.2024 08:00:50
Oberschlumpf
Hi,

nur ne Frage:
Kannst du bitte bei Darstellung von Code den Code-Formatier-Button verwenden, damit das Ganze so aussieht:



Sub WerteVergleichenUndKopieren2()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim i As Long
Dim j As Long
Dim werte_rng As Range
Dim Wert As Range

' Arbeitsblätter definieren
Set ws1 = ThisWorkbook.Sheets("Tabelle1")
Set ws2 = ThisWorkbook.Sheets("Tabelle2")
Set werte_rng = ws2.Range("A:A").SpecialCells(xlConstants)

' Durchlaufe alle werte_rng in Tabelle 2, Spalte A
For Each Wert In werte_rng

i = Wert.Row
Set gef = ws1.Range("R:R").Find(what:=Wert, LookIn:=xlValues, lookat:=xlWhole) ' Findet alle Werte in Tabelle 1, Spalte R
If Not gef Is Nothing Then
Wert.Interior.Color = vbGreen
j = gef.Row
' Wenn gleich, kopiere die Werte
ws1.Cells(j, 19).Value = ws2.Cells(i, 2).Value ' Kopiere B -> S
ws1.Cells(j, 20).Value = ws2.Cells(i, 3).Value ' Kopiere C -> T
ws1.Cells(j, 21).Value = ws2.Cells(i, 4).Value ' Kopiere D -> U
ws1.Cells(j, 22).Value = ws2.Cells(i, 5).Value ' Kopiere E -> V
ws1.Cells(j, 23).Value = ws2.Cells(i, 6).Value ' Kopiere F -> W
Else 'nicht gefunden!
fehl_txt = fehl_txt & Chr(10) & Wert & " nicht gefunden"
Wert.Interior.Color = vbRed
End If
Next Wert

If fehl_txt > "" Then
MsgBox fehl_txt, vbCritical
Else
MsgBox "Werte wurden erfolgreich kopiert!", vbInformation
End If
End Sub


Ciao
Thorsten
Anzeige
Wenn es dir nur...
26.08.2024 18:34:24
Case
Moin, :-)

... um die Werte geht, reicht in Tabelle1 S1 folgende Formel: ;-)

=LET(w;Tabelle1!R1:R35;x;Tabelle2!A1:F30;y;FILTER(x;ISTZAHL(VERGLEICH(INDEX(x;;1);w;0)));z;VERGLEICH(Tabelle1!R1:R35;INDEX(x;;1);0);WENNFEHLER(INDEX(x;z;SEQUENZ(;5;2;1));""))


Unter S1:Wx muss es leer sein, da diese Formel "spillt". ;-)

Die Bereiche musst du noch anpassen (geht bei mir nur bis 35 bzw. 30). ;-)

Wenn du bei deinem Makro bleiben möchtest, musst du wahrscheinlich noch ein FindNext einbauen.
https://learn.microsoft.com/de-de/office/vba/api/excel.range.findnext

Servus
Case
Anzeige
Ich sehe gerade...
26.08.2024 20:52:42
Case
Moin Olli, :-)

... deine Excelversion. Da dürfte das mit der Formel nicht klappen. ;-)

Hier eine VBA Variante: ;-)
https://www.herber.de/bbs/user/171833.xlsb

Immer an einer Kopie deiner Originaldatei testen. Da werden Farben entfernt und in S1:Wx werden Daten gelöscht.

Servus
Case
Anzeige
AW: Ich sehe gerade...
30.08.2024 11:14:26
Olli
Morgen,

Besten Dank für dein Infos und deine Hilfe.

Ich habe versucht mein Macro mit eine Find next-Funktion zu ergänzen, was leider gescheitert ist. Meine VBA-Kenntnisse sind dafür noch zu "wackelig":-)

Gruss

Olli
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige