Abgleich von Tabellen mit optionalen Spalten

Hallo Miteinander,

ich möchte verschiedene Generationen einer Tabelle vergleichen, die alle auf einer gemeinsamen Vorlage basieren. Die Tabellen besitzen ein- bis zweitausend Zeileneinträge und über 50 Spalten. An den Quelltabellen soll nichts verändert werden.

Dummerweise gibt es zwischen den Generationen, die ich geschickt bekomme, nicht nur kleinere Änderungen in Zeilenwerten sondern auch strukturelle Veränderungen in den Spalten. So werden (für meine Auswertung) irrelevante Spalten eingefügt oder wieder gelöscht. Damit ändern sich aber die rechts danebenstehenden Spalten-Buchstaben.

Ziel ist es eine Musterauswertung zu machen, bei der dann nur zwei verschiedene Generation einkopiert werden und dann nicht mehr viel manuell gemacht werden soll, bis man das Endergebnis erhält. Makros und VBA sollen nach jetziger Überlegung nicht zum Einsatz kommen.

Die Grundstruktur bleibt aber unveränderlich:
Alle relevanten Spalten haben in Zeile 3 eine gleichbleibene, einzigartige Überschrift. Und die Zeilen mit den Inhalten besitzen einen eindeutigen Schlüssel.

Mein aktuelles Vorgehen finde ich schon sehr effektiv: Der einzig manuelle Schritt besteht augenblicklich darin, die Inhalte der Spalten der beiden Vergleichsdateien, die den Schlüsselwert enthalten, in eine anderes Arbeitsblatt zu kopieren und dort per Klick zu sortieren und Duplikate zu löschen.

Dann rechne ich mit der Vereinigungsmenge der Schlüssel per VERGLEICH() aus, in welchen Zeilen der Quelltabellen die jeweiligen Einträge ggf. liegen.

Im Arbeitsblatt, das das Endergebnis ermittelt, ermittele ich über zwei weitere Formeln mit VERGLEICH(), welcher Spalte das in der jeweiligen Quelltabelle entspricht.

Dann ziehe ich mir über
=INDIREKT(ADRESSE(;;WAHR:wink:) die zueinander passenden Werte der relevanten Spalten aus den beiden Tabellen und lasse dann das ganze Formelwerk für die Auswertung arbeiten.

Meine Frage an die Spezialisten:

Gibt es was schnelleres als =INDIREKT(ADRESSE()), um an einen Zelleninhalt zu kommen, dessen Koordinaten man kennt?

Im Zwischenschritt muss ich die VERGLEICH()-Funktion anwenden, um die einzelnen Schlüsselwerte in der jeweiligen Tabelle zu finden. Bislang habe ich hier keine Möglichkeit entdeckt, um die absoluter Spaltenadresse bei der Suchmatrix ebenso flexibel zu machen. Momentan muss der Schlüsselwert fix in Spalte X stehen, um die Zeilennummer zu ermitteln.
 =VERGLEICH(;!X:X;0)

Ich würde das gerne aber so wie bei den Einzelfeldern machen und vorher ermitteln, in welcher Spalte der Schlüsselwert diesmal steckt. Aber ich habe noch keine Formel funden, um dann in der -ten Spalte einen Schlüsselwert zu suchen und als Ergebnis die Zeilenzahl zu erhalten. Mit INDIREKT() kann ich nur Einzelzellen adressieren, nicht aber einen Vektor.

Die *VERWEIS()-Formeln kranken daran, dass sie nur in der ersten Spalte suchen können, bei mir der Schlüsselwert irgendwo in einer Spalte der Tabellenmitte abgelegt ist. 

Wer hat ein gute Idee?

Ciao, Allesquatsch

Hallo Allesquatsch,

deine Erklärungen klingen recht kompliziert. Könntest du zur Erläuterung mal eine Beispielmappe hochladen?

Gruß, Andreas

Hallo Andreas,

deine Erklärungen klingen recht kompliziert. Könntest du zur
Erläuterung mal eine Beispielmappe hochladen?

Ich befürchte, dass macht es nicht besser. Aber ich werde es wohl doch per VBA realisieren.

Trotzdem hätte mich dieses eine Detail interessiert:

Wenn ich auf den Inhalt der einzelnen Zelle ;WAHR:wink:) brauche, kann ich über die Formel

=INDIREKT(ADRESSE(;;WAHR:wink:)

arbeiten.

Aber was mache ich, wenn ich einen Vektor variabel adressieren muss?
Hiermit kann ich in der 24. Spalte suchen
=VERGLEICH(;! X:X ;0)
aber was mache ich, wenn 24 keine Konstante ist sondern eine Variable, die in einer Zelle steht.

Mir ist schon klar, dass das Problem ist, dass der Rückgabewert der gesuchten Formel für den zweiten Parameter von VERGLEICH kein Wert sondern eine Matrix sein müsste. Deshalb wird es wohl auch keine passende Excel-Funktion geben und nur über VBA realisierbar sein.

Ciao, Allesquatsch

Hallo Andreas,

Hi Allesquatsch,

Trotzdem hätte mich dieses eine Detail interessiert:

Wenn ich auf den Inhalt der einzelnen Zelle
;WAHR:wink:) brauche, kann ich über die
Formel

=INDIREKT(ADRESSE(;;WAHR:wink:)

arbeiten.

Aber was mache ich, wenn ich einen Vektor variabel adressieren
muss?
Hiermit kann ich in der 24. Spalte suchen
=VERGLEICH(;! X:X ;0)
aber was mache ich, wenn 24 keine Konstante ist sondern eine
Variable, die in einer Zelle steht.

Wenn z.B. in Zelle B2 die 24 steht, kannst du mit der folgenden Formel daraus ein X machen:

=WECHSELN(ADRESSE(1;B2;4);1:wink:

Deine Gesamtformel könnte dann heißen:
=VERGLEICH(;INDIREKT(!WECHSELN(ADRESSE(1;B2;4);1:wink:&":"&WECHSELN(ADRESSE(1;B2;4);1:wink:;0)

Ich hab das jetzt nicht im Detail getestet. Evtl. hab ich irgendwo Klammern falsch gesetzt. Aber das Prinzip müsste funktionieren.

Ciao, Allesquatsch

Gruß, Andreas

1 Like

Danke
Dein Tipp hat mich auf die richtige Spur gebracht. Indirekt kann tatsächlich auch Bereiche adressieren, wenn man einfach einen String zusammenbaut. ADRESSE() ist nicht notwendig.
Somit konnte ich meine Idee erfolgreich realisieren.

Ciao, Allesquatsch

1 Like