Zeile zu Matrix

Zeile blockweise im mehrere Zeilen aufteilen

Diese Beispielta­belle hat eine Zeile mit 14 Spal­ten. Das Ziel ist es nun, daraus eine Matrix mit 3 Spal­ten und n Zeilen zu machen. In diesem Fall wäre n = 5, weil 143 aufgerun­det 5 ergibt. (Das dür­fen Sie auch gerne in Excel in eine Formel brin­gen  😉 ).

Plain Excel

In A1:N1 ste­hen unter­schiedliche Werte, in der Mus­ter­datei sind das die Texte Spalte 1 bis Spalte 14. Die Auf­gabe beste­ht ‑wie bere­its oben beschrieben, in A2:C2 die ersten drei Werte zu schreiben, in A3:C2 die näch­sten drei Werte, und so weit­er. Geben Sie dazu in A2 diese Formel ein: =INDEX($1:$1; SPALTE(A1)+(ZEILE(A1)-1)*3).

Wenn Sie kein­er­lei Erfahrung mit etwas kom­plex­eren Formeln haben, bedarf es ein­er kleinen Erk­lärung. In diesem Fall gibt INDEX() den Wert aus der nten Posi­tion in der Zeile 1 ($1:$1) zurück. Was noch wichtig ist: Die Mul­ti­p­lika­tion mit 3 am Ende der Formel bes­timmt, dass jew­eils 3 Spal­ten gefüllt wer­den sollen. Der Teil direkt nach dem Semi­kolon berech­net die Posi­tion in Zeile 1.

Das Ganze macht aber erst Sinn, wenn Sie diese Formel bis C2 rüber ziehen und dann bis min­destens Zeile 5 nach unten ziehen. Wenn es mehr Zeilen sind, macht das erst ein­mal nicht viel aus, weil die in Zeile 1 leeren Zellen hier mit ein­er Null gefüllt wer­den. Im Anschluss kön­nen Sie entwed­er die Zellen mit den Null­w­erten löschen oder Sie ver­wen­den ein benutzerdefiniertes Zahlen­for­mat: Standard;Standard; also exakt so mit dem let­zten Semi­kolon. Dann wer­den die Nullen unter­drückt.

Wenn Sie nur die Matrix ohne die Zeile 1 behal­ten wollen, dann kön­nen Sie nicht ein­fach die erste Zeile löschen. Schließlich beziehen die Formeln in der Matrix sich auf die dor­ti­gen Dat­en. Wollen Sie nur die Matrix in dem Arbeits­blatt haben, dann wer­den Sie erst den Bere­ich der Matrix kopieren und dann Als Wert wieder ein­fü­gen. Dadurch ist die Verbindung zu den ursprünglichen Dat­en aufge­hoben und Sie kön­nen die erste Zeile leeren oder kom­plett löschen.

▲ nach oben …

Per Makro & VBA

Aus mein­er Sicht um einiges trans­par­enter ist der in VBA ver­wen­dete Code. Ich finde auch, dass er viel leichter anzu­passen ist, wenn beispiel­sweise die Spal­tenzahl oder der Ziel­bere­ich geän­dert wer­den soll. Der Code kön­nte so ausse­hen:

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 aus­führen und die Anzahl der Spal­ten für die Matrix anzu­passen, die Zeile mit den Ursprungs­dat­en vielle­icht anzu­passen oder die Zeile für die Ziel-Aus­gabe zu ändern.


Selb­stre­dend ist es in bei­den Vari­anten, Plain Excel und VBA möglich, dass die Dat­en nicht in Spalte 1 begin­nen. Das kön­nen Sie sich gerne selb­st erar­beit­en.

▲ nach oben …

Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?

Dann würde ich mich über einen Beitrag Ihrer­seits z.B. 2,00  freuen … (← Klick mich!)

 

Dieser Beitrag wurde unter Mit VBA/Makro, Musterlösungen, Ohne Makro/VBA, Tabelle und Zelle, Wege nach Rom abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.