Transponieren

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Transponieren
von: Uwe
Geschrieben am: 12.11.2003 12:52:14

Wie kann ich folgenden String transponieren:
"Punkt1 von 18 (vom 29.10.2003) Letzte Aktualisierung: 06.11.2003"
Die Zeilen stehen in einer Tabelle in verschiedenen Zeilen untereinander. Das Datum ist jedoch verschieden. Diese möchte ich alle mit diesem Makro transponieren.



Sub KopiereTranspo()
Dim Zeile As Integer
DIm Punkt.... ???????? As String
Dim Telefon As String
Dim Email As String
Application.ScreenUpdating = False
Do Until ActiveCell.Value = Empty
 If ActiveCell.Value = "Punkt...?????" Then   'Gross- und Kleinschreibung beachten!
        Punkt...????? = ActiveCell.Offset(0, 1).Value
        Zeile = ActiveCell.Row
        Range("O2").Select
            Do Until ActiveCell.Value = Empty
            ActiveCell.Offset(1, 0).Select
            Loop
        ActiveCell.Value = Punkt....?????
        Range("A" & Zeile).Select
    End If
      If ActiveCell.Value = "Telefon" Then   'Gross- und Kleinschreibung beachten!
        Telefon = ActiveCell.Offset(0, 1).Value
        Zeile = ActiveCell.Row
        Range("O2").Select
            Do Until ActiveCell.Value = Empty
            ActiveCell.Offset(1, 0).Select
            Loop
        ActiveCell.Value = Telefon
        Range("A" & Zeile).Select
    End If
    
    If ActiveCell.Value = "Email" Then   'Gross- und Kleinschreibung beachten!
        Email = ActiveCell.Offset(0, 1).Value
        Zeile = ActiveCell.Row
        Range("P2").Select
            Do Until ActiveCell.Value = Empty
            ActiveCell.Offset(1, 0).Select
            Loop
        ActiveCell.Value = Email
        Range("A" & Zeile).Select
    End If
              
           
        ActiveCell.Offset(1, 0).Select
Loop
Application.ScreenUpdating = True
End Sub




Kann mir jemand helfen?

Grüsse
Bild


Betrifft: AW: Transponieren
von: Begges
Geschrieben am: 13.11.2003 11:42:23

bitte erklär nochmal, was du erreichen möchtest. Was verstehst du unter transponieren?


Bild


Betrifft: AW: Transponieren
von: Uwe
Geschrieben am: 14.11.2003 01:42:34

Hallo Begges,

transponieren heisst: Zeilen in Spalten umwandeln.
Ich habe also in Spalte A immer wiederkehrende Begriffe, die dann in Spalten umgebrochen werden, sodass die Werte in der Spalte unterhalb aufgelistet werden.

A B C
Email Telefon Punkt << Überschriften
udo.@mail.de 069/5555 Punkt1von.... << Werte
werner.@t-online.de 06171/1111

vorher:

A B
Email udo.@mail.de
Telefon 069/5555
Punkt1von...
.....
Email werner.@t-online.de
Telefon 06171/1111
Punkt1von....

usw.

So und nu habe ich dieses: Punkt1 von 18 (vom 29.10.2003) Letzte Aktualisierung: 06.11.2003
Danach kommt Punkt2 von 18 (vom 28.10.2003) Letzte Aktualisierung: 05.11.2003
usw.

Problem ist Dim ???? As String (siehe Formel)

Was setze ich jetzt ein. Ich habe als feste Bezeichnung nur "Punkt". Der rest ändert sich ja dauernd. Gibt es da so eine Art Wildcat (*). Wahrscheinlich geht das aber in einer anderen Art und Weise oder?

Gruss
Uwe


Bild


Betrifft: AW: Transponieren
von: PeterW
Geschrieben am: 14.11.2003 02:13:45

Hallo Uwe,

dein Problem scheint leicht lösbar zu sein aber ich verstehe auch nicht, was du genau möchtest. Kannst du mal eine Beispieltabelle auf den Server stellen aus der man ersehen kann, wie die Ursprungs- und Zieltabelle aussehen soll?

Gruß
Peter


Bild


Betrifft: AW: Transponieren
von: Uwe
Geschrieben am: 14.11.2003 10:30:53

Hallo,

anbei habe ich das Beispiel.

Userbild



Gruss


Bild


Betrifft: AW: Transponieren
von: PeterW
Geschrieben am: 14.11.2003 14:02:14

Hallo Uwe,

mit Alt+F11 den VBA-Editor öffnen, links siehst du das Projektfenster, Rechtsklick auf deine Datei, Einfügen, Modul.
In das sich öffnende Fenster folgenden Code kopieren:

