PDA

Vollständige Version anzeigen : Zellen transponieren bei unterschiedlichen Datensatzlängen


top
11.07.2012, 22:25
Hallo zusammen,

ich habe eine Tabelle mit 2 Spalten (siehe Anhang 1). Die Datensätze haben unterschiedliche Längen und sind leider in Spaltenform.

http://www.ms-office-forum.net/forum/attachment.php?attachmentid=62221&d=1342040888

Nun will ich diese Tabelle transponieren. Dabei müßte aus der Spalte Index die lfd. Nummer ausgelesen und mittels einer Schleife jeweils passend in Zeilenform transponiert werden. Das Ergebnis sollte dann so aussehen (siehe Anhang 2):

http://www.ms-office-forum.net/forum/attachment.php?attachmentid=62222&d=1342041298

Ich habe hier im Forum zwar schon einiges zum Thema transponieren gefunden, aber die Codes passen einfach nicht, da mein Problem die unterschiedlichen Längen der Datensätze sind.

Der nachfolgende Code transponiert quasi alles. Mir ist klar, dass ich im ersten Teil irgendwie eine Schleife einbauen muß, die die Länge des jeweiligen Datensatzes erkennt und diese dann in eine neue Zeile kopiert. Aber wie geht das?

Sub Trans()
JoinOnLeerZeile Range("B1:B1000")
End Sub

Sub JoinOnLeerZeile(r As Range)
Dim i As Long ' Zeile Quelle
Dim j As Integer ' Spalte Ziel
Dim k As Long ' Zeile Ziel
j = 1
k = 1
For i = 1 To r.Rows.Count
If Trim(r(i, 1).Value) = "" Then
k = k + 1
j = 1
Else
j = j + 1
r(k, j).Value = r(i, 1).Value
End If
Next

End Sub

Bin für jede Hilfe dankbar.

salut
top

EarlFred
12.07.2012, 04:03
Hallo top,

anbei ein "bestandsnah" abgeänderter Code:
Option Explicit
Sub Trans()
JoinOnLeerZeile Range("A1:B1000")
End Sub

Sub JoinOnLeerZeile(r As Range)
Dim i As Long ' Zeile Quelle
Dim j As Long ' Spalte Ziel
Dim k As Long ' Zeile Ziel
Dim vTemp As Variant

Set r = Intersect(ActiveSheet.UsedRange, r)
With r
vTemp = .Value
.ClearContents
End With

j = 1
k = 0

For i = 1 To r.Rows.Count
If Trim(vTemp(i, 1)) <> "" Then
k = k + 1
j = 1
r(k, j).Value = vTemp(i, 1)
j = j + 1
Else
j = j + 1
End If

r(k, j).Value = vTemp(i, 2)

Next

End Sub

Grüße
EarlFred

top
12.07.2012, 08:58
Hallo EarlFred,

vielen Dank für Deine Antwort (Wow, die Antwort morgens um 03:03);) .

Werde den Code testen und melde mich dann wieder.

salut
top

top
12.07.2012, 11:40
Hallo EarlFred,

suppi, Dein Code funzt wie geleckt. Nun habe ich aber noch eine Frage. Kann man bei der Schleife auch die Inhalte der Zellen auslesen und entsprechend zuweisen? In der Zelle "Zusatzangaben1" steht immer "Telefon:01234 / 12345", in der Zelle "Zusatzangaben2" fast immer "Fax:012345 / 123456". Die Ortsbezeichnung fängt immer mit einer PLZ an.

Ich habe ein Beispiel unten drangehängt. Wenn es nicht geht oder zuviel Programmieraufwand ist, dann mache ich das eben händisch. Ist halt nur eine ziemlich doofe allwöchentliche Fleißaufgabe, die einfach nur nervt. Aber ich bin ja schon froh, dass das mit dem Transponieren überhaupt über das Makro klappt.

merci
top

EarlFred
12.07.2012, 15:21
Hallo top,

was genau meinst Du mit "entsprechend zuweisen"? Sollen bestimmte Angaben immer in bestimmte Spalten?
Wenn diese Aufgabe wöchentlich wiederkehrt, wäre mein Ansatz, eine brauchbare Datengrundlage zu schaffen: Entweder feldweise getrennt als Text-(csv-)Datei oder aber mit immer gleicher Struktur (Leerzeilen bei fehlenden Angaben) oder oder, damit diese mit System zugeordnet werden können ... Ansatz wäre also beim exportierenden Programm.
Anderer Denkansatz: Gleich mit passenden Methoden (Datenbank?) die Daten in gewünschter Struktur "ziehen".

Grüße
EarlFred