Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Tabelle von horizontal invVertikal umwandeln und Zusammenführen
#1
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
Antworten Top
#2
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
Gruß Atilla
Antworten Top
#3
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
Antworten Top
#4
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.
Gruß Atilla
Antworten Top
#5
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.
.xlsm   Makrotabelle.xlsm (Größe: 24,81 KB / Downloads: 7)

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
Antworten Top
#6
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
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • Demech
Antworten Top
#7
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
Antworten Top
#8
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
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#9
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
Gruß Atilla
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste