Frage von mali1234, 23

Duplikate aus Rohtabelle (Excel) entfernen und für den Import in Access bereit machen?

Hallo,

wie kann ich eine Rohtabelle für den Import in Access bereit machen? Angenommen ich habe zwei Zeilen mit Vorname, Nachname und einer Auftragsnummer, wobei der Vorname und der Nachname identisch sind und die Auftragsnummer verschieden.

Wie kann ich eine solche Tabelle bereinigen, ohne dass mir die Infos verloren gehen um sie im Anschluss zu einer rel. Datenbank zu machen?

Antwort
von Iamiam, 7

ich verstehe dich so, dass Du alle Einträge gelistet haben willst, aber eine pro Vor+Nachname spezifische Personen-ID vergeben willst in einer eigenen Spalte. Und dass die Reihenfolge nicht verändert werden soll? Geht in xl so:

Füge vor A eine Spalte ein mit fortlaufenden Zahlen ggf über die Formel =Zeile(A1), Doppelklick aufs Ausfüllkästchen: Die Formel wird nach unten kopiert, solange in B:B was steht.

Jetzt Spalte A am Spaltenkopf markieren, kopieren, als WERTE einfügen: die Zahlen sind jetzt Konstanten. Du brauchst sie, um am Ende die Originalreihenfolge wiederherstellen zu können.

Nun sortierst du alles nach Priorität 1.Name, 2.Vorname (ggf weiteres Kriterium, zB Postleitzahl oder sonst. Adressbestandteile), wenn Du so viele Namen hast, denn da tauchen sicher mehrere Hans Huber auf?), hast danach also alle gleichen Namen direkt nacheinander stehen. Oberhalb von allem fügst du eine Leerzeile ein, so dass der erste Name frühestens in Zeile 2 Kommt.

Nun in der Spalte(zB K für Kennziffer), wo(evtl nur vorläufig) die Personennnummer stehen soll die Formel:

K2: =wenn(Und(B2=B1;C2=C1;ggf.weiteresKritgleich);K1;Text(Zeile(K2);"000000"))

diese Formel kopierst du wieder runter bis ans Ende (ggf Spalte vorher nach links schieben, falls Lücken in Zellen links davon auftreten)

Ob diese Art der Nummernzuweisung sinnvoll ist, weiß ich nicht, sie hat Lücken.

die Teilformel könnte auch sein ;Text(K1*1+1;"000000") ,  das ergäbe lückenlos fortlaufende IDs.Kannst in K1 auch eine Startnummer eintragen, falls du keine kleinen Nummern haben willst. [Anm: eine Textzahl wird in xl rechnerisch verwertet, sobald man eine mathematische Operation damit durchführt, in diesem Fall +1]

Jede Zeile hat nun die gleichen Nummern für die gleichen Namen und unterschiedliche für verschiedene Namen (orientiert sich am Sortierkriterium, zB aufsteigend Alphabet. Wird sich aber beim Hinzukommen neuer Namen ändern).

Spalte wieder kopieren, als WERTE einfügen, so dass die vergebenen Nummern unverändert bleiben.

Bei Bedarf zurücksortieren nach der anfangs eingeführten Zahlenspalte, diese kann anschließend gelöscht werden.

Ob Du das nach Access transportieren willst oder in xl belassen: ich kenn mich in Access nicht aus und persönlich in xl weiter arbeiten, das ist aber Deine Sache.

War es das, was du wolltest?

Kommentar von Iamiam ,

Du kannst hinterher natürlich auch nach Auftragsnummern sortieren, zB fallend, so dass die letzten Aufträge (höchsten Auftragsnummern) oben stehen.

Am besten vergibst du einen Namen für den gesamten zu sortierenden Bereich, dann sparst du Dir die nicht unerhebliche Mühe, so eine Riesentabelle jedesmal neu zu markieren.

Kannst dazu ja noch "ein paar" Zeilen pro forma füllen; Name ZZZ Vorname ZZ0001, das füllt sich dann auf bis zu zB ZZ9999, Auftragsnummern 990000)>999999 daraus kannst Du dann Neueinträge generieren, muss aber nicht sein. Eine Zeile mit ZZZ  ZZ 999999 reicht, darüber --bzw wenn 999999 oben: darunter-- immer wieder eine Zeile neu einfügen für den nächsten Eintrag - xl erweitert den benannten Bereich entsprechend.

Antwort
von Orsovai, 22

Frag Dich, was in Access eine eindeutige Information werden soll.

Ich nehme mal an, jede Auftragsnummer wird es nur einmal geben.

Dann markierst Du die Spalten A-C (oder eben die, die Deine Daten enthalten). Dann Reiter Daten --> Duplikate entfernen. Hier kannst Du auswählen, wo es keine Duplikate mehr geben darf, in dem Du Häckchen bei den jeweiligen Spalten setzt. Bestätigen und fertig.

Jetzt hast Du eine Tabelle, in der Nach- und Vornamen doppelt sein können, die Auftragsnummer ist aber eindeutig.

Jetzt kannst Du das Ganze in Access importieren und die Auftragsnummer als eindeutigen Primärschlüssel setzen.

Kommentar von mali1234 ,

Die Auftragsnummer ist eindeutig. Exakt. Allerdings möchte ich folgendes schaffen: der vor und nachname gehören der gleichen person, sodass ich eine personen-id brauche, und jede person kann mehrer aufträge haben. wie mache ich das, damit alle duplikate raus sind?

Kommentar von Orsovai ,

Welche Duplikate willst Du raus? In der Auftragsnummer oder in den Namen?

Durch meine Methode hast Du nachher doppelte Namen und eindeutige Auftragsnummern.

Kommentar von mali1234 ,

eine person kann mehrere aufträge buchen. Hier ist eine 1 zu n Beziehung vorhanden. Ich muss wahrscheinlich vorher sortieren nach den Namen? Dann deine Methode anwenden?

Kommentar von mali1234 ,

es klappt nicht, weil excel die duplikate entfernt, aber die spalte nach oben verschiebt. so ein mist!

Kommentar von Orsovai ,

Ich glaub wir reden etwas aneinander vorbei. Es ist okay, mehrmals den Namen vorkommen zu haben. Anders lässt sich eine 1:n Beziehung umzusetzen. Entweder hast Du Namen in Klartext dastehen oder referierst über eine ID.

Antwort
von Suboptimierer, 23

Typischerweise würde man pro Person eine ID vergeben.

Dann machst du aus der einen Tabelle zwei, nämlich

Person-ID, Vorname, Name und
Auftragsnummer, Person-ID

In der zweiten Tabelle ist die Auftragsnummer eindeutig. Das bedeutet, dass die Personen-IDs mehrfach vorkommen können.

Kommentar von mali1234 ,

ok, vielen dank für deine info. ich weiß, wie es geht, wenn man es plant. darum geht es mir aber nicht.

Bitte geh von dem Fall aus, dass die Tabelle bereits existiert mit Millionen Einträgen. Wie kann ich sie dann aufteilen?

Sollte ich es in Excel oder schon in Access machen? Und wie?

Ich möchte sozusagen eine riesige Tabelle, die aus Excel kommt normalisieren.

Kommentar von Suboptimierer ,

Ich habe das mal gerade getestet.

Excel:

Vorname Name   Auftrag
Max Muster 1
Ben Muster 2
Max Muster 3

Access:

Externe Daten → Excel

Dem Assistenten folgen. Auftrag als Primärschlüssel identifizieren.

Der Rest sollte von alleine fluppen.
Nachteil: Redundante Speicherung von Vorname und Nachname. Deswegen sprach ich davon, Personen-IDs einzuführen.

Kommentar von mali1234 ,

ja, genau ich möchte verhindern, dass max muster zwei mal drin ist, falls es die gleich person ist. also eine Id. doch wie bekomme ich das hin. ich möchte die redundanz vermeiden, sonst könnte ich es ja einfach so reinklatschen, trotz redundanz. danke für deine hilfe!

Kommentar von Suboptimierer ,

In Excel:

Daten → Datentools → Duplikate entfernen

(sichere vorher deine Excelmappe)

Kommentar von mali1234 ,

klappt nicht, weil er die Zellen dann verschiebt und da die person und der auftrag in der gleichen zeile sind, geht dann die zuordnung verloren. das geht also nicht.

oder er macht es gar nicht.

weißt du vielleicht, wie man verhindern kann, dass er alles nach der duplikatlöschung nach oben schiebt?

Kommentar von Suboptimierer ,

Wenn du mit Personen-IDs arbeitest, brauchst du zwei Tabellen. In einer stehen die Namen mit ihrer ID eindeutig drin, in der anderen werden die Aufträge eindeutig aufgelistet.

Kommentar von mali1234 ,

Vielen Dank. Das weiß ich bereits. Ich gehe von dem Fall aus, dass es bereits falsch gemacht wurde und möchte das korrigieren. D.h. die Tabelle liegt "roh" vor und ich möchte sie relational machen, also normalisieren. Wie kann ich das schaffen? Es muss doch auch den umgekehrten Weg geben, nämlich von einer verkorksten Tabelle auf eine normalisierte. Schließlich verhauen Manche auch eine relationale Datenbank durch flasche Eingaben...

Kommentar von mali1234 ,

Scheint wohl nicht zu gehen...

Keine passende Antwort gefunden?

Fragen Sie die Community