Sub Transpo()
  Dim vQuell
  Dim lgZiel As Long
    vQuell = InputBox("In welcher Zeile geht es los?")
    If vQuell = "" Then Exit Sub
    Range("C2:F" & Range("C65536").End(xlUp).Row).ClearContents
    lgZiel = 2
    
    Do
      Cells(lgZiel, 3) = Cells(vQuell, 1)
      Cells(lgZiel, 4) = Cells(vQuell + 2, 2)
      Cells(lgZiel, 5) = Cells(vQuell + 3, 2)
      Cells(lgZiel, 6) = Cells(vQuell + 4, 2)
      vQuell = vQuell + 6
      lgZiel = lgZiel + 1
    Loop Until IsEmpty(Cells(vQuell, 1))
End Sub

Starten kannst du ihn entweder über Extras, Makro, Makros oder du erstellt dir eine Schaltfläche, der du den Code zuweist.

Gruß
Peter


Bild


Betrifft: AW: Transponieren
von: Uwe
Geschrieben am: 15.11.2003 12:38:51

Hallo Peter,

ne, das klappt nicht so ganz. Mit dem Makro wird die Liste einfach nur in die nächste Spalte kopiert. Da habe ich das selbe wie die Ursprungsliste.
Es sollen ja alle Zeilen, die irgendwo in der Spalte stehen, gesucht und rechts untereinander aufgelistet werden. Also: Punkt1 von
Punkt2 von
Punkt3 von

Gruss
Uwe


Bild


Betrifft: AW: Transponieren
von: Uwe
Geschrieben am: 15.11.2003 12:59:25

Hallo Peter,

ich muss mich entschuldigen. So wie ich es Dir als Beispiel gezeigt habe, klappt es
ganz prima. Das war mein Fehler. Das Problem ist, dass die Zeilen, in denen die Bezeichnung "Punkt1 von..." nicht immer alle 5 Zeilen kommen. Das ist verschieden.
Das geht mit Zeile 3 los, die nächste ist Zeile12, die nächste ist Zeile 21 usw.
Also willkürlich. Es müssten alle Zeilen gefunden werden, in denen diese Bezeichnung vorhanden ist und diese dann transponiert werden.
Sorry und tausend Entschuldigungen !

Gruss
Uwe


Bild


Betrifft: AW: Transponieren
von: PeterW
Geschrieben am: 16.11.2003 01:06:03

Hallo Uwe,

kein Problem, das lässt sich anpassen - aber nicht mehr jetzt nach einer größeren Feier. :-)
Werde dir morgen einen passenden Ansatz liefern.

Gruß
Peter


Bild


Betrifft: AW: Transponieren
von: Uwe
Geschrieben am: 16.11.2003 13:21:37

Hallo Peter,

dafür habe ich doch volles Verständnis.

Gruss


Bild


Betrifft: AW: Transponieren
von: PeterW
Geschrieben am: 16.11.2003 17:33:55

Hallo Uwe,

hier der versprochene Ansatz. Jetzt ist es egal, in welchem Abstand die Zeilen Punkt... stehen, es werden die Werte aus der übernächsten und der zwei folgenden Zeilen nach Punkt... "transponiert".

Sub Transpo()
  Dim lgQuell As Long
  Dim lgZiel As Long
    Range("C2:F" & Range("C65536").End(xlUp).Row).ClearContents
    lgZiel = 2
    lgQuell = 3
    Do
      If Left(Cells(lgQuell, 1), 5) = "Punkt" Then
        Cells(lgZiel, 3) = Cells(lgQuell, 1)
        Cells(lgZiel, 4) = Cells(lgQuell + 2, 2)
        Cells(lgZiel, 5) = Cells(lgQuell + 3, 2)
        Cells(lgZiel, 6) = Cells(lgQuell + 4, 2)
        lgZiel = lgZiel + 1
      End If
      lgQuell = lgQuell + 1
    Loop Until lgQuell > Range("A65536").End(xlUp).Row
End Sub

Gruß
Peter


Bild


Betrifft: AW: Transponieren
von: Uwe
Geschrieben am: 17.11.2003 00:58:34

Hallo Peter,

ist ja sagenhaft !!! Einfach fänomenal. Einfach unglaublich. Das funktioniert ja
wirklich !?? Ich kann´s gar nicht fassen. Das isses.
Also, da muss ich mich aber ganz herzlich bei Dir bedanken. Kann ich etwas für Dich tun ? Ein Kästchen Bier oder so?

Nochmals vielen Dank

Und die besten Grüsse
Uwe


Bild

Beiträge aus den Excel-Beispielen zum Thema " Mehrere Exceldateien in einer konsolidieren"