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

VBA Zeilen werden mehrfach kopiert

VBA Zeilen werden mehrfach kopiert
31.05.2021 22:45:34
Paddy
Hallo ihr Lieben,
ich habe einen Worksheet mit zwei Reitern, die in Spalte H auf Übereinstimmungen untersucht werden sollen. Werden entsprechende Werte in Sheet 2 Spalte H im Vergleich zu Sheet 1 Spalte H gefunden, so sollen die entsprechenden Zeilen aus Sheet 2 in Sheet 3 kopiert werden. An und für sich funktioniert es auch, allerdings werden die Zeilen mehrfach kopiert und ich kann mir nicht erklären, warum.
Folgenden Code habe ich geschrieben:

Sub Vergleich()
Dim x As Integer, y As Integer
Dim lastrow1 As Integer, lastrow2 As Integer, Kundennummer As String
Dim NextRow As Integer
lastrow1 = Sheets(1).Cells(Rows.Count, 8).End(xlUp).Row
lastrow2 = Sheets(2).Cells(Rows.Count, 8).End(xlUp).Row
Application.ScreenUpdating = False
v = 0
For x = 2 To lastrow1
Kundennummer = Sheets(1).Cells(x, 8)
For y = 2 To lastrow2
If Sheets(2).Cells(y, 8) = Kundennummer Then
Sheets(2).Cells(y, 1).Resize(1, 14).Copy
Sheets(3).Select
NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
Sheets(3).Cells(NextRow, 1).Select
Sheets(3).Paste
End If
Next
Next
Application.ScreenUpdating = True
End Sub
Kann mir das jemand erklären und mir bei dem Code helfen, so dass jede relevante Spalte nur einmal kopiert und eingefügt wird?
Danke und liebe Grüße
Paddy

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Zeilen werden mehrfach kopiert
31.05.2021 23:16:47
ralf_b
probiers mal so, ungetestet.

Sub Kundenvergleich()
Dim x As Integer, y As Integer, NextRow As Integer
Dim lastrow1 As Long, lastrow2 As Long, v As Long
Dim rngFund As Range
lastrow1 = Sheets(1).Cells(Rows.Count, 8).End(xlUp).Row
lastrow2 = Sheets(2).Cells(Rows.Count, 8).End(xlUp).Row
Application.ScreenUpdating = False
v = 0
For x = 2 To lastrow1
With Sheets(2).Cells(2, 8).Resize(lastrow2)
Set rngFund = .Find(what:=Sheets(1).Cells(x, 8).Value, LookIn:=xlValues, XlLookAt:=xlWhole)
End With
If Not rngFund Is Nothing Then
With Sheets(3)
NextRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(NextRow, 1).Resize(, 14).Value = Sheets(2).Cells(rngFund.Row, 1).Resize(, 14).Value
v = v + 1
End With
End If
Next
Application.ScreenUpdating = True
If v > 0 Then
MsgBox "Übereinstimmungen wurden in den Reiter /Ergebnis/ kopiert.", vbInformation, "Übereinstimmungen gefunden"
Else
MsgBox "Es konnten keine Übereinstimmungen ermittelt werden. Sie können die Abfrage schließen", vbCritical, "Keine Übereinstimmungen"
End If
End Sub

Anzeige
AW: VBA Zeilen werden mehrfach kopiert
01.06.2021 07:21:44
Paddy
Moin Ralf,
klappt leider nicht. Fehlermeldung: Benanntes Argument nicht gefunden.
Gruß
Paddy
AW: VBA Zeilen werden mehrfach kopiert
01.06.2021 08:16:16
Pierre
Hallo Paddy,
dann ist deine Version wahrscheinlich doch relevant ;-)
Sag uns mal deine xl-Version und vielleicht auch die Stelle, die markiert wird.
Gruß Pierre
AW: VBA Zeilen werden mehrfach kopiert
01.06.2021 09:51:56
Paddy
Moin Pierre,
ich nutze Excel 2013 (32-Bit).
Der Fehler tritt bei folgender Zeile auf:

Set rngFund = .Find(what:=Sheets(1).Cells(x, 8).Value, LookIn:=xlValues, XlLookAt:=xlWhole)
Danke und gruß
Paddy
AW: VBA Zeilen werden mehrfach kopiert
01.06.2021 10:03:29
Daniel
Hi
Check mal deine Parameternamen.
Entweder in der Hilfe nachlesen, oder mit Code vergleichen, den du mit dem Recorder aufgezeichnet hast.
Kleiner Tip:
VBA verwendet das Präfix "xl" nur für die Systemvariablen, aber nicht für die Parameter-Benennung.
Gruß Daniel
Anzeige
AW: VBA Zeilen werden mehrfach kopiert
01.06.2021 18:22:42
ralf_b
der Vollständigkeit halber. aber ich schrieb ja auch "ungetestet".

Set rngFund = .Find(what:=Sheets(1).Cells(x, 8).Value, LookIn:=xlValues, LookAt:=xlWhole)

AW: VBA Zeilen werden mehrfach kopiert
01.06.2021 12:09:31
GerdL
Moin Paddy,
du hattest keine zusätzliche Prüfung, ob ein Eintrag bereits in Sheets(3) vorhanden ist.

Sub Unit()
Dim x As Long, y As Long, NextRow As Long, Kundennummer As String
Application.ScreenUpdating = False
NextRow = Sheets(3).Cells(Sheets(3).Rows.Count, 8).End(xlUp).Row + 1
For x = 2 To Sheets(1).Cells(Sheets(1).Rows.Count, 8).End(xlUp).Row
Kundennummer = Sheets(1).Cells(x, 8)
For y = 2 To Sheets(2).Cells(Sheets(2).Rows.Count, 8).End(xlUp).Row
If Sheets(2).Cells(y, 8) = Kundennummer Then
If WorksheetFunction.CountIf(Sheets(3).Columns(8), Kundennummer) = 0 Then
Sheets(2).Cells(y, 1).Resize(1, 14).Copy Sheets(3).Cells(NextRow, 1)
NextRow = NextRow + 1
Exit For
End If
End If
Next y
Next x
End Sub
Gruß Gerd
Anzeige
AW: VBA Zeilen werden mehrfach kopiert
01.06.2021 14:15:00
Paddy
Moin Gerd,
erstmal lieben Dank für deine Hilfe.
Ich habe mich vermutlich vorher nicht klar genug ausgedrückt, sorry dafür.
Es ist so, dass mit meinem ursprünglichen Code identische Zeilen in ihrer Gesamtheit mehrfach kopiert werden. Eine zusätzliche If-Abfrage, ob schon ein Eintrag zu der Kundennummer in Sheet(3) steht, hilft hier leider nicht. Es können nämlich Kunden mehrfach vorkommen, dann aber mit unterschiedlichen Lieferungen. Es müsste also irgendwie sichergestellt werden, dass jede betroffene Zeile nur einmal kopiert wird.
Kannst du hier ggf. noch helfen?
Ich verzweifle leider.... :-(
Danke und liebe Grüße
Paddy
Anzeige
AW: VBA Zeilen werden mehrfach kopiert
01.06.2021 14:32:18
Pierre
Hi Paddy,
dann prüfe statt auf Kundennummer eben auf Liefernummer oder was auch immer.
Müsste dann eigentlich nur die Spalte anzupassen sein.
Gruß Pierre
AW: VBA Zeilen werden mehrfach kopiert
01.06.2021 17:49:15
GerdL
Moin Pascal!
Das war jetzt wirklich arbeitsintensiv. :-)
Teste mal:

Sub Unit()
Dim x As Long, y As Long, NextRow As Long, Kundennummer As String
Application.ScreenUpdating = False
NextRow = Sheets(3).Cells(Sheets(3).Rows.Count, 8).End(xlUp).Row + 1
For x = 2 To Sheets(1).Cells(Sheets(1).Rows.Count, 8).End(xlUp).Row
Kundennummer = Sheets(1).Cells(x, 8)
For y = 2 To Sheets(2).Cells(Sheets(2).Rows.Count, 8).End(xlUp).Row
If Sheets(2).Cells(y, 8) = Kundennummer Then
If WorksheetFunction.CountIfs(Sheets(3).Columns(1), Sheets(2).Cells(y, 1), _
Sheets(3).Columns(2), Sheets(2).Cells(y, 2), _
Sheets(3).Columns(3), Sheets(2).Cells(y, 3), _
Sheets(3).Columns(4), Sheets(2).Cells(y, 4), _
Sheets(3).Columns(5), Sheets(2).Cells(y, 5), _
Sheets(3).Columns(6), Sheets(2).Cells(y, 6), _
Sheets(3).Columns(7), Sheets(2).Cells(y, 7), _
Sheets(3).Columns(8), Sheets(2).Cells(y, 81), _
Sheets(3).Columns(9), Sheets(2).Cells(y, 9), _
Sheets(3).Columns(10), Sheets(2).Cells(y, 10), _
Sheets(3).Columns(11), Sheets(2).Cells(y, 11), _
Sheets(3).Columns(12), Sheets(2).Cells(y, 12), _
Sheets(3).Columns(13), Sheets(2).Cells(y, 13), _
Sheets(3).Columns(14), Sheets(2).Cells(y, 14)) = 0 Then
Sheets(2).Cells(y, 1).Resize(1, 14).Copy Sheets(3).Cells(NextRow, 1)
NextRow = NextRow + 1
End If
End If
Next y
Next x
End Sub
Gruß Gerd
Anzeige
AW: VBA Zeilen werden mehrfach kopiert
01.06.2021 17:52:11
GerdL
Upps! Paddy, natürlich!
AW: VBA Zeilen werden mehrfach kopiert
01.06.2021 17:55:19
GerdL
Upps, upps
und , 81) muss , 8) heißen.
AW: VBA Zeilen werden mehrfach kopiert
01.06.2021 19:09:21
Paddy
Moin Gerd,
vielen Dank, jetzt passt das Ergebnis. Ich versuche jetzt noch, das Ganze nachvollziehen zu können :D
Lieben Dank für deinen Support.
Liebe Grüße
Paddy

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige