iona: einfaches VBA Marko...

hi leute,

habe folgendes problem:
Im Feld 1 "Referenz-PISA befinden sich AHV-Nr.
Im Feld 2  "WPE" befinden sich auch AHV-Nr.

Ist nun eine AHV-Nr. vom Feld 1 im Feld 2 nicht vorhanden, soll dies im Feld 3 "nicht WPE" ausgegeben werden.

Sub Vergleichen()
    Dim Referenz, WPE, nichtWPE As Integer
    Dim found As Boolean

Referenz = 1
    WPE = 1
    nichtWPE = 1

Dim a, b As String

Do While Worksheets("Referenz-PISA").Cells(Referenz, 1) <> ""
        found = False

Do While Worksheets("WPE").Cells(WPE, 1) <> ""
            a = Worksheets("Referenz-PISA").Cells(Referenz, 1)
            b = Worksheets("WPE").Cells(WPE, 1)
            If Worksheets("Referenz-PISA").Cells(Referenz, 1) = Worksheets("WPE").Cells(WPE, 1) Then
              found = True
              Exit Do
            End If
            WPE = WPE + 1
        Loop

If Not found Then
            Worksheets("nichtWPE").Cells(nichtWPE, 1) = Worksheets("Referenz-PISA").Cells(Referenz, 1)
            Worksheets("nichtWPE").Cells(nichtWPE, 2) = Worksheets("Referenz-PISA").Cells(Referenz, 2)
            Worksheets("nichtWPE").Cells(nichtWPE, 3) = Worksheets("Referenz-PISA").Cells(Referenz, 3)
          nichtWPE = nichtWPE + 1
        End If
        Referenz = Referenz + 1
    Loop

Worksheets("nichtWPE").Select
    MsgBox "Vergleich Abgeschlossen"

End Sub

hoffe habe gegen keine FAQ verstossen;)

