Zeile blockweise im mehrere Zeilen aufteilen
Diese Beispieltabelle hat eine Zeile mit 14 Spalten. Das Ziel ist es nun, daraus eine Matrix mit 3 Spalten und n Zeilen zu machen. In diesem Fall wäre n = 5, weil 14⁄3 aufgerundet 5 ergibt. (Das dürfen Sie auch gerne in Excel in eine Formel bringen 😉 ).
Plain Excel
In A1:N1 stehen unterschiedliche Werte, in der Musterdatei sind das die Texte Spalte 1 bis Spalte 14. Die Aufgabe besteht ‑wie bereits oben beschrieben, in A2:C2 die ersten drei Werte zu schreiben, in A3:C2 die nächsten drei Werte, und so weiter. Geben Sie dazu in A2 diese Formel ein: =INDEX($1:$1; SPALTE(A1)+(ZEILE(A1)-1)*3)
.
Wenn Sie keinerlei Erfahrung mit etwas komplexeren Formeln haben, bedarf es einer kleinen Erklärung. In diesem Fall gibt INDEX() den Wert aus der nten Position in der Zeile 1 ($1:$1) zurück. Was noch wichtig ist: Die Multiplikation mit 3 am Ende der Formel bestimmt, dass jeweils 3 Spalten gefüllt werden sollen. Der Teil direkt nach dem Semikolon berechnet die Position in Zeile 1.
Das Ganze macht aber erst Sinn, wenn Sie diese Formel bis C2 rüber ziehen und dann bis mindestens Zeile 5 nach unten ziehen. Wenn es mehr Zeilen sind, macht das erst einmal nicht viel aus, weil die in Zeile 1 leeren Zellen hier mit einer Null gefüllt werden. Im Anschluss können Sie entweder die Zellen mit den Nullwerten löschen oder Sie verwenden ein benutzerdefiniertes Zahlenformat: Standard;Standard; also exakt so mit dem letzten Semikolon. Dann werden die Nullen unterdrückt.
Wenn Sie nur die Matrix ohne die Zeile 1 behalten wollen, dann können Sie nicht einfach die erste Zeile löschen. Schließlich beziehen die Formeln in der Matrix sich auf die dortigen Daten. Wollen Sie nur die Matrix in dem Arbeitsblatt haben, dann werden Sie erst den Bereich der Matrix kopieren und dann Als Wert wieder einfügen. Dadurch ist die Verbindung zu den ursprünglichen Daten aufgehoben und Sie können die erste Zeile leeren oder komplett löschen.
Per Makro & VBA
Aus meiner Sicht um einiges transparenter ist der in VBA verwendete Code. Ich finde auch, dass er viel leichter anzupassen ist, wenn beispielsweise die Spaltenzahl oder der Zielbereich geändert werden soll. Der Code könnte so aussehen:
Option Explicit Sub ZeileZuMatrix1() 'Unterhalb der bestehenenden Zeile beginnen Dim ZeSrc As Long, Sp As Long, LeerZe As Long Dim lCol As Long, rng As Range, Block As Long Application.ScreenUpdating = False ZeSrc = 1 'Hier stehen die Quelldaten Sp = 3 'Ziel-Spalten LeerZe = 5 'Leere Zeilen nach der Datenquelle lCol = Cells(ZeSrc, Columns.Count).End(xlToLeft).Column For Block = 0 To WorksheetFunction.RoundUp(lCol / Sp, 0) - 1 Set rng = Range(Cells(ZeSrc, Block * Sp + 1), Cells(ZeSrc, Block * Sp + Sp)) rng.Copy Cells(Block + ZeSrc + 1 + LeerZe, 1) Next Block 'Und jetzt noch die Zeile mit den Quelldaten löschen Rows(ZeSrc).EntireRow.Delete 'Bei Bedarf auskommentieren End Sub
Sie brauchen nur noch das Makro ausführen und die Anzahl der Spalten für die Matrix anzupassen, die Zeile mit den Ursprungsdaten vielleicht anzupassen oder die Zeile für die Ziel-Ausgabe zu ändern.
Selbstredend ist es in beiden Varianten, Plain Excel und VBA möglich, dass die Daten nicht in Spalte 1 beginnen. Das können Sie sich gerne selbst erarbeiten.
Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?
Dann würde ich mich über einen Beitrag Ihrerseits z.B. 2,00 € freuen … (← Klick mich!)