ERLEDIGT
NEIN
NEIN
ANTWORTEN
29
29
ZUGRIFFE
2467
2467
EMPFEHLEN
-
Hallo,
ich bin relativ unerfahren in Excel was Funktionen betrifft und habe jetzt schon mehrere Tage rumgedoktort, aber ich komme leider nicht zu einem vernünftigen Ergebnis
ich hoffe einer von Euch Experten erbarmt sich meiner und hilft mir.
Ist Zustand:
1 Excel Datei mit 3 Tabellen (sheets)
in der ersten Tabelle (5000 Zeilen) steht in Spalte A vor jeder Zeile eine eindeutige einmalige Nummer
in der zweiten Tabelle (45000 Zeilen) steht in Spalte A auch eine solche Nummer allerdings kann diese mehreren Zeilen in Tabelle 2 vorangestellt sein (Datensätze dahinter unterscheiden sich halt, daher mehrfach Nennung)
Ich möchte nun das jede einzelne Nummer der Spalte A in Tabelle 1 mit den Nummern der kompletten Spalte A in Tabelle 2 abgeglichen wird und wenn identisch soll die komplette Zeile aus Tabelle 2 (also kompletter Datensatz) in Tabelle 3 kopiert werden.
Schonmal vielen Dank für Eure Hilfe.
-
21.07.10 09:48 #2
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Sorry, aber ich verstehe nicht so ganz was du meinst. Kannst du mal ein paar Daten zeigen oder ein Beispiel wie es jetzt ist.
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.
-
Danke schonmal für die schnelle Antwort.
Ich habe eine Testdatei erstellt, da ich die richtigen Daten nicht öffentlich machen kann.
Wie man in der angehängten Datei sieht sind 4 Werte der Spalte A in Tabelle1 identisch mit Werten der Spalte A in Tabelle 2,
ich möchte nun das die kompletten Zeilen aus Tabelle2 bei denen die Werte identisch sind in Tabelle3 kopiert werden.
Also jeder Wert der Spalte A in Tabelle1 muss mit jedem Wert der Spalte A in Tabelle2 verglichen werden und bei übereinstimmung soll die komplette Zeile (kompletter Datensatz) aus Tabelle2 in Tabelle 3 kopiert werden.
-
21.07.10 11:17 #4
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
So auf die Schnelle fällt mir nur eine Makro Lösung ein:
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
Private Sub Worksheet_Activate() Dim zeile1, zeile2, zeile3 zeile1 = 1 zeile2 = 1 zeile3 = 1 'komplette Tabelle3 löschen Tabelle3.Range("A1:B65536").Clear 'Tabelle1 durchlaufen und mit Tabelle2 vergleichen Do While Tabelle1.Cells(zeile1, 1) <> "" Do While Tabelle2.Cells(zeile2, 1) <> "" If Tabelle1.Cells(zeile1, 1) = Tabelle2.Cells(zeile2, 1) Then Tabelle3.Cells(zeile3, 1) = Tabelle2.Cells(zeile2, 1) Tabelle3.Cells(zeile3, 2) = Tabelle2.Cells(zeile2, 3) zeile3 = zeile3 + 1 End If zeile2 = zeile2 + 1 Loop zeile1 = zeile1 + 1 zeile2 = 1 Loop End Sub
Funktionieren tut es, aber es gibt bestimmt noch eine schönere Lösung !?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.
-
Vielen Dank für die VBA Lösung, ich werde damit jetzt erstmal weiter experimentieren. Schön das man hier so schnell geholfen wird!
Wenn jemand noch eine Lösung mittels Funktion kennt, möge er bitte weiter in diesem Thread antworten!
Danke!
-
22.07.10 06:31 #6
- Registriert seit
- Oct 2009
- Beiträge
- 104
Grüezi Stef an
Du kannst das auch sehr einfach mit dem Spezialfilter angehen.
Starte auf dem 3. Tabellenblatt mit dem Spezialfilter und gib den Listenbereich aus Tabelle2 an, den Kriterienbereich die Werte aus Tabelle1 und als Zielbereich die Zelle A1 in Tabelle 3.
Als VBA-Code sieht das dann z.B. wie folgt aus (das kannst Du ebenfalls über das Activate-Ereignis laufen lassen):
Code :1 2 3 4 5
Sheets("Tabelle2").Range("A:B").AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=Sheets("Tabelle1").Range("A1").CurrentRegion, _ CopyToRange:=Range("A1"), _ Unique:=False
Voraussetzung dafür ist, dass deine Daten jeweils eine Spaltenüberschrift erhalten.Geändert von Thomas Ramel (22.07.10 um 06:31 Uhr) Grund: Nachsatz hinzugefügt.
Mit freundlichen Grüssen
Thomas Ramel
- MVP für MS-Excel -
-
Danke für den Tip!
Allerdings haben sich gestern noch die Gegebenheiten verändert, es wird jetzt gewünscht das eine Einzelne Tabelle erstellt wird die sich Daten aus anderen Tabellen (die teilweise auf anderen Servern liegen) zieht und Daten vergleicht.
Hier habe ich schon erste Erfolge mit dem SVERWEIS erzielt.
Allerdings bin ich noch ein paar Tage arbeit von der Fertigstellung entfernt.
-
Hallo,
ich bin der Lösung einen Schritt näher gekommen, ich habe mit sverweis alles so hingekriegt wie ich wollte, allerdings mit dem manko das sverweis nur den ersten gefundenen treffer ausgibt.
die lösung habe ich im netz gefunden, da hat jmd. eine funktion online gestellt die wie geschaffen für mich scheint. hier werden alle treffer ausgegeben, allerdings wird das Suchkriterium dann mehrfach in einer zelle ausgegeben und ich müsste es untereinander in einzelnen zellen haben.
Ich bin anscheinend nicht fit genug in vba um die funktion umzuschreiben, daher frage ich hier noch mal ob mir jmd. helfen kann.
hier die funktion
Public Function SVERWEIS2(Kriterium As String, _
Bereich As Range, _
SuchSpalte As Integer, _
ErgebnisSpalte As Integer, _
Optional Unikate As Boolean = True, _
Optional Trenner As String = ", ") As String
'***********************************************
'Autor: Ransi
'***********************************************
Dim arrTmp
Dim L As Long
Dim Mydic As Object
arrTmp = Bereich
Set Mydic = CreateObject("Scripting.Dictionary")
If Unikate = True Then
For L = 1 To UBound(arrTmp)
If arrTmp(L, SuchSpalte) = Kriterium Then Mydic(arrTmp(L, ErgebnisSpalte)) = 0
Next
SVERWEIS2 = Join(Mydic.keys, Trenner)
Else:
For L = 1 To UBound(arrTmp)
If arrTmp(L, SuchSpalte) = Kriterium Then Mydic(L) = arrTmp(L, ErgebnisSpalte)
Next
SVERWEIS2 = Join(Mydic.items, Trenner)
End If
End Function
Danke
-
26.07.10 08:58 #9
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Hallo,
habe deine PN erst jetzt gelesen da ich am Wochenende unterwegs war.
Leider komme ich mit dem Code den du oben reinkopiert hast nicht wirklich klar. Kannst du mal die Quelle nennen wo er herkommt.
Vielleicht steht da beschrieben was da genau gemacht wird.
Gruß ThomasSollte 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.
-
Hallo,
hier die Quelle: http://www.j-hennekes.de/1729416.htm
Allerdings hat sich wieder mal was geändert.
Ich möchte nun das wenn das Makro Sverweis2 eine Übereinstimmung in der Such Matrix findet
das die komplette Zeile aus der Matrix (wo die Übereinstimmung gefunden worden ist) in eine andere Tabelle kopiert wird. Von da aus werde ich die normal mit Sverweis weiterarbeiten. ich denke das ist die beste und einfachste lösung. Allerdings brauche ich hilfe ne schon geposteten VBA Code anhzupassen.
Wäre super nett wenn du mir helfen könntest.
-
26.07.10 10:04 #11
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Ich gebe zu, ich komme mit dem Code nicht wirklich klar.
Aber was spricht dagegen das zu nehmen was ich ganz am Anfang reingestellt habe? Es werden doch hiermit auch alle Treffer aufgelistet und du kannst sie weiter verwenden.
Gruß ThomasSollte 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.
-
Hallo
stimmt dein Code funktioniert wirklich so wie ich es haben will. Allerdings habe ich ihn ein wenig geändert, da ich möchte das bei einem Treffer die komplette Zeile in die leere Tabelle kopiert wird. Jetzt hab ich nur noch ein Problem, das die treffer korrekt untereinander ausgegeben werden aber nur beim ersten treffer die komplette zeile aus Tabelle 2 ausgegeben wird.
Private Sub Worksheet_Activate()
Dim zeile1, zeile2, zeile3
zeile1 = 1
zeile2 = 1
zeile3 = 1
'komplette Tabelle3 löschen
Tabelle3.Range("A1:Z65536").Clear
'Tabelle1 durchlaufen und mit Tabelle2 vergleichen
Do While Tabelle1.Cells(zeile1, 1) <> ""
Do While Tabelle2.Cells(zeile2, 1) <> ""
If Tabelle1.Cells(zeile1, 1) = Tabelle2.Cells(zeile2, 1) Then
Tabelle3.Cells(zeile3, 1) = Tabelle2.Cells(zeile2, 1)
Tabelle3.Cells(zeile3) = Tabelle2.Cells(zeile2)
zeile3 = zeile3 + 1
End If
zeile2 = zeile2 + 1
Loop
zeile1 = zeile1 + 1
zeile2 = 1
Loop
End Sub
-
26.07.10 14:28 #13
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Verstehe ich dich jetzt richtig das beim ersten Treffer die komplette Zeile aus Tabelle2 in Tabelle3 eingetragen werden soll und bei den restlichen Treffern nur noch der Wert aus Spalte 2 übernommen werden soll?
Für diesen Fall ändere den Code wie folgt ab:
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
Dim zeile1, zeile2, zeile3 zeile1 = 1 zeile2 = 1 zeile3 = 1 komplett = 0 'komplette Tabelle3 löschen Tabelle3.Range("A1:Z65536").Clear 'Tabelle1 durchlaufen und mit Tabelle2 vergleichen Do While Tabelle1.Cells(zeile1, 1) <> "" Do While Tabelle2.Cells(zeile2, 1) <> "" If Tabelle1.Cells(zeile1, 1) = Tabelle2.Cells(zeile2, 1) And komplett = 0 Then Tabelle3.Cells(zeile3, 1) = Tabelle2.Cells(zeile2, 1) komplett = 1 Tabelle3.Cells(zeile3, 2) = Tabelle2.Cells(zeile2, 2) zeile3 = zeile3 + 1 ElseIf Tabelle1.Cells(zeile1, 1) = Tabelle2.Cells(zeile2, 1) And komplett = 1 Then Tabelle3.Cells(zeile3, 2) = Tabelle2.Cells(zeile2, 2) zeile3 = zeile3 + 1 End If zeile2 = zeile2 + 1 Loop komplett = 0 zeile1 = zeile1 + 1 zeile2 = 1 Loop
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.
-
nein, ich möchte das bei jedem Treffer die komplette zeile ausgegeben wird.
-
26.07.10 15:15 #15
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Ok, dann nimm das Beispiel von ganz oben und vergleiche in dieser IF-Abfrage
Code vb:1 2 3 4 5
If Tabelle1.Cells(zeile1, 1) = Tabelle2.Cells(zeile2, 1) Then Tabelle3.Cells(zeile3, 1) = Tabelle2.Cells(zeile2, 1) Tabelle3.Cells(zeile3, 2) = Tabelle2.Cells(zeile2, 3) zeile3 = zeile3 + 1 End If
ob die Spaltenangaben stimmen.
Bei CELLS steht der erste Wert für die Zeile (hier immer mit den Variablen zeile1, zeile2 bzw. zeile3 belegt) und der zweite Wert steht für die Spalte (hier mit dem festen Wert 1 oder 2 für die Spalten A oder B) belegt.
Vielleicht musst du das für deine Tabellen noch anpassen!?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.
Ähnliche Themen
-
Excel Spalten vergleich in Tabellen
Von domione im Forum Office-AnwendungenAntworten: 1Letzter Beitrag: 01.04.09, 08:23 -
mehrere spalten aus verschiedenen tabellen
Von theplake im Forum C/C++Antworten: 1Letzter Beitrag: 16.01.08, 07:39 -
SQl-Daten-Ausgabe in mehreren Spalten einer Tabelle
Von Seven Secrets im Forum PHPAntworten: 17Letzter Beitrag: 21.06.06, 08:58 -
UPDATE in einer Tabelle mit Werten aus verschiedenen Tabellen
Von T21 im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 19.07.05, 09:33 -
Wert aus 1 Tabelle auslesen nach vergleich mit Tabellen
Von Leonard im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 15.10.04, 09:59





Zitieren

Login





