Ich habe mehrere Kalkulationstabellen mit Informationen, die ich konsolidieren muss, jede mit unterschiedlichen (und manchmal überlappenden) Teilen des endgültigen Datensatzes, den ich erstellen möchte. In der Regel ist das Kombinieren von Arbeitsblättern mit ähnlichen Daten einfach, indem alle Daten auf ein Blatt kopiert und Duplikate entfernen verwendet werden. Ich möchte jedoch sicherstellen, dass die verbleibenden Werbebuchungen die neueste Version der Duplikate darstellen.
Ich werde die folgenden Daten aus jeder Tabelle importieren:
- Ein eindeutiges Bezeichnerfeld (UID), das den Betreff der Werbebuchung identifiziert und zum Erkennen von Duplikaten zwischen den Eingabeblättern verwendet wird.
- Ein Statusfeld (STATUS), das Informationen zu dem im Feld für die eindeutige Kennung aufgerufenen Element enthält.
- Ein Datumsfeld (DATE), das das Datum enthält, an dem die importierten Daten ursprünglich geschrieben wurden.
Was ich brauche, ist, dass meine Ausgabe nur eine Werbebuchung für jede UID enthält und Daten aus dem Feld STATUS enthält, die mit dem jüngsten DATUM für diese UID aus den Eingabeblättern übereinstimmen.
Was ist der einfachste Weg, dies in Excel zu tun?
###.###.###.###-#####
dem von STATUS ähnelt. Es handelt sich um eine Freitexteingabe, und das DATUM wird wie folgt formatiertYYYY/MM/DD
.Antworten:
Ich weiß nicht, ob dies garantiert funktioniert, aber es scheint für mich zu funktionieren (in sehr kleinen Tests in Excel 2007): Nehmen Sie das kombinierte Datenblatt und sortieren Sie es in umgekehrter Reihenfolge nach DATUM, also den neuesten Zeilen sind über den älteren. Dann entfernen Sie Duplikate .
Diese Site bestätigt dieses Verhalten: "Wenn Excel die Tabelle durchsucht, werden alle nachfolgenden Datensätze entfernt, die dieselbe Produkt-ID wie ein früherer Datensatz haben, auch wenn sich die restlichen Daten unterscheiden."
quelle
Hier ist eine mehrstufige Lösung, vorausgesetzt, Sie können einen Teil davon manuell ausführen und benötigen keine einzige vollständig automatisierte Lösung.
Fügen Sie in der Spalte DATE die folgende Array * -Formel hinzu:
Dies wählt grundsätzlich das späteste Datum für jede UID aus. (Dies ist natürlich für die erste Reihe, stellen Sie sicher, dass Sie alle übrigen Reihen mit A1, A2, ... füllen.)
Fügen Sie in der Spalte STATUS die folgende Array-Formel hinzu:
(Beachten Sie wieder die erste Reihe, füllen Sie den Rest).
Dieser ist komplexer, lasst es uns zusammenfassen:
Diese Array-Formel führt einfach das Äquivalent einer SQL WHERE-Klausel mit zwei Bedingungen aus: Geben Sie für alle Zeilen, die sowohl der UID (A-Spalte) als auch dem DATE (B-Spalte) entsprechen, den Wert der Zeile in der C-Spalte (STATUS) zurück.
Die erste Formel hätte gut genug sein sollen, aber da wir nicht die Möglichkeit haben, nur den Wert ungleich Null (oder ungleich FALSCH) herauszuholen, und Excel keine COALESCE-Formel hat, müssen wir ein wenig darauf zurückgreifen Indirektion.
Die MATCH-Formel durchsucht das vom IF zurückgegebene Array (dieselben Bedingungen wie oben, gibt aber einfach TRUE zurück, wenn es eine Übereinstimmung ist) nach dem ersten TRUE-Wert. Der Parameter 3, 0, erfordert eine genaue Übereinstimmung.
Diese Formel gibt einfach den Index der ersten und einzigen Zeile zurück, die mit den vorherigen Bedingungen übereinstimmt (übereinstimmende UID und DATE (dies war das maximale Datum, das mit der UID übereinstimmt)).
Nun ist es einfach genug, den Index der übereinstimmenden Zeile aus dem MATCH zu entnehmen und den entsprechenden STATUS-Wert aus dem IF-Array zu ziehen. Dies gibt einen einzelnen Wert zurück, Ihren neuen STATUS, der garantiert (wenn Sie alle diese Schritte korrekt ausgeführt haben) ab dem neuesten Datum für jede UID ist.
6 Excel ist keine Datenbank.
* FOOTNOTE: Wenn Sie mit Array-Formeln nicht vertraut sind (obwohl ich glaube, dass Sie es sind), sehen Sie dies : Im Grunde geben Sie die ursprüngliche Formel ein, die zu einem Array von Werten führen soll (ohne das verzerrte {}), und drücken Sie dann CTRL+ SHIFT+ ENTER. Excel fügt die Schnörkel {} für Sie hinzu und berechnet alle Werte als Array.
* FOOTNOTE # 2: Im Ernst, EXCEL IST KEINE DATENBANK. ;-)
quelle
DataSheet!C:C
, da die auf MATCH basierende Indizierung wahrscheinlich genauso gut funktionieren würde. Dies ist ein Ergebnis des Aufbaus der Formel von unten ...{=INDEX(DataSheet!C:C,MATCH(TRUE,AND(DataSheet!A:A=A1,DataSheet!B:B=B1),0))}
@AviD ist korrekt, da Excel keine Datenbank ist , Sie Ihre Daten jedoch über eine Microsoft Query-Datenquelle in eine andere Tabelle importieren können. Es ist ein bisschen hässlich, gibt Ihnen aber Zugriff auf eine SQL-Anweisung, mit der Sie das bekommen sollten, was Sie wollen.
Klicken Sie auf die SQL-Schaltfläche, und Sie erhalten Zugriff auf die Abfrage selbst. Ich denke, Sie müssen die folgenden Einstellungen vornehmen (mit GROUP BY und MAX erhalten Sie das neueste Datum):
SELECT
Sheet1$
.UID,Sheet1$
.Status, Max (Sheet1$
.Latest) FROMC:\Users\rgibson\Desktop\Book8.xlsx
.Sheet1$
Sheet1$
GROUP BYSheet1$
.UID,Sheet1$
.Statusquelle
Wenn Sie bereit sind, ein Tool eines Drittanbieters in Betracht zu ziehen, würde ich BeyondCompare empfehlen . Es ist einfach zu bedienen, hat eine sehr großzügige Testversion vor dem Kauf, einen relativ niedrigen Preis und eignet sich sowohl zum Vergleichen als auch zum Zusammenführen vieler verschiedener Dateitypen und Verzeichnisse, einschließlich Excel. Sie können einzelne Zeilen von einer Datei in die andere kopieren.
(Ich bin ein BC-Benutzer und habe nichts mit der Firma zu tun.)
quelle
Wenn alles andere fehlschlägt, kombinieren Sie alle Daten auf einem Blatt und sortieren Sie sie nach Datum (stellen Sie sicher, dass sie auf die gleiche Weise formatiert sind). Kopieren Sie dann das aktuellste Datum in eine neue Tabelle und anschließend das nächstaktuelle Datum. Gehen Sie zur Registerkarte Daten und entfernen Sie Duplikate. Da Excel den ersten in die Tabelle eingegebenen Datensatz beibehält und das nächste auftretende Duplikat entfernt, sollte dies funktionieren.
quelle
Das Datenblatt schwenken. Fügen Sie die eindeutige ID in die Zeile und das Datumsfeld in den Wert ein, und legen Sie den Wert auf "Max" fest. Dadurch wird eine zweispaltige Tabelle mit der UID und dem mit dieser UID verknüpften Datum erstellt. Formatieren Sie die Wertespalte in der Pivot-Tabelle so, dass sie genau dem Wert des Datumsfelds auf der Registerkarte "Daten" entspricht.
Dann habe ich die Pivot-Daten in eine neue Registerkarte kopiert - ich habe sie "Datumsauflöser" genannt - und ich habe einen benannten Bereich für die beiden Spalten A und B erstellt und ich habe den benannten Bereich "Datumsauswahl" genannt, den Sie so nennen können, wie Sie möchten. Ich habe den Bereich tatsächlich auf $ A: $ B festgelegt, damit er bereit ist, wenn ich später zurückkomme und zusätzliche Zeilen hinzufüge.
Dann ging ich zurück zur Datentabelle und fügte zwei Spalten hinzu. Eine AV-Suche, die die UID eingibt und das maximale Datum aus dem Bereich "date_selector" zurückgibt, und dann eine einfache if-Anweisung, um die Zeilen beizubehalten, in denen das Datum aus dem Bereich "date_selector" mit dem Datum im Datensatz übereinstimmt.
Meine eindeutige ID befindet sich in Spalte M Das Datum befindet sich in Spalte H Der VLOOKUP-Datumswert befindet sich in Spalte A
VLOOKUP = VLOOKUP (M2, date_resolver, 2, FALSE)
IF STATEMENT = IF (A2 = H2, "KEEP", "DELETE")
In Zukunft muss ich lediglich den Pivot aktualisieren, die Pivot-Ergebnisse in die Registerkarte date_resolver einfügen, meine Formelzeilen nach unten einfügen und die gelöschten Zeilen löschen.
(tief in der Kiste nachdenkend)
quelle