Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA - For Schleife - Übernimmt nicht alle Daten

VBA - For Schleife - Übernimmt nicht alle Daten
12.09.2024 12:28:57
Hungerhaken
Hallo zusammen,

ich bin seit einiger Zeit stiller Leser einiger Threads und hole mir Tipps & Tricks.
Nun habe ich aber ein Problem, zu dem ich einfach keine Lösung finde.

Der Code, soll aus zwei Blättern (raw data & Datenbank) Namen vergleichen und bei Treffern die gesamte Zeile in ein neues Blatt kopieren und einfügen.
Der Name des neuen Blattes erstellt sich aus dem Blatt "Datenbank" aus Spalte C und D.

Die meisten Daten werden auch, so wie oben beschrieben, übertragen und erstellt. Beim genauen hinsehen aber, fällt auf, dass einige Daten nicht übernommen werden.
Beispiel:
Name: Müller
In raw data und Datenbank befinden sich die Namen Müller, Meyer, und Kunst.
Meyer und Kunst werden in ein neues Blatt kopiert und eingefügt. Müller aber nicht. Obwohl die Daten vorhanden sind.

Ich bin davon ausgegangen, dass Excel zu "schnell" gewesen ist und die Daten "übersehen" hat. Dementsprechend habe ich Application.Wait eingefügt mit einer Wartezeit von 0.5 sekunden. (raw Data enthält knapp 3000 Einträge und Datenbank wird stetig erweitert, bei 1 Sekunde dauert das ganze ewig :) )

Könnt ihr mir helfen, dass die Daten alle erfasst werden?
Dim wsRawData As Worksheet

Dim wsDatabase As Worksheet
Dim wsNew As Worksheet
Dim lastRowRawData As Long
Dim lastRowDatabase As Long
Dim i As Long, j As Long, k As Long
Dim newSheetName As String

Set wsRawData = ThisWorkbook.Sheets("raw data")
Set wsDatabase = ThisWorkbook.Sheets("Datenbank")

lastRowRawData = wsRawData.Cells(wsRawData.Rows.Count, "A").End(xlUp).Row
lastRowDatabase = wsDatabase.Cells(wsDatabase.Rows.Count, "A").End(xlUp).Row

For i = 2 To lastRowRawData
For j = 2 To lastRowDatabase
If wsRawData.Cells(i, 1).Value = wsDatabase.Cells(j, 1).Value And wsRawData.Cells(i, 2).Value = wsDatabase.Cells(j, 2).Value Then
newSheetName = wsDatabase.Cells(j, 3).Value & " " & wsDatabase.Cells(j, 4).Value
If WorksheetExists(newSheetName) Then
Set wsNew = ThisWorkbook.Sheets(newSheetName)
Else
Set wsNew = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
wsNew.Name = newSheetName
wsRawData.Rows(1).Copy Destination:=wsNew.Rows(1)
End If
k = wsNew.Cells(wsNew.Rows.Count, "A").End(xlUp).Row + 1
wsRawData.Rows(i).Copy Destination:=wsNew.Rows(k)
End If
Application.Wait Now + TimeValue("0:00:01") / 2
Next j
Next i
End Sub
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - For Schleife - Übernimmt nicht alle Daten
12.09.2024 12:38:45
UweD
Hallo

Lade doch mal eine Beispieldatei hoch


LG UweD
AW: VBA - For Schleife - Übernimmt nicht alle Daten
12.09.2024 12:40:59
Onur
"Könnt ihr mir helfen, dass die Daten alle erfasst werden? " ? Schwer, ohne die Datei zu haben.
Wie soll man denn den Code ohne die Datei überprüfen ?
AW: VBA - For Schleife - Übernimmt nicht alle Daten
12.09.2024 12:42:39
Uduuh
Hallo,
kann ich mir nicht vorstellen, dass es an der Geschwindigkeit liegt. Eher an Differenzen bei den Einträgen. "Müller " statt "Müller".

Lad mal die Datei hoch.

Gruß aus'm Pott
Udo
Anzeige
AW: VBA - For Schleife - Übernimmt nicht alle Daten
12.09.2024 16:01:55
daniel
Hi

probier mal dieses Makro:
es arbeitet etwas anders und ist auf schnelle Durchlaufzeit optimiert
zum einen wird die Datenbank sortiert, so dass man die Namen schneller finden kann als mit einer Suchschleife
zum anderen wird dann auch die Liste nach den Orten sortiert, so dass alle Zeilen, die auf ein Tabellenblatt kommen, direkt untereinander stehen.
damit kann man diese Zeilen gemeinsam in einem Arbeitsschritt kopieren, was auch schneller ist als jede Zeile einzeln zu kopieren.
am schluss wird wieder in die alte Reihenfolge zurücksortiert.

die Zeilen mit den Namen, für die es keine Treffer in der Datenbank gibt, werden in einen eigenen Reiter geschrieben, so dass du dir diese Zeilen nochmals genauer anschauen und prüfen kannst, warum es für diese Zeilen keinen Treffer gab.