thanks...

  1. Hallo,

    If Worksheets("Referenz-PISA").Cells(Referenz, 1) = Worksheets("WPE").Cells(WPE, 1) Then

    Du vergleichst zwei Ranges. Du willst aber die Inhalte vergleichen...

    If Worksheets("Referenz-PISA").Cells(Referenz, 1).Text = Worksheets("WPE").Cells(WPE, 1).Text Then

    Sollte Dein Hauptroblem sein.

    Gruß Jan Huss

  2. Hallo,

    habe folgendes problem:
    Im Feld 1 "Referenz-PISA befinden sich AHV-Nr.
    Im Feld 2  "WPE" befinden sich auch AHV-Nr.

    Ist nun eine AHV-Nr. vom Feld 1 im Feld 2 nicht vorhanden, soll dies im Feld 3 "nicht WPE" ausgegeben werden.

    Ich rate mal, dass es sich um ein EXCEL-Problem handelt.

    Sub Vergleichen()
        Dim Referenz, WPE, nichtWPE As Integer
        Dim found As Boolean

    Referenz = 1
        WPE = 1
        nichtWPE = 1

    Dim a, b As String

    Do While Worksheets("Referenz-PISA").Cells(Referenz, 1) <> ""

    'läuft in "Referenz-PISA" von A[Referenz] bis Ax, solange A[Referenz] nicht leer

    found = False

    Do While Worksheets("WPE").Cells(WPE, 1) <> ""

    'läuft in "WPE" von A[WPE] bis Ax, solange A[WPE] nicht leer. !!Beginnt in A[WPE]!!

    a = Worksheets("Referenz-PISA").Cells(Referenz, 1)
                b = Worksheets("WPE").Cells(WPE, 1)
                If Worksheets("Referenz-PISA").Cells(Referenz, 1) = Worksheets("WPE").Cells(WPE, 1) Then
                  found = True
                  Exit Do

    'Ende, wenn gefunden mit WPE=x

    End If
                WPE = WPE + 1

    'Durchlauf bis A[WPE] leer.

    Loop

    Schau Dir mal an, wo die Variable WPE auf 1 gesetzt wird, un wo sie es werden müsste.

    viele Grüße

    Axel

    1. Hallo,

      Ja, es handelt sich um ein Excelproblem

      WPE = 1

      Ich nehme an, das die Variable hier auf 1 gesetzt wird.
      Aber ich kann dir nicht genau folgen.
      was genau soll ich herausfinden??

      kannst du mir evt. weiter helfen??

      gruss iona

      1. Hallo,

        WPE = 1
        Ich nehme an, das die Variable hier auf 1 gesetzt wird.

        *g* Ja.

        Bist Du mal gedanklich die Programmschleifen durchgegangen? Ich vereinfache mal:

        Referenz = 1
        WPE = 1

        Do While Worksheets("Referenz-PISA").Cells(Referenz, 1) <> ""
        'läuft in "Referenz-PISA" von A[Referenz] bis Ax, solange A[Referenz] nicht leer
          found = False

        Do While Worksheets("WPE").Cells(WPE, 1) <> ""
          'läuft in "WPE" von A[WPE] bis Ax, solange A[WPE] nicht leer. !!Beginnt in A[WPE]!!
            If Worksheets("Referenz-PISA").Cells(Referenz, 1) = Worksheets("WPE").Cells(WPE, 1) Then
              found = True
              Exit Do 'Ende, wenn gefunden mit WPE=x
            End If
            WPE = WPE + 1 'Durchlauf bis A[WPE] leer.
          Loop
          'Hier ist WPE entweder die Zeile, wo Übereinstimmung gefunden wurde oder die maximale Zeile
          Referenz = Referenz + 1
        Loop

        Sollte die innere Schleife nicht _immer_ mit WPE=1 beginnen?

        viele Grüße

        Axel

        1. Hallo

          Sollte die innere Schleife nicht _immer_ mit WPE=1 beginnen?

          Ist das nicht der Fall? Meiner Meinung nach beginnt die schleife immer mit WPE=1!

          Mir ist aufgefallen, dass es evt. etwas mit der sortierung zutun hat!

          grüsse

          1. Hallo

            Sollte die innere Schleife nicht _immer_ mit WPE=1 beginnen?
            Ist das nicht der Fall? Meiner Meinung nach beginnt die schleife immer mit WPE=1!

            Nein.

            So siehts bei Dir aus:

            Referenz = 1
            WPE = 1
            Do While Worksheets("Referenz-PISA").Cells(Referenz, 1) <> ""
              ...
              Do While Worksheets("WPE").Cells(WPE, 1) <> ""
                ...
                WPE = WPE + 1 'Nach dem ersten Durchlauf der äußeren Schleife, mit Referenz = 1, ist WPE nicht mehr _garantiert_ am Anfangswert 1.
              Loop
              Referenz = Referenz + 1
            Loop

            So sollte es aussehen:

            Referenz = 1
            Do While Worksheets("Referenz-PISA").Cells(Referenz, 1) <> ""
              ...
              WPE = 1 'Hier wird der Anfangswert für WPE gesetzt.
              Do While Worksheets("WPE").Cells(WPE, 1) <> ""
                ...
                WPE = WPE + 1
              Loop
              Referenz = Referenz + 1
            Loop

            Mir ist aufgefallen, dass es evt. etwas mit der sortierung zutun hat!

            Nein.

            viele Grüße

            Axel

            1. Lady am verzweifeln...

              danke zuerst dass du dich solange darum kümmerst!!
              finde ich echt toll!

              Ich bin zwar schon seit heute morgen an diesem Problem aber kann es einfach nicht lösen! habe einfach zuwenig erfahrung mit vba!

              mittlerweilen sieht mein code wiefolgt aus: (funktiert leider noch nicht)

              Sub Vergleichen()
                  Dim Referenz, WPE, nichtWPE As Integer
                  Dim found As Boolean

              Referenz = 1
                  nichtWPE = 1

              Dim a, b As String

              Do While Worksheets("Referenz-PISA").Cells(Referenz, 1) <> ""
                      found = False
                      WPE = 1
                      Do While Worksheets("WPE").Cells(WPE, 1) <> ""
                          a = Worksheets("Referenz-PISA").Cells(Referenz, 1)
                          b = Worksheets("WPE").Cells(WPE, 1)
                          If Worksheets("Referenz-PISA").Cells(Referenz, 1) = Worksheets("WPE").Cells(WPE, 1) Then
                            found = True
                            Exit Do
                          End If
                          WPE = WPE + 1
                      Loop
                      Referenz = Referenz + 1
                  Loop

              Worksheets("nichtWPE").Select
                  MsgBox "Vergleich Abgeschlossen"

              End Sub

          2. salute,

            bin einbisschen weitergekommen!
            habe bemerkt, dass ich nur jeweils die selben spalten miteinander vergleiche!
            richtig wäre aber, wenn es durch eine schleife gehen würde, welche A1 mit allen zeilen vergleicht und nicht nur mit dem A1 in WPE.

            hast du einen vorschlag?

            greats...