warum nicht gleich VBA?
07.03.2017 14:58:20
Michael
Hi,
mit ein paar Zeilen VBA läßt sich die Tabelle "korr" aus "orig2" erzeugen, wobei die Spaltensummen mitgeführt werden, um in "Auswahl" (im Moment in Spalte J - zum Vergleich) ausgegeben werden zu können.
In einem weiteren Rutsch werden die Überschriften & Spaltenbuchstaben aus "korr" in "Auswahl" eingetragen.
Ich mag jetzt nicht groß analysieren, was in "ident" und "senkr" für Berechnungen vorgenommen werden, aber prinzipiell müßte man die im Makro auch "mitführen" können: auf zwei, drei Arrays hin oder kommt soll es ja nicht ankommen.
Das Makro:
' allg. Modul, z.B. Modul1
Option Explicit
Sub o2k()
Dim oSh As Worksheet, kSh As Worksheet
Dim o, k, kA, kS ' Bereich in orig, in korr und Spalte A/Summe in korr
Dim z&, s&, i&, zMax&, sMax&
Dim w& ' ist das immer ganzzahlig? sonst double oder so
Set oSh = Worksheets("orig2")
Set kSh = Worksheets("korr")
' hier wird stillschweigend von einer lückenlosen
' Nummerierung von 1 bis n ausgegangen...
o = oSh.Range("A1").CurrentRegion.Offset(1, 2)
With kSh
zMax = .Range("A" & .Rows.Count).End(xlUp).Row
' ... während hier beliebige Nummern in Spalte A stehen können
kA = .Range("A2:A" & zMax)
End With
sMax = UBound(o, 2) - 2
ReDim k(1 To UBound(kA), 1 To sMax)
ReDim kS(1 To sMax, 1 To 1)
For s = 1 To sMax
w = 0
For z = 1 To UBound(kA)
k(z, s) = o(kA(z, 1), s)
w = w + k(z, s)
Next
kS(s, 1) = w
Next
kSh.Range("C2").Resize(UBound(kA), sMax) = k
Sheets("Auswahl").Range("J3").Resize(sMax) = kS
' Nun noch die Überschriften/Spaltenbuchstaben aus orig in Auswahl:
o = Intersect(oSh.Range("A1").CurrentRegion.Offset(, 2), _
oSh.Range("1:2")).Value
ReDim k(1 To UBound(o, 2) - 2, 1 To 2)
For i = 1 To UBound(k)
k(i, 1) = o(1, i)
k(i, 2) = Split(Cells(1, i + 2).Address, "$")(1)
Next
Sheets("Auswahl").Range("B3").Resize(UBound(k), 2) = k
End Sub
Die Datei: https://www.herber.de/bbs/user/112001.xlsm
Schöne Grüße,
Michael