Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Daten von wide in long format umordnen

Daten von wide in long format umordnen
19.11.2008 01:55:00
wide
Hallo,
ich habe eine Menge Daten, die ich gerne vom sog. wide ins longformat umordnen möchte.
Im Moment sind alle Unternehmen nebeneinander angeordnet. Für jedes Unternehmen gibt es 5 Spalten = 5 Variablen.
Das ganze soll jetzt so umgeordnet werden, dass die Datumspalte (230 Tage) sich untereinander immer wieder fortsetzt. Für die Dauer der knapp 11 Monate soll sich die Abkürzung des Unternehmens forlaufend wiederholen. Und danach sollen die 5 Spalten mit den Variablen folgen.
Insgesamt soll es nach der Transformation also nur noch 7 Spalten geben, dafür aber umso mehr Zeilen.
Ich hoffe das Excelfile macht das etwas klarer.
In sheet 1 die Ausgangsdatei, in sheet 2 exemplarisch der Output für die ersten beiden unternehmen wie es aussehen sollte.
https://www.herber.de/bbs/user/56916.zip
Hat jemand einen Vorschlag wie sich das realisieren lässt?
mfg, Peter
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten von wide in long format umordnen
20.11.2008 11:56:20
wide
Hallo Peter,
Das folgende Makro erledigt die Umstellung. Die Ausgabe erfolgt dabei immer in ein neu angelegtes Blatt.
Gruß
Franz

Sub Umstellen()
Dim wksQ As Worksheet, wksZ As Worksheet
Dim Zeile1 As Long, ZeileL As Long, ZeileZiel As Long, Spalte As Long
Dim rngDatum As Range, rngDaten As Range, strCode As String
Set wksQ = Worksheets("Sheet1") 'Ausgangsdaten-Tabelle
ActiveWorkbook.Worksheets.Add 'neue Tabelle für Zieldaten einfügen
Set wksZ = ActiveSheet 'Zieldaten - Tabelle
Application.ScreenUpdating = False
Zeile1 = 3 '1. Zeile mit Datum in Ausgangsdaten
ZeileZiel = 1 'Titelzeile in Zieltabelle
With wksZ
.Activate
' Spaltentitel im Zielblatt eintragen
.Cells(1, 1) = "Datum"
.Cells(1, 2) = "Code"
.Cells(1, 3) = "ASK PRICE"
.Cells(1, 4) = "BID PRICE"
.Cells(1, 5) = "FREE FLOAT NOSH"
.Cells(1, 6) = "NUMBER OF SHARES"
.Cells(1, 7) = "TURNOVER BY VOLUME"
ZeileZiel = ZeileZiel + 1 '1. Datenzeile in Zieltabelle
'Titelzeilen fixieren
.Cells(ZeileZiel, 1).Select
ActiveWindow.FreezePanes = True
End With
With wksQ
ZeileL = .Cells(.Rows.Count, 1).End(xlUp).Row 'letzte Zeile mit Datum
'Datumsbereich merken
Set rngDatum = .Range(.Cells(Zeile1, 1), .Cells(ZeileL, 1))
'Spalten mit daten abarbeiten
For Spalte = 2 To .Cells(2, .Columns.Count).End(xlToLeft).Column Step 5
'Prüfen, ob Fehler in Code Zeile
If Not (IsError(.Cells(1, Spalte)) Or IsEmpty(.Cells(2, Spalte))) Then
strCode = .Cells(2, Spalte)
'Datenbereich merken
Set rngDaten = .Range(.Cells(Zeile1, Spalte), .Cells(ZeileL, Spalte + 4))
With wksZ
' daten in Zieltabelle kopieren
rngDatum.Copy Destination:=.Cells(ZeileZiel, 1)
rngDaten.Copy Destination:=.Cells(ZeileZiel, 3)
'Code eintragen in Spalte 2
.Range(.Cells(ZeileZiel, 2), _
.Cells(ZeileZiel + rngDatum.Rows.Count - 1, 2)).Value = strCode
End With
ZeileZiel = ZeileZiel + rngDatum.Rows.Count
If ZeileZiel + rngDatum.Rows.Count > .Rows.Count Then
End If
End If
Next
End With
With wksZ
.Range(.Columns(1), .Columns(7)).EntireColumn.AutoFit
End With
Application.ScreenUpdating = True
MsgBox "fertig"
End Sub


Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige