Office: For Each Schleife, Zellen von zwei Bereichen vergleichen

Helfe beim Thema For Each Schleife, Zellen von zwei Bereichen vergleichen in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo zuasmmen, ich habe folgendes Problem: Ich möchte mit einer Schleife einzelne Zellen eines definierten Bereichs durchgehen und mit den Zellen... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von anci, 15. Februar 2014.

  1. For Each Schleife, Zellen von zwei Bereichen vergleichen


    Hallo zuasmmen,

    ich habe folgendes Problem:
    Ich möchte mit einer Schleife einzelne Zellen eines definierten Bereichs durchgehen und mit den Zellen eines anderen Bereichs vergleichen. Wahrscheinlich benötige ich dafür zwei Schleifen? Wenn jede Zelle des einen Bereichs mit jeder Zelle des anderen Bereichs verglichen werden soll.

    Ich bin ein VBA Neuling und habe auch mit Programmierung leider nicht viel am Hut, habe hier einen Anfang geschrieben, der mir den Laufzeitfehler 13 ausgibt (liegt wahrscheinlich am Vergleich der beiden Bereiche).


    Dim RaVertragsnrPT As Range
    Set RaVertragsnrPT = Worksheets("Pivot").Range("A4:A109")
    Dim RaZellePT ' Variable für jede Zelle der PT
    Dim RaBereich As Range ' Variable für Bereich
    Dim LoLetzte As Long
    ' Variable für Zeile
    LoLetzte = IIf(IsEmpty(Cells(Rows.Count, 7)), Cells(Rows.Count, 7).End(xlUp).Row, Rows.Count)

    Set RaBereich = Worksheets("Exported Contents").Range("D2*biggrin.gif*" & LoLetzte)
    RaBereich.Select


    For Each RaZellePT In RaVertragsnrPT
    With RaZellePT

    If RaZellePT.Value RaBereich.Value Then

    MsgBox "gleich" & RaZellePT
    Else: MsgBox "nicht gleich" & RaZellePT
    End If

    End With

    Next RaZellePT


    Es ist wie gesasgt nur der Anfang meines Tools und deshalb soll zumindest das Grundgerüst stimmen.
    Ich bin für jede Hilfe dankbar!

    :)
     
  2. Beverly
    Beverly Erfahrener User
    Hi,

    ich habe es mal so interpretiert, dass geprüft werden soll, ob der Inhalt jeder Zelle aus A4:A109 irgendwo im Bereich D2: Dxx vorkommt, also im 2. Bereich überhaupt vorhanden ist:

    Code:
    For Each Schleife, Zellen von zwei Bereichen vergleichen grusz.gif
     
    Beverly, 16. Februar 2014
    #2
  3. Danke für die schnelle Antwort, ist für mich auch ein guter Lösungsansatz. Ich habe da allerdings noch ein zwei Fragen, wo Sachen nicht funktionieren.

    in der For-Schleife sollen weitere Bedingungen abgefragt werden, bzw. sollen diese mit einem Wert verglichen werden, das sieht dann so aus:

    For Each rngZelle In rngVertragsnrPT
    With rngBereichXX

    If Not IsError(Application.Match(rngZelle, Range(Cells(2, 4), Cells(lngLetzte, 4)), 0)) Then
    strVorhanden = strVorhanden & vbLf & rngZelle
    ElseIf Not IsError(Application.Match(Range(Cells(2, 9), Cells(lngLetzte, 9)), "WertXY", 0)) Then
    ElseIf ..... (würde noch zwei/drei Verschachtelungen weiter gehen)
    Else:
    MsgBox "nicht passend: " & rngZelle
    End If
    End With
    Next rngZelle

    Diese Möglichkeit funktioniert allerdings nicht. Es soll in der Zeile von der jeweils zu vergleichenden Nummer 5 Spalten nach rechts gehen und den Wert mit einem best. Wert ("WertXY" im Beispiel) vergleichen

    Danke nochmal und ich hoffe es ist nicht allzu kompliziert geschrieben ;-)
     
  4. Beverly
    Beverly Erfahrener User

    For Each Schleife, Zellen von zwei Bereichen vergleichen

    Die weitern Abfragen müssen innerhalb der If-Anweisung erfolgen, denn zuerst muss ja gesucht werden, wo sich der Begriff befindet - also nach diesem Prinzip:

    Code:
    For Each Schleife, Zellen von zwei Bereichen vergleichen grusz.gif
     
    Beverly, 17. Februar 2014
    #4
  5. Ganz ganz lieben Dank nochmal für die Antwort!

    Ich habe allerdings noch ein Problem ... tschuldige, dass es bei mir hier immer weiter geht...

    Und zwar vergleiche ich ja rngZelle mit dem Bereich cells(2,4), Cells(lngLetzte, 4), dabei ist es so, dass rngZelle in diesem Bereich mehrmals auftauchen kann. Wenn ich mein Programm so ausführe, geht es zwar von rngZelle aus und schaut auch ob gleich mit "WertXY" aber dann geht die Schleife weiter und der nächste Wert rngZelle wird verglichen. Eigentlich soll es so laufen, dass das so oft ausgeführt wird, wie oft der Wert in der anderen Tabelle vorkommt, also dass immer wieder vergleicht werden soll, ob es den wert nochmal dort gibt und ob es gleich WertXY ist. Hier zeige ich ein mal meinen falschen Code:

    For Each rngZelle In rngVertragsnrPT
    With rngBereichXX

    If Not IsError(Application.Match(rngZelle, Range(Cells(2, 4), Cells(lngLetzte, 4)), 0)) Then
    strVorhanden = strVorhanden & vbLf & rngZelle

    If rngZelle.Offset(0, 5) = "WertY" Then
    'Weitere Anweisung, wahrscheinlich Zeile kopieren und auf neuem Tabellenblatt einfügen
    'Else Continue for
    End If

    Else: MsgBox "nicht passend: " & rngZelle
    End If
    End With
    Next rngZelle
     
  6. Beverly
    Beverly Erfahrener User
    Es wäre schon schön gewesen, wenn du schon gleich zu Beginn geschrieben hättest, dass der Begriff mehrfach auftreten kann...

    Code:
    For Each Schleife, Zellen von zwei Bereichen vergleichen grusz.gif
     
    Beverly, 17. Februar 2014
    #6
  7. Entschuldigung, dass ich das nicht früher erwähnt hatte. Leider funktioniert der Code bei mir nicht und gibt mit ab der Zeile

    Set rngZelle2 = Range(Cells(2, 4), Cells(lngLetzte, 4)).FindNext(rngZelle2)

    den Laufzeitfehler 5 an. Ich habe es bereits versucht die beiden Zeilen einzeln zu schreiben aber das Funktioniert leider auch nicht, da taucht dann ein Compiler Fehler auf.

    VG
     
  8. For Each Schleife, Zellen von zwei Bereichen vergleichen

    Sorry, es war nicht die Zeile:
    Set rngZelle2 = Range(Cells(2, 4), Cells(lngLetzte, 4)).FindNext(rngZelle2)

    sondern:

    Set rngZelle2 = Range(Cells(2, 4), Cells(lngLetzte, 4)).Find(rngZelle, lookat:=xlWhole)
     
  9. Beverly
    Beverly Erfahrener User
    In meinem Code steht in diesen Zeilen jeweils vor Range und Cells ein Punkt (.) weil sie sich auf das 2. Tabellenblatt bezieht.


    For Each Schleife, Zellen von zwei Bereichen vergleichen grusz.gif
     
    Beverly, 17. Februar 2014
    #9
  10. Danke, hat mir sehr weiter geholfen. Eine letzte Frage habe ich noch und zwar vielleicht kannst du mir das ja auch beantworten. Die Tabelle aus Tabellenblatt 1 ist eine Pivot Tabelle. Der Bereich soll sich auf die erste Spalte der Pivot Tabelle beziehen. In meinem Beispiel was ich anhand deines ExcelSheets etwas geändert habe, wären das die Artikelnr. diese sollen mit den Artikelnr der anderen Tabelle verglichen werden und ggf, wenn die gleich sind und die anderen Kriterien wie = WertX passen, dann sollen die Preise verglichen werden und wenn möglich auf ein neue erzeugtes Tabellenblatt eine weitere Tabelle erzeugen mit den Abweichungen. Am meisten hakt es bei mir jetzt daran, dass ich die Daten aus der ersten Spalte der Pivottabelle einlesen kann, bzw. dass ich es so allgemein halten kann, sodass sich, wenn nächsten Monat ähnliche Artikelnr. kommen sich der Bereich anpasst (also ggf. ein zwei Zeilen mehr mit einnehmen kann)

    Danke und VG
     
  11. Beverly
    Beverly Erfahrener User
    Hi,

    sorry, ich verstehe nicht so ganz, was nun mit wem - also welche Spalte mit welcher Spalte auf welchem Tabellenblatt - vergleichen werden soll.


    For Each Schleife, Zellen von zwei Bereichen vergleichen grusz.gif
     
  12. Hey, sorry war vielleicht etwas undeutlich geschrieben. Also die Artikelnummern der Pivottabelle sollen nacheinander durchgegangen werden und es soll geschaut werden, ob diese in der Tabelle 2 vorhanden sind. Wenn die vorhanden sind, soll geschaut werden, ob anderen Kriterien passen (wie bspw. ist gleich WertXY). Wenn die Kriterien alle zutreffen soll der Preis aus Tabelle 2 mit dem Preis bei der Artikelnummer in der Pivot Tabelle verglichen werden. Ausnahme: Wenn die Artikelnummer mehrmals in der Tabelle 2 auftaucht und mehrmals auch die Kriterien alle zutreffen, dann soll er diese Preise zusammenzählen und dann erst mit dem Preis aus der Pivot Tabelle vergleichen. Ich hoffe es war jetzt etwas verständlicher. Mein erstes Hauptproblem ist wie gesagt noch, dass der Bereich der die Artikelnummern aus der Pivot Tabelle angibt dynamisch gehalten werden soll, also wenn nächsten Monat andere, bzw. mehr oder weniger Artikelnummern auftauchen soll der Bereich entsprechend automatisch angepasst sein.

    VG
     
  13. Beverly
    Beverly Erfahrener User

    For Each Schleife, Zellen von zwei Bereichen vergleichen

    Wie man die letzte belegte Zelle ermittelt, dafür gibt es doch schon einen Code. Du musst also einfach noch an eine weitere Variable deklarieren und auf Spalte N anwenden:

    Code:
    For Each Schleife, Zellen von zwei Bereichen vergleichen grusz.gif
     
  14. Danke, stimmt ich hatte gedacht bei einer Pivot Tabelle gäbe es noch etwas anderes.

    Warum muss ich in diesem Code den Befehl .Address benutzen?
    In Worksheets("Tabelle1").Range(Cells(6, 14).Address, Cells(lngLetztePiv, 14))

    Ich bekomme an der Stelle leider den Laufzeitfehler 1004 "Application-defined or object-defined error

    Könntest du spontan etwas vermuten, was falsch wäre?
     
  15. Speziell geht es um die Zeile:

    For Each rngZelle In Worksheets("Pivot").Range(Cells(4, 1).Address, Cells(lngLetztePiv, 1))
     
Thema:

For Each Schleife, Zellen von zwei Bereichen vergleichen

Die Seite wird geladen...
  1. For Each Schleife, Zellen von zwei Bereichen vergleichen - Similar Threads - For Each Schleife

  2. For Each Next läuft nur einmal durch

    in Microsoft Access Hilfe
    For Each Next läuft nur einmal durch: Hallo Leute, ich hoffe ihr könnt mir weiter helfen... ich habe folgendes Modul erstellt: Sub VZauslesen() 'deklarieren Variablen für Dateien suchen Dim AuftragNr As String Dim Dateiname As...
  3. For Each Schleifen als Struktogramm

    in Microsoft Excel Hilfe
    For Each Schleifen als Struktogramm: Hallo zusammen, folgenden Code müsste ich in einem Struktogramm unterbringen, komme aber leider mit den For Each Schleifen nicht so ganz klar. Hat jemand einen Vorschlag? Vielen Dank und schöne...
  4. For Each Schleife Anstatt ActiveSheet festen Tabellenblattnamen benutzen

    in Microsoft Excel Hilfe
    For Each Schleife Anstatt ActiveSheet festen Tabellenblattnamen benutzen: Hallo , habe folgende Schleife geschrieben : Dim rngBereich As Range Dim rngZelle As Range Sub Test() Set rngBereich = ActiveSheet.Range(ActiveSheet.Cells(1, 1), _...
  5. For Each Schleife abbrechen mit IF

    in Microsoft Excel Hilfe
    For Each Schleife abbrechen mit IF: Liebe Community, mir stellt sich gerade die Frage, wie ich eine For Each Schleife abbrechen kann. In der anhängenden Excel-Datei habe ich den Bereich A1:A25 mit dem Bereichsnamen "open"...
  6. For Each Schleife mehrmals nach gleichem Wert suchen

    in Microsoft Excel Hilfe
    For Each Schleife mehrmals nach gleichem Wert suchen: Hallo Ich hänge seit einigen Tagen an einem Problem. Ich möchte Daten aus einer Tabelle über Userform D auslesen und in Userform wieder ausgeben. Das habe ich auch soweit hinbekommen. Ich suche...
  7. Recordset mit For each durchlaufen

    in Microsoft Access Hilfe
    Recordset mit For each durchlaufen: Hallo, ich habe hier einen Bericht, in dem ich Felder im Detailbereich befüllen möchte dies versuche ich mit For Each, bekomme aber nnicht raus wie, weiß jemand Rat? Code: Private Sub...
  8. VBA: For Each Schleife mit mehreren Bedingungen

    in Microsoft Excel Hilfe
    VBA: For Each Schleife mit mehreren Bedingungen: Hallo zusammen, erstmal möchte ich Euch eine schöne Osterzeit mit erholsamer Zeit wünschen.:rolleyes: Mein aktuelles Problem versuche ich schon seit geraumer Zeit zu lösen, aber da ich noch...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden