Tabellen vergleichen & umsortieren?
#1
Hallo liebes Forum,

ich habe eine Tabelle, die ungefähr so aufgebaut ist

A  1    A 3
B  2    C 4
C  3    D 5
D 4     E 6
E  5    F 7

Die Zahlen in den Spalten B & D sind nicht relevant für die Problemstellung, aber sie sind zu beachten.
Ich möchte folgenden herausfinden.
Ist der Wert A aus Spalte A auch in Spalte C? --> ja!
Ist der Wert B aus Spalte A auch in Spalte C? --> nein!
...
..
.
Der Wert F aus Spalte C ist nicht in Spalte A !

Zielformat könnte dann soetwas sein
A  1    A 3
B  2
C  3    C 4
D  4    D 5
E 5     E 6
          F 7

ich nehme auch jedes andere sinnvolle Format.
Jemand eine Idee ? Die Datei besteht aus 6000 Zeilen, also ne Menge Holz..
Top
#2
Hallo alwiz79,

kannst du hierzu bitte eine vereinfachte und anonymisierte Beispieldatei hochladen? Macht sich leichter zum Helfen.
Momentan würde ich auf bedingte Formatierung hinweisen und "doppelte Werte" hervorheben, um die mehrfach auftretenden Werte zu identifizieren. Aber das wäre erst ein erster Schritt, da du ja noch eine Sortierung haben willst.

Grüße
Top
#3
Hallo a...,

in der Anlage einmal ein erstes Beispielmakro und hier noch einige Bemerkungen:

A) Die Werte der Spalten A und C müssen jeweils wie im Beispiel aufsteigend sortiert aber nicht eindeutig sein.

B) Da ich ungern mit festen Adressen im Programm arbeite, benötigt es zur Zeit zwei benannte Zellen (AnfListe und AnfAusgabe). Diese können beliebig in der Datei verschoben werden (auch in andere Blätter) ohne das Programm anpassen zu müssen.

C) Das Programm erwartet eine einzeilige Überschrift.
Code:
Private Sub cbTuwat_Click()
Dim lngZeileEin1 As Long
Dim lngZeileEin3 As Long
Dim lngZeileAus As Long
Dim lngZeilen As Long
Dim varListe() As Variant
Dim varAusgabe() As Variant
varListe = ThisWorkbook.Names("AnfListe").RefersToRange.CurrentRegion.Value
lngZeilen = UBound(varListe, 1)
ReDim varAusgabe(1 To 2 * lngZeilen, 1 To 4)
For lngZeileAus = 1 To 4
    varAusgabe(1, lngZeileAus) = varListe(1, lngZeileAus)
Next lngZeileAus
lngZeileEin1 = 2
lngZeileEin3 = 2
lngZeileAus = 2
Do While lngZeileEin1 <= lngZeilen Or lngZeileEin3 <= lngZeilen
    If lngZeileEin1 <= lngZeilen Then
        If lngZeileEin3 <= lngZeilen Then
            If varListe(lngZeileEin1, 1) = "" Then
                varAusgabe(lngZeileAus, 3) = varListe(lngZeileEin3, 3)
                varAusgabe(lngZeileAus, 4) = varListe(lngZeileEin3, 4)
                lngZeileAus = lngZeileAus + 1
                lngZeileEin1 = lngZeilen + 1
                lngZeileEin3 = lngZeileEin3 + 1
            Else
                If varListe(lngZeileEin3, 3) = "" Then
                    varAusgabe(lngZeileAus, 1) = varListe(lngZeileEin1, 1)
                    varAusgabe(lngZeileAus, 2) = varListe(lngZeileEin1, 2)
                    lngZeileAus = lngZeileAus + 1
                    lngZeileEin1 = lngZeileEin1 + 1
                    lngZeileEin3 = lngZeilen + 1
                ElseIf varListe(lngZeileEin3, 3) = varListe(lngZeileEin1, 1) Then
                    varAusgabe(lngZeileAus, 1) = varListe(lngZeileEin1, 1)
                    varAusgabe(lngZeileAus, 2) = varListe(lngZeileEin1, 2)
                    varAusgabe(lngZeileAus, 3) = varListe(lngZeileEin3, 3)
                    varAusgabe(lngZeileAus, 4) = varListe(lngZeileEin3, 4)
                    lngZeileAus = lngZeileAus + 1
                    lngZeileEin1 = lngZeileEin1 + 1
                    lngZeileEin3 = lngZeileEin3 + 1
                ElseIf varListe(lngZeileEin3, 3) < varListe(lngZeileEin1, 1) Then
                    varAusgabe(lngZeileAus, 3) = varListe(lngZeileEin3, 3)
                    varAusgabe(lngZeileAus, 4) = varListe(lngZeileEin3, 4)
                    lngZeileAus = lngZeileAus + 1
                    lngZeileEin3 = lngZeileEin3 + 1
                Else
                    varAusgabe(lngZeileAus, 1) = varListe(lngZeileEin1, 1)
                    varAusgabe(lngZeileAus, 2) = varListe(lngZeileEin1, 2)
                    lngZeileAus = lngZeileAus + 1
                    lngZeileEin1 = lngZeileEin1 + 1
                End If
            End If
        Else
            varAusgabe(lngZeileAus, 1) = varListe(lngZeileEin1, 1)
            varAusgabe(lngZeileAus, 2) = varListe(lngZeileEin1, 2)
            lngZeileAus = lngZeileAus + 1
            lngZeileEin1 = lngZeileEin1 + 1
        End If
    Else
        varAusgabe(lngZeileAus, 3) = varListe(lngZeileEin3, 3)
        varAusgabe(lngZeileAus, 4) = varListe(lngZeileEin3, 4)
        lngZeileAus = lngZeileAus + 1
        lngZeileEin3 = lngZeileEin3 + 1
    End If
Loop
ThisWorkbook.Names("AnfAusgabe").RefersToRange.CurrentRegion = ""
ThisWorkbook.Names("AnfAusgabe").RefersToRange.Resize(2 * lngZeilen, 4) = varAusgabe
End Sub


Angehängte Dateien
.xlsm   Zuordnen.xlsm (Größe: 21,65 KB / Downloads: 1)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Top
#4
Lieber ego!

Das ist DIE perfekte Lösung! Und rasendschnell! Mein erster Makroversuch war irgendwie superlangsam.

Bin sehr beeindruckt und sehr dankbar.

Danke!
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste