AW: Tabelle umbauen
07.11.2006 15:38:13
ingUR
Hallo, Steffen,
was soll in die "neue Tabelle" übertragen werden
- die Formeln,
- die Werte oder
- die Bezüge?
Wenn weitere Umgruppierungen zu erwarten sind, dann wäre vielleicht das Erstellen einer Pivot-Tabelle das geeignete Instrument.
Wenn nur eine einmalige Neuorientierung der Elemente mit Bezügen auf die (berechneten) Zellenwerte der drei Quelltabellen gewünscht ist - es also keine weitere Berechungen in der bisherigen "SAmmeltabelle" gibt -, dann scheint es mir vorteilhaft, gleich auf die Zellen der Quelltabellen in einer VBA-Prozedur zu greifen und das Arbeitsblatt mit dem Namen "Tabelle" nicht zu verwenden.
Option Explicit
Const WS_ZIEL = "neue Tabelle"
Const WS_Q1 = "ROE"
Const WS_Q2 = "ROI"
Const WS_Q3 = "ROA"
Const MAXROW = 17 'letzte Zeile in ROx
Const MAXCOLUMN = "L" 'letzte Spalten in ROx
Sub TransForm()
Dim ws(3) As Worksheet
Dim maxR As Long, maxC As Integer
Dim r As Long, r0 As Long, r1 As Long, c As Integer
Dim wsQNamen As Variant
Dim strCFormel As String
maxR = MAXROW - 1
maxC = Asc(MAXCOLUMN) - 66
wsQNamen = Array(0, WS_Q1, WS_Q2, WS_Q3)
Set ws(0) = Worksheets(WS_ZIEL)
With ws(0)
.Select
.Cells.ClearContents
'Schreibe Kopfzeile
For c = 1 To 3
Set ws(c) = Worksheets(wsQNamen(c))
.Cells(1, 2 + c) = wsQNamen(c)
Next c
'Referenztabelle der Namen und Jahre ist wsQName(1) !
'Schleife über alle Titel
For r = 0 To maxR - 1
r0 = r * maxC + 1
.Cells(r0 + 1, 1) = ws(1).Cells(r + 2, 2) ' Schreibe Titel in Spalte 1
For r1 = 0 To maxC - 1 'Schleife über alle Spalten (Jahre)
.Cells(r0 + r1 + 1, 2) = ws(1).Cells(1, 3 + r1) 'schreibe Jahreszahl in Spalte 2
strCFormel = "!" & Chr(r1 + 67) & Trim(Str(r + 2))
For c = 1 To 3
.Cells(r0 + r1 + 1, 2 + c) = "=" & wsQNamen(c) & strCFormel
Next c
Next r1
Next r
End With
For c = 0 To 3
Set ws(c) = Nothing
Next c
End Sub
In dieser Standard-Modul-Prozedur sind die Konstanten (Const XYZ = ...) an Deine Auufgabe anzupassen, und es ist ggf. die Anweisung wsQNamen = Array(0, WS_Q1, WS_Q2, WS_Q3) zu werweitern, ween es mehr als drei Auswertungsspalten (z.B. ROx) gibt.
Gruß,
Uwe