Sub Makro1()

Dim sh As Worksheet
Dim Zelle1 As Range, Zelle2 As Range

Application.DisplayAlerts = False
For Each sh In ThisWorkbook.Worksheets
Select Case sh.Name
Case "raw data", "Datenbank"
Case Else
sh.Delete
End Select
Next
Application.DisplayAlerts = True

With Sheets("Datenbank").Range("G1")
.Formula2R1C1 = "=LET(x,FILTER(C1:C4,C1>""""),a,CHOOSECOLS(x,1)&"" ""&CHOOSECOLS(x,2),b,CHOOSECOLS(x,3)&"" ""&CHOOSECOLS(x,4),SORTBY(HSTACK(a,b),a))"
End With

With Sheets("raw data").UsedRange
With .Columns(.Columns.Count + 1).Resize(, 2)
.Columns(1).FormulaR1C1 = "=Let(x,RC1&"" ""&RC2,IF(x="" "","""",IFError(IF(VLookUp(x,Datenbank!R1C7#,1,1)=x,VLookup(x,Datenbank!R1C7#,2,1),""_keine Zuordnung""),""_keine Zuordnung"")))"
.Columns(2).FormulaR1C1 = "=IF(RC[-1]="""","""",Row())"
.Formula = .Value
.EntireRow.Sort key1:=.Cells(1, 1), order1:=xlAscending, Header:=xlYes
Set Zelle2 = .Cells(1, 1)
Do
Set Zelle1 = Zelle2.Offset(1, 0)
If Zelle1.Value = "" Then Exit Do
Set Zelle2 = .Find(what:=Zelle1.Value, LookIn:=xlFormulas, lookat:=xlWhole, searchdirection:=xlPrevious)
Set sh = Worksheets.Add(after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
sh.Name = Zelle1.Value
.Worksheet.Rows(1).Resize(1, .Column - 1).Copy sh.Cells(1, 1)
Range(Zelle1, Zelle2).EntireRow.Resize(, .Column - 1).Copy sh.Cells(2, 1)
Loop
.EntireRow.Sort key1:=.Cells(1, 2), order1:=xlAscending, Header:=xlYes
.ClearContents
End With
End With

Sheets("Datenbank").Range("G1").ClearContents

End Sub


Gruß Daniel
Anzeige
AW: VBA - For Schleife - Übernimmt nicht alle Daten
12.09.2024 12:52:15
Hungerhaken
Hier die Datei.
Natürlich, so wie es ist, zeigt sie hier aufgrund der geringen Menge keine Fehler an.
Leider kann ich die original Datei nicht zur Verfügung stellen..

https://www.herber.de/bbs/user/172177.xlsm
AW: VBA - For Schleife - Übernimmt nicht alle Daten
12.09.2024 12:55:49
Hungerhaken
Die korrekte Schreibweise, sowie ungewollte Leerzeichen habe ich bereits kontrolliert - Daran lag es leider nicht
Anzeige
AW: VBA - For Schleife - Übernimmt nicht alle Daten
12.09.2024 15:38:49
Peter Trawinski
Könnte es sein, dass in einem "Müller" das "ü" in ANSI (1 Byte Buchstabe) und im anderen als Unicode (2 Byte Buchstabe) abgelegt ist? Die sehen zwar gleich aus, werden aber nicht als gleich erkannt!
AW: VBA - For Schleife - Übernimmt nicht alle Daten
12.09.2024 12:54:15
Onur
Dann hättest du dir die Datei auch sparen können....
AW: VBA - For Schleife - Übernimmt nicht alle Daten
12.09.2024 12:56:17
JoWE
nee so bringt das nix, der Fehler steckt wie bereits vermutet sicherlich in Deinen Originaldaten
Anzeige
AW: VBA - For Schleife - Übernimmt nicht alle Daten
12.09.2024 13:11:04
daniel
also es wäre schon gut, wenn der Fehler in der Beispieldatei nachvollziehbar ist.
ein weiterer Nachteil ist, dass du alles gleich nennst (test1) und man nicht sieht ob du jetzt Namen oder Standortdaten verwendest.
also eine Beispieldatei, die etwas näher an der Realität ist (unter berücksichtigung des Datenschutzes), wäre schon hilfreich.
so würde ich, wie bereits geschrieben, vermuten dass die Namen in den beiden Tabellen nicht gleich geschrieben sind.

ist es in der Realität so, dass es zu einer Kombination Test+Standort immer nur genau einen Namen gibt?
oder können da auch mal mehr in einer Liste stehen.

ich würde mir hier erstmal die Tabelle raw data so erweitern, dass ich die Werte der Spalte C und D erstmal per Formel in eine weitere Spalte einfüge und dann könntest du einfach eine Schleife über diese Spalte machen.

Gruß Daniel






Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
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