
Hier ist meine Situation. Ich muss eine Liste mit 38.000 Kundenkonten erstellen und die Informationen in eine bestimmte Vorlage sortieren, die ich in unsere neue Website importieren kann. Die Art und Weise, wie die Daten präsentiert werden, macht das jedoch schwierig ...
Jede für einen Kunden gespeicherte Adresse ist eine separate Zeile. Wenn Sie also eine andere Rechnungs- oder Lieferadresse haben, wären das 2 Zeilen. Manchmal 3 Zeilen. Ich muss diese Zeilen in eine Spalte (Adresse 1, Adresse 2 usw.) unter 1 Zeile verschieben. Wenn Kunde A also 3 gespeicherte Adressen hat, muss ich diese 3 Zeilen nehmen und sie in 3 Spalten mit 1 Zeile verschieben. Ich hoffe, das ergibt Sinn.
Ich habe keine Ahnung, ob eine Formel, eine Pivot-Tabelle oder VBA (auf diesem Gebiet weiß ich so viel wie Jon Snow) die beste Lösung wäre. Ich habe es mit Pivot-Tabellen versucht, aber das hat nicht wirklich funktioniert. Ich dachte, Index/Match wäre vielleicht die beste Lösung – ich müsste nur die Formel für jede Adressspalte duplizieren, aber das würde funktionieren. Allerdings weiß ich nicht, wie ich die mehreren Zeilen unterbringen kann.
Unten sehen Sie ein Beispiel der Daten, die ich erhalten habe. Zeile 20 ist die Vorlage, in die ich die Zeilen verschieben muss. Die Spalte „g_user id“ ist für jeden Kunden eindeutig, aber bei mehreren Adresszeilen für einen einzelnen Kunden wird dieser Wert in der Tabelle dupliziert. Dasselbe gilt für „customer_no“.
http://www.filedropper.com/excelhelp
Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen, und ich werde versuchen, sie näher zu erläutern.
BEARBEITEN – Aus der Tabelle, die ich gepostet habe, muss ich die Zeilen 2 und 3 nehmen und die Adressinformationen in neue Spalten in Zeile 1 verschieben. Da die Adresse also 2 Spalten hat, Stadt 1, Staat 1, Postleitzahl 1 und Land 1, ergibt das insgesamt 12 Datenspalten aus diesen 2 Zeilen.
Antwort1
- Wählen Sie eine leere Zelle aus, um den kombinierten Inhalt zu platzieren, geben Sie die Formel =CONCATENATE(TRANSPOSE(B2:B19)) in die Formelleiste ein, wählen Sie dann den Teil TRANSPOSE(B2:B19) der Formel aus und drücken Sie dann die Taste F9. Sie können sehen, dass die Formel wie in den folgenden Screenshots gezeigt geändert wurde.
- Entfernen Sie die geschweiften Klammern aus der Formel in der Bearbeitungsleiste und drücken Sie dann die Eingabetaste.
Antwort2
Ich verwende für solche Aufgaben gerne VBA. Vorausgesetzt, Sie haben eine eindeutige Benutzer-ID, wie in Ihrer Beispieltabelle angegeben, könnten Sie Folgendes tun:
Sub Addresses_To_Columns()
Dim lastRow As Long
Dim addressCount As Integer: addressCount = 0
lastRow = Range("A" & Rows.Count).End(xlUp).Row
For i = lastRow To 3 Step -1
If Cells(i, 1).Value = Cells(i - 1, 1).Value Then
addressCount = addressCount + 1
Range(Cells(i - 1, 10), Cells(i - 1, (addressCount * 6) + 10)) = Range(Cells(i, 4), Cells(i, (addressCount * 6) + 4)).Value
Rows(i).Delete
Else
addressCount = 0
End If
Next i
End Sub
Dadurch wird Folgendes geändert:
Dieser Code muss an Ihr spezifisches Format angepasst werden. Beachten Sie auch, dass dies schnell als Proof of Concept durchgeführt wurde und möglicherweise einige gängige Best Practices fehlen. Bitte sichern Sie Ihre Daten, bevor Sie diesen Code ausprobieren, da er einen Löschbefehl zum Entfernen doppelter Zeilen enthält.
Antwort3
Vielen Dank an alle für die Hilfe und Vorschläge. Ich habe das Problem jedoch mit einer anderen Methode gelöst.
Ich habe einfach '-1', '-2', '-3' an die „eindeutigen“ Kunden-IDs angehängt. Dann habe ich für jede neue Spalte, die ich hinzufügen musste, eine SVERWEIS-Funktion für die eindeutigen Werte 1, 2 und 3 ausgeführt.
Hoffen wir, dass sich all die Zeit und Arbeit für den durch diese Tortur erworbenen Ruf gelohnt hat.
Antwort4
Eine sehr einfache Lösung, wenn ich Ihre Frage richtig verstanden habe. Stellen Sie natürlich sicher, dass Sie zuerst die Tabelle sichern.
1) Fügen Sie die erforderliche Anzahl neuer Spalten an der richtigen Stelle hinzu. Nehmen wir an, die neue Spalte ist N.
2) Ich gehe davon aus, dass die Kunden-ID in Spalte A steht und dass Zeilen mit einer neuen Adresse für denselben Kunden in dieser Zeile dieselbe Nummer in Spalte A haben. Und schließlich gehe ich davon aus, dass die erste Zeile für jeden Kunden die vollständigsten Angaben außer der Adresse enthält, also Name, Telefonnummer usw. (wenn nicht, verwenden Sie die Sortierfunktion, indem Sie zuerst nach Kundennummer und dann nach Name sortieren).
3) Geben Sie in Zelle N2 diese Formel ein:
=if(and(a3=a2,a1<>a2),h3,"")
wobei H die Spalte mit den Adressen ist. Wenn die nächste Zeile dieselbe Kundennummer hat (a3=a2) UND diese Zeile ein neuer Kunde ist, also eine andere Kundennummer als die vorherige Zeile (a1<>a2), DANN wird die Adresse aus der nächsten Zeile genommen und in die Hauptzeile für diesen Kunden eingefügt. Wiederholen Sie dies für alle anderen Teile dieser Adresse, damit alle Informationen verschoben werden. Also dieselbe Formel, aber in O2 statt N2 und mit Verweis auf i3 statt h3 und so weiter.
4) Verwenden Sie eine ähnliche Formel für die 3. Adresse. Gehen Sie also davon aus, dass Spalte X die neue Spalte für die 3. Adresse ist. Geben Sie in X2 Folgendes ein:
=if(and(a4=a2,a1<>a2),h4,"")
Im Grunde dasselbe, nur dass stattdessen Informationen aus den Zeilen zwei darunter übernommen werden.
5) Jetzt sollten alle Adressen für jeden Kunden in der „Haupt“-Zeile stehen. Jetzt müssen Sie alle diese Adressen kopieren und sie mit „Inhalte einfügen – Werte“ an denselben Stellen einfügen. Dadurch werden die Formeln entfernt und Sie erhalten nur die Adressen als Daten, als hätten Sie sie eingegeben.
6) Verwenden Sie jetzt die Funktion „Sortieren nach Kundenname“, um alle Zeilen, die für den Namen leer sind (weil es sich nur um zusätzliche Adressen handelt), an einem Ort zu sammeln. Löschen Sie dann alle diese Zeilen, nachdem Sie sichergestellt haben, dass alle benötigten Daten jetzt in der richtigen Zeile stehen. Voila