Excel: Wie kann man die Name-Wert-Liste der sich wiederholenden Datensatzstruktur in eine Tabelle / Kreuztabelle konvertieren?

1020
adolf garlic

'Text zu Spalten' und Pivot-Tabelle sind keine Lösungen!

Quelldaten

myval: value1 mydate: 11:11:2001 myname: bob diamond mynum: 5648 endmarker myval: value2 mydate: 10:10:2008 myname: jimmy knapp mynum: 6661 endmarker 

in

myval mydate myname mynum value 1 11:11:2001 bob diamond 5648 value 2 10:10:2008 jimmy knapp 6661 

Der erste Teil ist in Ordnung, wo das Trennzeichen auch im Datum enthalten ist und erreicht werden kann durch:

 =IFERROR(LEFT(A1,FIND(":",A1,1)-1),"")  =IFERROR(RIGHT(A1,LEN(A1)-FIND(":",A1,1)),"") 

Was sich nur auf dem ersten Trennzeichen schön teilt

Google ärgerlich für "list to table" oder "list to crosstab" liefert Ergebnisse für genau das Gegenteil

BEARBEITEN : Jeder Datensatz enthält etwa 200 Felder. Die Werte werden immer in derselben Reihenfolge angezeigt. Einige davon sind jedoch nicht immer vorhanden. Das heißt, sie können nicht direkt mit etwas wie dem OFFSET-Befehl gelöst werden, der ansonsten funktioniert hätte

3
Sie haben Feldnamen, die Sie zum Identifizieren der Werte verwenden könnten. Jede Sequenz ist jedoch identisch (alle Felder in derselben Reihenfolge). Sie können also die relative Zeilennummer zuverlässig zum Zuweisen von Werten verwenden, anstatt zu dekodieren, was in den einzelnen Spalten enthalten ist. Sind das die tatsächlichen Feldnamen oder nur Platzhalter für das Beispiel? Sind die tatsächlichen Daten nur vier Spalten? Einfache Lösung: Für den Wert in jeder Bestimmungsspalte: Verwenden Sie die MID () - Funktion mit dem Anfangszeichen für diesen Wert und berechnen Sie die entsprechende Quellzeile numerisch. fixer1234 vor 8 Jahren 0
Die Feldnamen befinden sich in der gleichen Reihenfolge. Wie ich jedoch nach dem Versuch, dieses Problem mit OFFSET zu lösen, erkannt habe, enthalten einige Datensätze nicht alle Felder, und es gibt etwa 200 Felder. Ich werde das Q bearbeiten, um dies wiederzugeben adolf garlic vor 8 Jahren 0
Die gewünschte Ausgabe hat also etwa 200 Spalten? fixer1234 vor 8 Jahren 0
Ja, was bedeutet, dass die List-to-Table-Sache in MSWord ebenfalls nicht funktioniert adolf garlic vor 8 Jahren 0
Ein Ansatz: Erstellen Sie 3 Hilfsspalten: Analysieren Sie den Feldnamen und den Feldwert und fügen Sie eine Datensatznummer basierend auf den Endmarkern hinzu (um die Ziel- / Zeilennummer zu erreichen). Suchen Sie für den Wert in jeder Spalte die Spaltenüberschrift im Helper-Spalten-Array innerhalb der übereinstimmenden Datensatznummer. Ein anderer Ansatz: Verwenden Sie Access. fixer1234 vor 8 Jahren 0
Ist ein ** VBA ** -Makro akzeptabel? Gary's Student vor 8 Jahren 0
Es sieht immer mehr so ​​aus, gefüllt mit 200 Fallbeispielen: - / adolf garlic vor 8 Jahren 0

1 Antwort auf die Frage

2
Gary's Student

Nehmen wir an, Ihre Quelldaten befinden sich in Spalte A von Tabelle1 :

enter image description here

Platzieren Sie zuerst die Spaltenüberschriften in Sheet2

Führen Sie dann dieses kurze Makro aus:

Sub DataReOrganizer() Dim s1 As Worksheet, s2 As Worksheet Dim N As Long, i As Long, K As Long, v As String Set s1 = Sheets("Sheet1") Set s2 = Sheets("Sheet2") N = s1.Cells(Rows.Count, "A").End(xlUp).Row K = 2  For i = 1 To N v = s1.Cells(i, "A").Text If v = "endmarker" Then K = K + 1 Else ary = Split(v, ": ") MsgBox ary(1) If ary(0) = "myval" Then s2.Cells(K, 1) = ary(1) If ary(0) = "mydate" Then s2.Cells(K, 2) = Chr(39) & ary(1) If ary(0) = "myname" Then s2.Cells(K, 3) = ary(1) If ary(0) = "mynum" Then s2.Cells(K, 4) = ary(1) End If Next i End Sub 

um dies in Sheet2 zu produzieren :

enter image description here

Das Chr (39) wird verwendet, um das Datumsformat beizubehalten und zu verhindern, dass es von Excel in eine Uhrzeit geändert wird.

Es klappt! Einige zusätzliche Fetzchen waren jedoch in Form von versteckten Charakteren zu finden. Sobald das Skript entfernt und das Skript geändert wurde (mit Excel), um die anderen 196 ungeraden Spalten zu erstellen, lief es einwandfrei. Vielen Dank adolf garlic vor 8 Jahren 0
Dies beantwortet zwar die Frage, aber ich stelle fest, dass eines der Felder mehrzeilig ist und nur den Bezeichner in der ersten Zeile hat, den ich ausprobieren und abfangen muss. Ich werde zurückschicken, wenn und wenn ich die Lösung herausfinde (wenn dies nicht gehandhabt wird, werden die Zeilen 2 bis * n * des Feldes entleert). adolf garlic vor 8 Jahren 0