tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
29
ZUGRIFFE
2467
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Stef_an Stef_an ist offline Mitglied Bronze
    Registriert seit
    Jul 2010
    Beiträge
    25
    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.
     

  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
    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.

  3. #3
    Stef_an Stef_an ist offline Mitglied Bronze
    Registriert seit
    Jul 2010
    Beiträge
    25
    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.
    Angehängte Dateien Angehängte Dateien
     

  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
    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.

  5. #5
    Stef_an Stef_an ist offline Mitglied Bronze
    Registriert seit
    Jul 2010
    Beiträge
    25
    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!
     

  6. #6
    Thomas Ramel Thomas Ramel ist offline Mitglied Gold
    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 -

  7. #7
    Stef_an Stef_an ist offline Mitglied Bronze
    Registriert seit
    Jul 2010
    Beiträge
    25
    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.
     

  8. #8
    Stef_an Stef_an ist offline Mitglied Bronze
    Registriert seit
    Jul 2010
    Beiträge
    25
    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
     

  9. #9
    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
    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ß Thomas
     
    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.

  10. #10
    Stef_an Stef_an ist offline Mitglied Bronze
    Registriert seit
    Jul 2010
    Beiträge
    25
    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.
     

  11. #11
    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 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ß Thomas
     
    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.

  12. #12
    Stef_an Stef_an ist offline Mitglied Bronze
    Registriert seit
    Jul 2010
    Beiträge
    25
    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
     

  13. #13
    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
    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.

  14. #14
    Stef_an Stef_an ist offline Mitglied Bronze
    Registriert seit
    Jul 2010
    Beiträge
    25
    nein, ich möchte das bei jedem Treffer die komplette zeile ausgegeben wird.
     

  15. #15
    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 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

  1. Excel Spalten vergleich in Tabellen
    Von domione im Forum Office-Anwendungen
    Antworten: 1
    Letzter Beitrag: 01.04.09, 08:23
  2. mehrere spalten aus verschiedenen tabellen
    Von theplake im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 16.01.08, 07:39
  3. Antworten: 17
    Letzter Beitrag: 21.06.06, 08:58
  4. UPDATE in einer Tabelle mit Werten aus verschiedenen Tabellen
    Von T21 im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 19.07.05, 09:33
  5. Wert aus 1 Tabelle auslesen nach vergleich mit Tabellen
    Von Leonard im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 15.10.04, 09:59

Stichworte