Datenabgleich: Wert vorhanden? Wenn nein: neu eintragen

  • Excel

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von FloFuchs.

    Datenabgleich: Wert vorhanden? Wenn nein: neu eintragen

    Hallo zusammen,

    ich brauche bitte einen Denkanstoß von euch:

    ich hab zwei Excels mit Artikelnummern. Ich will überprüfen lassen, ob die Artikelnummer aus Tabelle A in B vorhanden ist.
    Wenn ja, dann soll er mir dies und das machen (das dürfte ich dann schon hinkriegen).
    Wenn nicht, dann soll er diese Artikelnummer ins nächste freie Feld der Spalte C schreiben sowie ebenso dies und das machen (das selbe wie oben, aber das krieg ich dann wohl auch schon hin).

    Wie aber bekomm ich den Vergleich beider Tabellen hin?

    Ich wäre - wie üblich - mit FOR i = 1 to 12345 vorgegangen, aber dann geht er mir ja nur Zeile für Zeile durch.
    Und wenn er in Tabelle A einen Wert in B nicht findet, dann könnte der nächste Wert ja schon vorbei sein (weil die alle total durcheinander sind).

    Gehts mit Loop eher? Hab ich aber noch nie benutzt...

    Danke euch schon mal!
    nunja generell schon der richtige Weg.
    Aber so kommst du um zwei Schleifen nich drum rum. Eine Schleife um die zu suchenden Begriffe aufzurufen eine um die andere Tabelle durchzulaufen
    Evtl wirds einfacher/ schneller wennste die eine tabelle in ein Dictionary einliest.
    Dann musste nur in einer Schleife mit der Exists-Methode prüfen obs da is.
    da du ja nur einen "Denkanstoß" brauchst:

    ich bin zwar auch nur absoluter Anfänger, würde es jetzt aber Spontan mit einer Loop-Schleife probieren:

    Visual Basic-Quellcode

    1. Do While Cells(anzahl, 2) <> ""
    2. If Cells(anzahl, 2) = Range("A1").Value Then
    3. 'Was auch immer passieren soll
    4. bolgef = True
    5. Else 'was auch immer
    6. End If
    7. anzahl = anzahl + 1
    8. Loop


    ...code nicht getestet :rolleyes: bin auf Arbeit 8-)


    edit:
    Sorry, muss natürlich noch angepasts werden mit der Auswahl der einezelnen Arbeitsmappen etc.
    wie gesagt: bin auf Arbeit, hab hier liede rnicht die zeit dazu ;)
    Ist halt ne einfache Loop-Schleife
    da mach ich mich mal ran. mit ner Loop könnts gehen, hab ich halt noch nie gemacht.

    Wie aber wähle ich mit Worksheets("xyz") eine ZELLE aus?
    Worksheets("xyz").cells mag er ja nicht.

    ich will ihm ja sagen, dass er das gefundene aus worksheet("abc") in zelle(i,2) in die Zelle(i,3) des worksheets("xyz") kopieren soll.
    Schau dir mal nen Range an. Und ich verweise nochmals auf ein Dictionary, 2 ineinander geschachtelte SChleifen werden ziemlich langsam werden.
    Schau dir mal folgendes an. Ein Dictionary hat halt den Vorteil musste nur einmal füllen und der Exists Vergleich ist deutlich schneller als jedes mal wieder eine ganze Spalte zu durchsuchen.
    Spoiler anzeigen

    Visual Basic-Quellcode

    1. Dim Dic
    2. Sub searchDoubles(SearchRng As Range)
    3. Call fillDic(ActiveSheet.Range("A:A"))
    4. Dim tmpRng As Range
    5. For Each tmpRng In SearchRng
    6. If tmpRng.Value = "" Then
    7. Exit For
    8. Else
    9. If Dic.exists(tmpRng.Value) Then
    10. Exit For
    11. Else
    12. Dic.Add tmpRng.Value, tmpRng.Row
    13. End If
    14. End If
    15. Next
    16. End Sub
    17. Sub fillDic(SearchRng As Range)
    18. Set Dic = CreateObject("Scripting.Dictionary")
    19. Dim tmpRng As Range
    20. For Each tmpRng In SearchRng
    21. If tmp.Value = "" Then
    22. Exit For
    23. Else
    24. Dic.Add tmpRng.Value, tmpRng.Row
    25. End If
    26. Next
    27. End Sub
    ja range kenn ich ja. aber range umfasst ja immer einen ganzen bereich (darum ja RANGE), aber doch keine einzelne zelle?!?

    Ich hab das Buch "Einstieg in VBA mit Excel" von Theis hier. Das hat mir den Einstieg ermöglicht.
    Für das bisschen, was ich bisher in VBA gemacht hab, haben die ersten Seiten gereicht ;)

    Nur steigen halt meine Ansprüche ;)
    Ein Range kann auch nur eine einzelne Zelle sein ;)

    Visual Basic-Quellcode

    1. dim rng as Range
    2. set rng = ActiveWorksheet.Range("A1")

    Schau mal in die Seite rein, lohnt sich wirklich, die meisten Probleme und Fragen die man am ANfang hat (oder blöd :whistling: löst) sind dort beantwortet