Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Exceltabellen vergleichen





Frage

Hallo! Trotz Recherche habe ich bis dato kein zutreffendes Thema gefunden und möchte es deshalb auf diesem Wege noch versuchen. Das Problem: Es geht darum zwei Exceltabellen zu vergleichen mit folgendem Ergebnis: - bei Teil-Übereinstimmung den teilübereinstimmenden Text in Tabelle1/SpalteA farblich markieren und den Eintrag von Tabelle2/SpalteB in Tabelle1/SpalteB (bei Mehrfachtreffern weiter mit Spalte C usw.) eintragen - bei genauer Übereinstimung die Zelle farblich markieren und den Eintrag von Tabelle2/SpalteB in Tabelle1/SpalteB (bei Mehrfachtreffern weiter mit Spalte C usw.) eintragen Jetzt kommt das schwierigste: 1. Leider ist nicht sichergestellt, dass gleiche Artikel auch gleich beginnen - Bsp. 74HC00 und CD74HC00 2. das Gleiche kann auch am Ende passieren - Bsp. 74HC06B und 74HC06 3. dies ist natürlich auch noch in Kombination möglich 4. Alle Sonderzeichen wie "Leerzeichen", "/" oder "-" können, ja besser sollten sogar für den eigentlichen Vergleich mißachtet werden da sie eigentlich nur der besseren Lesbarkeit dienen. Die große Ausnahme bildet der Unterstrich "_", er hat die Funktion einer Wildcard --> heißt, an dieser Stelle darf stehen was will (vergleichbar zu typ. "?" (nicht "*")) Zur Verdeutlichung nachfolgend ein Beispiel möglicher, realer vorliegender Daten (die Datenreihen sehen sortiert aus - sie liegen aber in Wirklichkeit nicht immer so vor): Tabelle1/beginnend bei SpalteA und Zeile1 BA792 BA792/C1 BA792/N BAS216 BAS216/FD BAS316/A BAS40/C BAT254 BAT85/C BAV21/C BC327 BC327/C BC327-16 BC327-16/C BC327-25 BC327-25/B BC327-40 BC327-40/B BC337 BC337-16 BC337-16/B BC337-25 BC337-25/B BC337-40 BC337-40/B BC368 BC369 BC369/B BC369-16/B BC516 BC516/B BC517 BC546A BC546A/B BC546B BC546B/B BC547 BC547/B BC547B BC547B/B BC547C BC547C/B BC549C BC550C BC556 BC556A BC556A/B BC556B BC556B/B BC557 BC557B BC557B/B BC557C BC559C BC618 BC635-16/B BC636 BC636-10 BC639 BC639/B BC639-10 BC639-16 BC640 BC879 BC879/B BF199 BF370 BF420 BF421 BF422 BF423 BF861B BGB203/H1/S06 BGB203/H2/S01 BGB203/H2/S03 BGB203/H2/S05 BGB210S/1/01 BGB210S/A/01 BS108 BS108/01 BSN254 BSN254A BSN304 BSP254A BSP304A BSR52 BSR52/B BSR62 BSR62/B BST72A BUK118-50DL BUK119-50DL BUK124-50L BUK130-50DL BUK136-50L BUK138-50DL/C BUK139-50DL/C BUK1M200-50SDLD BUK210-50Y BUK214-50Y BUK217-50YT BUK219-50Y BUK2914-50SYTS BUK7208-40B/C BUK7219-55A/C BUK7222-55A/C BUK7226-75A/C BUK7230-55A/C BUK7240-100A/C BUK7524-55 BUK7528-55 BUK7575-55 BUK7608-55 BUK7608-55/C BUK7624-55 BUK7624-55/C BUK9214-30A/C 74HC00 74HC06B Tabelle2/beginnend bei SpalteA und Zeile1 BAT54C BAT54C BAT54C BAT54S BAX12 BAV21 BAV99 BAV99 BAV99 BAV99 BAX12 BC327-25 BC546B BC547B BC547B BC547B BC556_ BC557B BC640 BC807-25 BC817-25 BC846A BC846S BC857BS BCP53-16 BCP56-16 BCY79VIII BD139-10 BD139-10 CD74HC00 74HC06 Tabelle2/beginnend bei SpalteB und Zeile1 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 Freue mich über jede Anregung und erst recht über eine Lösung. Danke und Gruß Jürgen

Antwort 1 von Saarbauer

Hallo,

ist aus meiner Sicht vernüftig nur mit einem Makro zu machen.

Gruß

Helmut

Antwort 2 von tshoshua

Hallo Helmut,
da ich mich mit Makros nicht auskenne - welche Chance siehst Du hier eine Lösung zu finden? Ich meine, ist meine Frage zu anspruchsvoll/umfangreich/groß/...? um hier auf Hilfe zu hoffen?
Gruß
Jürgen

Antwort 3 von tshoshua

Hallo Helmut,
da ich mich mit Makros nicht auskenne - welche Chance siehst Du hier eine Lösung zu finden? Ich meine, ist meine Frage zu anspruchsvoll/umfangreich/groß/...? um hier auf Hilfe zu hoffen?
Gruß
Jürgen

Antwort 4 von Saarbauer

hallo,

habe mir schon mal was überlegt, aber habe noch keine abschliessende Lösung.

Gruß

Helmut

Antwort 5 von Saarbauer

Hallo,

versuch es mal mit dem Makro

Sub Übertragen()
    letzteZeile_t1 = Range("Tabelle1!A65536").End(xlUp).Row
    letzteZeile_t2 = Range("Tabelle2!A65536").End(xlUp).Row
        For i = 1 To letzteZeile_t2
            For j = 1 To letzteZeile_t1
                If InStr(1, Range("Tabelle1!A" & j).Value, Range("Tabelle2!A" & i).Value) > 0 Then
                    letztespalte_t1 = Range("Tabelle1!IV" & j).End(xlToLeft).Column
                    Cells(j, letztespalte_t1 + 1).Value = Range("Tabelle2!B" & i).Value
                End If
            Next j
        Next i
End Sub


Hier werden erstmal nur die Daten übertragen. Ich möchte damit klären ob meine Überlegungen richtig sind

Gruß

Helmut

Antwort 6 von tshoshua

Hallo Helmut,
erstmal ein "großes Danke" dass Du mir hilfst. Habe Deinen Makro eingespielt und er funktioniert auch soweit ja schon ganz gut - bis auf 2 Positionen:
- er überträgt leider nicht den BC556_ (der "_" fungiert ja als Platzhalter für ein x-beliebiges Zeichen)
- er überträgt auch nicht den 74HC00

Das nur zu Deiner Info - vielleicht kann das ja momentan noch gar nicht gehen.

Gruß
Jürgen

Antwort 7 von Saarbauer

Hallo,

im Moment ist es so, dass meine Suchfunktion

InStr(1, Range("Tabelle1!A" & j).Value, Range("Tabelle2!A" & i).Value)

erläuterung
InStr(Start, Duchsuchte Zeichenfolge(in Tabelle1), Gesuchte Zeichenfolge2(in Tabelle 2))
dadurch wird 74HC00 in Tabelle 1 nicht gefungen, da in Tabelle 2 nur CD74HC00. Bei BC556_ ist das gleiche Problem BC556_ mit dem _ wird nirgendwo in Tabelle 1 gefunden.
Eine sinnvolle Lösung für Fall 1 habe ich im Moment nicht bei Fall 2 wäre eine Löschung des _ die einfachste Lösung.

Eine Abfrage nach Einzelzeichen wäre möglich, führt aber aus meiner Sicht zu keinem brauchbaren Ergebnis. Da mir das zustandekommen der Bezeichnungen nicht klar ist, kann ich natürlich auch keine brauchbare Aussage zu einer Lösung des Restproblems anbieten, wird wahrscheinlich auch nicht machbar sein.

Wegen der farblichen Hinterlegung der Pos,

Sub Übertragen()
    letzteZeile_t1 = Range("Tabelle1!A65536").End(xlUp).Row
    letzteZeile_t2 = Range("Tabelle2!A65536").End(xlUp).Row
        For i = 1 To letzteZeile_t2
            For j = 1 To letzteZeile_t1
                If InStr(1, Range("Tabelle1!A" & j).Value, Range("Tabelle2!A" & i).Value) > 0 Then
                    letztespalte_t1 = Range("Tabelle1!IV" & j).End(xlToLeft).Column
                    Cells(j, letztespalte_t1 + 1).Value = Range("Tabelle2!B" & i).Value
                    If Range("Tabelle1!A" & j).Value = Range("Tabelle2!A" & i).Value Then
                        Range("Tabelle1!A" & j).Interior.ColorIndex = 3
                    Else
                        Range("Tabelle1!A" & j).Interior.ColorIndex = 7
                    End If
                End If
            Next j
        Next i
End Sub


Gruß

Helmut

Antwort 8 von tshoshua

Hallo Helmut,

nochmals danke für Deine bisherige Hilfe. Ich finde es ja schon faszinierend wie man durch ein paar Worte (Makro) schon solche Ergebnisse erzielen kann. In jedem Fall ist mein Interesse geweckt - kannst Du mir noch sagen wo ich sozusagen eine Referenz einsehen kann in der die einzelnen Befehle beschrieben sind (in Anlehnung an Deine Beispielbeschreibung "erläuterung: InStr(Start, Duchsuchte Zeichenfolge(in Tabelle1), Gesuchte Zeichenfolge2(in Tabelle 2))" damit ich selbst noch weiter probieren kann.

Gruß
Jürgen

Antwort 9 von Saarbauer

Hallo,

leider ist es so, dass es Unmengen an Bücher gibt. Einen richtigen Rat dazu kann ich dir wegen der fehlenden Angabe der Version nich geben und da ich mir vieles über Learning by doing beigebracht habe. Du findest aber hier oder an anderer Stelle im Internet ganz gute Anleitungen.

http://www.herber.de/forum/archiv/116to120/t118299.htm

nur um ein Beispiel mal zu nennen

Gruß

Helmut