tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von tombe
  • 1 Beitrag von tombe
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
864
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    parafi parafi ist offline Mitglied Silber
    Registriert seit
    Jan 2009
    Beiträge
    73
    Guten Tag

    Also vorne weg, mit Makros, etc habe ich sonst nicht viel am Hut. Ich Programmiere zwar auch, aber nicht in diesem Bereich..

    Nun gut ich habe zwei Tabellen die abgeglichen werden müssen. Die Tabelle 2 enthält zum Teil die gleichen Datensätze wie die Tabelle 1. Alle Werte die in Tabelle 1 nicht vorkommen sollen in die Tabelle 3 geschrieben werden.

    Dazu habe ich einen passenden Code im Internet gefunden.
    Nur erhalte ich nun folgende Fehlermeldung: "Laufzeitfehler 9, Index ausserhalb des gültigen Bereichs"

    Hier mein Code:
    HTML-Code:
    Sub doppelte_Daten_suchen()
    ' vergleicht Tabelle 2 mit Tabelle 1 und schreibt Werte
    ' aus Tabelle 2, die in Tabelle 1 nicht vorkommen in Tabelle 3
    Dim verg1(500), verg2(500), dopp(500) As Integer, num(500)  ' Variablen dimensionieren
    Dim y As Integer, z As Integer, r As Integer, s As Integer  ' Variablen deklarieren
    Dim zz As Integer, u As Integer                             ' Variablen deklarieren
    ' Tabelle 1 einlesen
    Worksheets("Tabelle1").Activate             ' Tabelle 1 aktivieren
    y = 2                                       ' Startwert für Schleifenzähler (hier Zeile 2)
    Do While Cells(y, 1) <> ""                  ' Bedingung für Schleife (Laufe solange Zelle gefüllt ist)
        verg1(y) = Cells(y, 2)                  ' Inhalte in Variable einlesen
        y = y + 1                               ' Schleifenzähler um 1 erhöhen
    Loop                                        ' Wendepunkt für Schleife
    ' Tabelle 2 einlesen
    Worksheets("Tabelle2").Activate             ' Tabelle 2 aktivieren
    z = 2                                       ' Startwert für Schleifenzähler (hier Zeile 2)
    Do While Cells(z, 1) <> ""                  ' Bedingung für Schleife (Laufe solange Zelle gefüllt ist)
        num(z) = Cells(z, 1)                    ' Inhalte in Variable einlesen
        verg2(z) = Cells(z, 2)                  ' Inhalte in Variable einlesen
        z = z + 1                               ' Schleifenzähler um 1 erhöhen
    Loop                                        ' Wendepunkt für Schleife
    ' Inhalte vergleichen
    For r = 2 To y - 1                          ' Start äußere Schleife
        For s = 2 To z - 1                      ' Start innere Schleife
                If verg1(r) = verg2(s) Then     ' wenn Werte gleich dann ...
                    dopp(s) = 1                 ' ... Variable auf 1 setzen
                    Cells(s, 3) = "gleich"      ' ... Wert in Tabelle markieren
                End If                          ' Ende der Bedingung
        Next s                                  ' Wendepunkt für innere Schleife
    Next r                                      ' Wendepunkt für äußere Schleife
    ' In Tabelle 3 schreiben
    Worksheets("Tabelle3").Activate             ' Tabelle 3 aktivieren
    zz = 1                                      ' Startwert für Schleifenzähler (hier Zeile 2)
    For u = 1 To z - 1                          ' Start für Schleife
        If dopp(u) = 0 Then                     ' wenn Variable = 0 dann ...
            Cells(zz, 1) = num(u)               ' ... 1. Wert in Zelle schreiben
            Cells(zz, 2) = verg2(u)             ' ... 2. Wert in Zelle schreiben
            zz = zz + 1                         ' ... Schleifenzähler um 1 erhöhen
        End If                                  ' Ende der Bedingung
    Next u                                      ' Wendepunkt für Schleife
    End Sub
    Das Ganze habe ich unter Visual Basic in die Tabelle 1 geschrieben. Korrekt?

    Danke Euch!

    parafi
     

  2. #2
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Wenn ich das jetzt richtig getestet habe, müsste es dir helfen:

    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    Dim bereich1 As Range
    Dim bereich2 As Range
    Dim treffer As Boolean
     
    treffer = False
     
    For Each bereich1 In Tabelle1.UsedRange
     
        For Each bereich2 In Tabelle2.UsedRange
            If bereich1 = bereich2 Then
                treffer = True
                Exit For
            End If
        Next
     
        If treffer = False Then
            Tabelle3.Cells((Tabelle3.Cells(Rows.Count, 1).End(xlUp).Row) + 1, 1) = bereich1
        End If
        treffer = False
    Next
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  3. #3
    parafi parafi ist offline Mitglied Silber
    Registriert seit
    Jan 2009
    Beiträge
    73
    Hi tombe

    Deinen VB Code müsste ich dan einfach darunter hineinkopieren?
    Ich komm da mit Aufteilung in Visual Basic nicht so zurecht. Bzw. Arbeite ich einfach sonst nie damit.
     

  4. #4
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Ich weiß ja nicht wie der jetzige Code aufgerufen wird, aber du löscht jetzt einfach bei dir alles was zwischen "Sub doppelte_Daten_suchen()" und "End Sub" steht und kopierst dann meinen Code dafür rein.
    parafi bedankt sich. 
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  5. #5
    parafi parafi ist offline Mitglied Silber
    Registriert seit
    Jan 2009
    Beiträge
    73
    Funktioniert soweit sehr gut! Danke schonmal..

    Nun noch eine andere Frage:
    Kann man auch zwei, oder drei Spalten miteinander vergleichen?
    Sprich Tabelle1 mit Spalte A, B und C vergleichen mit Tabelle2 Spalte A, B und C?

    Mein Aufbau der Excel Tabelle
    HTML-Code:
    A                    B                  C
    2Rad-Shop       beispielstrasse 11   Zürich
    Dazu gibt es zu sagen das in Tabelle1 der Eintrag vielleicht an 10ter Stelle ist und er in Tabelle2 an 2ter Stelle steht.
    Geändert von parafi (08.02.11 um 14:30 Uhr)
     

  6. #6
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Ok, dann machen wir es ganz anders:

    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
    Dim treffer As Boolean
    Dim gesamt_tab1 As String
    Dim gesamt_tab2 As String
    Dim a As Integer
    Dim b As Integer
     
    treffer = False
     
    For a = 1 To Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row
    'wenn noch mehr Spalten geprüft werden sollen einfach hier erweitern
        gesamt_tab1 = Tabelle1.Cells(a, 1) & " " & Tabelle1.Cells(a, 2) & " " & Tabelle1.Cells(a, 3)
        For b = 1 To Tabelle2.Cells(Rows.Count, 1).End(xlUp).Row
    'wenn noch mehr Spalten geprüft werden sollen einfach hier erweitern
            gesamt_tab2 = Tabelle2.Cells(b, 1) & " " & Tabelle2.Cells(b, 2) & " " & Tabelle2.Cells(b, 3)
            If gesamt_tab1 = gesamt_tab2 Then
                treffer = True
                Exit For
            End If
        Next b
     
        If treffer = False Then
            zeile = (Tabelle3.Cells(Rows.Count, 1).End(xlUp).Row) + 1
            Tabelle3.Cells(zeile, 1) = Tabelle1.Cells(a, 1)
            Tabelle3.Cells(zeile, 2) = Tabelle1.Cells(a, 2)
            Tabelle3.Cells(zeile, 3) = Tabelle1.Cells(a, 3)
    'weitere Spalten kommen dann entsprechend hier hin
        End If
        treffer = False
     
    Next a

    Hier werden jetzt in jeder Zeile die Spalten A, B, und C miteinander verglichen.
    Wenn es mehr als drei Spalten sein sollen, dann an den oben gekennzeichneten Stellen entsprechend erweitern.
    parafi bedankt sich. 
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  7. #7
    parafi parafi ist offline Mitglied Silber
    Registriert seit
    Jan 2009
    Beiträge
    73
    Riesen Dank an Dich!

    Tiptop!
     

Ähnliche Themen

  1. Zwei Tabellen mit vergleichen!
    Von beckersbesters im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 25.01.08, 17:20
  2. Zwei Daten als String miteinander vergleichen
    Von hubbl im Forum .NET Windows Forms
    Antworten: 2
    Letzter Beitrag: 27.11.07, 16:17
  3. tabellen miteinander vergleichen
    Von astra80 im Forum .NET Archiv
    Antworten: 1
    Letzter Beitrag: 06.05.06, 12:09
  4. Zwei Tabellen vergleichen
    Von Dr_Google im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 04.08.05, 10:55
  5. SQL: Zwei Werte einer Spalte miteinander vergleichen
    Von LotseDerLotsen im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 12.04.05, 11:13