Registriert seit: 03.02.2017
Version(en): Office 365 Home
03.02.2017, 22:21
(Dieser Beitrag wurde zuletzt bearbeitet: 05.02.2017, 18:51 von Glausius.)
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
Registriert seit: 14.04.2014
Version(en): 2003, 2007
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
Registriert seit: 03.02.2017
Version(en): Office 365 Home
04.02.2017, 00:11
(Dieser Beitrag wurde zuletzt bearbeitet: 05.02.2017, 18:53 von Glausius.)
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
Registriert seit: 14.04.2014
Version(en): 2003, 2007
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
Registriert seit: 03.02.2017
Version(en): Office 365 Home
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.
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
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo,
dann hier mal eine Formellösung mit zwei Hilfsspalten.
Beachte den Inhalt der Zellen F1 und G1!
Arbeitsblatt mit dem Namen 'Quelle' |
| A | B | C | D | E | F | G | H | I | J |
1 | Column1 | Column2 | Column3 | Column4 | | profile.address1 | profile.city | | | |
2 | 19 | profile.aboutme | "" | 10 | | | | 19 | "Musterweg 2" | "Musterstadt" |
3 | 19 | profile.address1 | "Musterweg 2" | 1 | | 1 | | 21 | muster2 | stadt2 |
4 | 19 | profile.address2 | "" | 2 | | | | 70 | weg | stadtd3 |
5 | 19 | profile.city | "Musterstadt" | 3 | | | 1 | | | |
6 | 19 | profile.country | "Schweiz" | 5 | | | | | | |
7 | 19 | profile.dob | "1985-02-04 00:00:00" | 11 | | | | | | |
8 | 19 | profile.favoritebook | "" | 9 | | | | | | |
9 | 19 | profile.phone | "012 345 67 88" | 7 | | | | | | |
10 | 19 | profile.postal_code | "9999" | 6 | | | | | | |
11 | 19 | profile.region | "" | 4 | | | | | | |
12 | 19 | profile.website | false | 8 | | | | | | |
13 | 21 | profile.aboutme | "" | 10 | | | | | | |
14 | 21 | profile.address1 | muster2 | 1 | | 2 | | | | |
15 | 21 | profile.address2 | "" | 2 | | | | | | |
16 | 21 | profile.city | stadt2 | 3 | | | 2 | | | |
Zelle | Formel |
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:1 Nutzer sagt Danke an atilla für diesen Beitrag 28
• Demech
Registriert seit: 03.02.2017
Version(en): Office 365 Home
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
Registriert seit: 13.04.2014
Version(en): 365
Hallo,
ohne Hilfsspalten:
Arbeitsblatt mit dem Namen 'Quelle' |
| A | B | C | D | E | F | G | H |
1 | Column1 | Column2 | Column3 | Column4 | | | Profile.address1 | Profile.city |
2 | 19 | profile.aboutme | "" | 10 | | 19 | "Musterweg 2" | "Musterstadt" |
3 | 19 | profile.address1 | "Musterweg 2" | 1 | | 21 | Irrweg | Lochstadt |
4 | 19 | profile.address2 | "" | 2 | | 70 | an der Stiege | Heimatstadt |
5 | 19 | profile.city | "Musterstadt" | 3 | | | | |
6 | 19 | profile.country | "Schweiz" | 5 | | | | |
7 | 19 | profile.dob | "1985-02-04 00:00:00" | 11 | | | | |
8 | 19 | profile.favoritebook | "" | 9 | | | | |
9 | 19 | profile.phone | "012 345 67 88" | 7 | | | | |
10 | 19 | profile.postal_code | "9999" | 6 | | | | |
11 | 19 | profile.region | "" | 4 | | | | |
12 | 19 | profile.website | false | 8 | | | | |
13 | 21 | profile.aboutme | "" | 10 | | | | |
14 | 21 | profile.address1 | Irrweg | 1 | | | | |
15 | 21 | profile.address2 | "" | 2 | | | | |
16 | 21 | profile.city | Lochstadt | 3 | | | | |
17 | 21 | profile.country | "" | 5 | | | | |
18 | 21 | profile.dob | "" | 11 | | | | |
19 | 21 | profile.favoritebook | "" | 9 | | | | |
20 | 21 | profile.phone | "" | 7 | | | | |
21 | 21 | profile.postal_code | "" | 6 | | | | |
22 | 21 | profile.region | "" | 4 | | | | |
23 | 21 | profile.website | false | 8 | | | | |
24 | 70 | profile.address1 | an der Stiege | 1 | | | | |
25 | 70 | profile.city | Heimatstadt | 2 | | | | |
26 | 70 | profile.dob | "" | 5 | | | | |
27 | 70 | profile.phone | "" | 4 | | | | |
28 | 70 | profile.postal_code | "" | 3 | | | | |
29 | 0 | 0 | 0 | 0 | | | | |
Zelle | Formel |
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.
Registriert seit: 14.04.2014
Version(en): 2003, 2007
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 |
2 | 19 |
3 | 21 |
4 | 70 |
Zelle | Formel |
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