2Danke
ERLEDIGT
JA
JA
ANTWORTEN
6
6
ZUGRIFFE
864
864
EMPFEHLEN
-
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:
Das Ganze habe ich unter Visual Basic in die Tabelle 1 geschrieben. Korrekt?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
Danke Euch!
parafi
-
08.02.11 12:21 #2
- 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.
-
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.
-
08.02.11 13:25 #4
- 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.
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.
-
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
Dazu gibt es zu sagen das in Tabelle1 der Eintrag vielleicht an 10ter Stelle ist und er in Tabelle2 an 2ter Stelle steht.HTML-Code:A B C 2Rad-Shop beispielstrasse 11 Zürich
Geändert von parafi (08.02.11 um 14:30 Uhr)
-
08.02.11 15:27 #6
- 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.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.
-
Riesen Dank an Dich!
Tiptop!
Ähnliche Themen
-
Zwei Tabellen mit vergleichen!
Von beckersbesters im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 25.01.08, 17:20 -
Zwei Daten als String miteinander vergleichen
Von hubbl im Forum .NET Windows FormsAntworten: 2Letzter Beitrag: 27.11.07, 16:17 -
tabellen miteinander vergleichen
Von astra80 im Forum .NET ArchivAntworten: 1Letzter Beitrag: 06.05.06, 12:09 -
Zwei Tabellen vergleichen
Von Dr_Google im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 04.08.05, 10:55 -
SQL: Zwei Werte einer Spalte miteinander vergleichen
Von LotseDerLotsen im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 12.04.05, 11:13





Zitieren

Login





