Clever-Excel-Forum

Normale Version: Tabelle von horizontal invVertikal umwandeln und Zusammenführen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Zusammen

Ich habe da ein Problem mit einer Tabelle welche ich als Datenbank nutzen möchte.
Ausgangslage:
Die Tabelle welche ich bearbeiten möchte sieht folgendermassen aus:
Colum1 / Colum2 / Colum3       /
1          / Strasse / Musterweg  /
1         / Stadt     / Musterstadt /
2         / Strasse / Hasenweg /
2        / Stadt    / Hasenstadt / usw....

Nun möchte ich diese wie folgt umstellen:

Colum1 / Strasse         / Stadt           /
1          / Musterweg   / Musterstadt  /
2          / Hasenweg    / Hasenstadt  /  usw...

Ich habe eine ACCES Datenbank mit Benutzerdaten und möchte dass die Mitglieder über meine Joomla Hompage Ihre Persönlichen Angaben selber ändern können.
Exportiere ich diese Datenbank erhalte ich die Tabelle wie oben. Meine ACCES Datenbank ist jedoch Vertikal erstellt. Somit kann ich diese dann nicht verknüpfen und aktualisieren.
Ich bin hier an meine Grenze gestossen und hoffe, dass mir jemand Helfen kann.
Besten Dank schon mal.

LG
Demech
Hallo,

unter folgenden Bedingungen:
-Du hast zwei Tabellenblätter, eins "Quelle" und das Andere "Ziel" benannt.
-Die Daten stehen in Tabelle Quelle ab Zeile 2 und ab Spalte A; immer zwei Zeilen ein Datensatz

Dann wird Dein Wunsch mit unten stehendem Code erfüllt:


Code:
Sub ordnen()
Dim i As Long, k As Long
Dim lngZQuelle As Long, lngZZiel As Long
Dim arrIn
Dim arrOut()
 With Worksheets("Quelle")
   lngZQuelle = .Cells(.Rows.Count, 1).End(xlUp).Row
   If (lngZQuelle - 1) Mod 2 = 0 Then
      arrIn = .Range("A2:C" & lngZQuelle)
      ReDim arrOut((lngZQuelle - 1) / 2 - 1, 2)
      For i = 1 To lngZQuelle - 1 Step 2
       arrOut(k, 0) = arrIn(i, 1)
       arrOut(k, 1) = arrIn(i, 3)
       arrOut(k, 2) = arrIn(i + 1, 3)
       k = k + 1
     Next i
   Else
     MsgBox "Anzahl der Zeilen durch zwei geteilt ergibt keine gerade Zahl." _
         & vbLf & vbLf & "Daten werden nicht eingelesen und geordnet."
   End If
 End With
 
 If k > 0 Then
   With Sheets("Ziel")
     lngZZiel = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
     .Range("A2:C" & lngZZiel).ClearContents
     .Range("A2:C" & k + 1) = arrOut
   End With
 End If
End Sub
Hallo Atilla

Vielen Dank für diesen Code. Leider erfülle ich die Bedingungen nicht ganz. Ich habe unterschiedliche Mengen an Datensätzen.
Der Einzige konstante Bezug ist die ID Nummer in Spalte 1. In Spalte 2. ist eigentlich der Titel und in Spalte 3 der dazugehörige Wert.

Ich habe gehofft, es gäbe einen Weg über eine Geführte Funktion? Leider kenne ich mich mit der Programmierung gar nicht aus.

LG
Demech
Hallo Demech,

zeig doch mal ein Beispiel, wie die Daten im Original aussehen.

Nicht das wir uns falsch verstehen, der Code verarbeitet unterschiedliche Anzahl von Daten. Ich gehe nur davon asu,
so wie in Deinem gezeigten Beispiel, dass zwei Zeilen hintereinander immer eine Zeile im Ziel bedeutet.

Was das Programmieren betrifft, brauchst Du ja nichts machen, dass habe ich ja in diesem Fall gemacht.

Das würde sicher auch mit Formeln gehen, aber da würde man die gleichen Vorgaben machen.

Dein Problem ist nicht schwierig zu lösen, nur brauchen wir exakte Angaben wo die Daten liegen und wie sie aussehen.
Hallo Atilla

Sorry das ich mich erst jetzt wieder Melde.
Ich habe mich bevor ich nun zurückschreibe mit deinem Code befasst. Besser gesagt musste ich echt zuerst mal herausfinden, wo ich diesen Einfügen muss. Bin dann über Alt+F11 im Visual Basic gelandet und konnte den Code als Makro einsetzen und Ausführen. Hoffe mal bis dahin habe ich alles richtig gemacht.  

Ich habe die Tabelle nun so abgespeichert und hier angefügt. [attachment=9375]

Das Ergebnis in der Tabelle Ziel ist leider noch nicht das Gewünschte. Ich gehe aber mal stark davon aus, dass es an meinen ungenauen Angaben liegt oder einer Fehlbedienung.

Diese Mustertabelle beinhaltet momentan erst 3 unterschiedliche ID in Spalte A. Dies kann und wird dann auf ca. 49 unterschiedliche ID`s wechseln.

Danke für deine Hilfe und hoffe du hast alle Angaben die du brauchst.

LG
Demech
Hallo,

dann hier mal eine Formellösung mit zwei Hilfsspalten.
Beachte den Inhalt der Zellen F1 und G1!

Arbeitsblatt mit dem Namen 'Quelle'
 ABCDEFGHIJ
1Column1Column2Column3Column4 profile.address1profile.city   
219profile.aboutme""10   19"Musterweg 2""Musterstadt"
319profile.address1"Musterweg 2"1 1 21muster2stadt2
419profile.address2""2   70wegstadtd3
519profile.city"Musterstadt"3  1   
619profile.country"Schweiz"5      
719profile.dob"1985-02-04 00:00:00"11      
819profile.favoritebook""9      
919profile.phone"012 345 67 88"7      
1019profile.postal_code"9999"6      
1119profile.region""4      
1219profile.websitefalse8      
1321profile.aboutme""10      
1421profile.address1muster21 2    
1521profile.address2""2      
1621profile.citystadt23  2   

ZelleFormel
F2=WENN(B2=$F$1;MAX($F$1:F1)+1;"")
G2=WENN(B2=$G$1;MAX($G$1:G1)+1;"")
H2=INDEX($A$2:$A$28;VERGLEICH(ZEILE(A1);$F$2:$F$28;0))
I2=INDEX($C$2:$C$28;VERGLEICH(ZEILE(A1);$F$2:$F$28;0))
J2=INDEX($C$2:$C$28;VERGLEICH(ZEILE(B1);$G$2:$G$28;0))
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
Hallo Attila

Besten Dank für diese Formeln. So funktioniert es. Ich werde mich wohl noch etwas mit dem ganzen auseinandersetzen, denke aber mit der Routine wird dies dann einfach umzusetzen sein.
Vielen Dank auf jeden Fall für deine Arbeit.

LG
Demech
Hallo,

ohne Hilfsspalten:


Arbeitsblatt mit dem Namen 'Quelle'
 ABCDEFGH
1Column1Column2Column3Column4  Profile.address1Profile.city
219profile.aboutme""10 19"Musterweg 2""Musterstadt"
319profile.address1"Musterweg 2"1 21IrrwegLochstadt
419profile.address2""2 70an der StiegeHeimatstadt
519profile.city"Musterstadt"3    
619profile.country"Schweiz"5    
719profile.dob"1985-02-04 00:00:00"11    
819profile.favoritebook""9    
919profile.phone"012 345 67 88"7    
1019profile.postal_code"9999"6    
1119profile.region""4    
1219profile.websitefalse8    
1321profile.aboutme""10    
1421profile.address1Irrweg1    
1521profile.address2""2    
1621profile.cityLochstadt3    
1721profile.country""5    
1821profile.dob""11    
1921profile.favoritebook""9    
2021profile.phone""7    
2121profile.postal_code""6    
2221profile.region""4    
2321profile.websitefalse8    
2470profile.address1an der Stiege1    
2570profile.cityHeimatstadt2    
2670profile.dob""5    
2770profile.phone""4    
2870profile.postal_code""3    
290000    

ZelleFormel
F2=WENNFEHLER(AGGREGAT(15;6;A:A/(A:A>0)/(A:A>F1);1);"")
G2=SVERWEIS(G$1;INDEX($B:$B;VERGLEICH($F2;$A:$A;0)):$C$9999;2;0)
H2=SVERWEIS(H$1;INDEX($B:$B;VERGLEICH($F2;$A:$A;0)):$C$9999;2;0)
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
Hallo Edgar,

ich abe gar kein A...ggregat.

Wenn die Spalte A aufsteigend sortiert ist ginge auch statt Aggregat:

Arbeitsblatt mit dem Namen 'Quelle'
 L
219
321
470

ZelleFormel
L2=MIN(A:A)
L3=WENNFEHLER(INDEX(A:A;VERGLEICH(L2+1;A:A;1)+1);"")
L4=WENNFEHLER(INDEX(A:A;VERGLEICH(L3+1;A:A;1)+1);"")
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg