Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1024to1028
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige