Clever-Excel-Forum

Normale Version: Zeilentransformation
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebe Excel-Cracks,
ich habe folgendes Problem. Ich habe in den Spalten A,B,C Text stehen. Dieser soll per VBA derart
transformiert werden, dass alles in der Spalte A steht. Und zwar so:
in Zeile 1 bis 3: A1,B1, C1
in Zeile 4 bis 6: A2,B2, C2
in Zeile 7 bis 9: A3,B3, C3 usw.

Habe leider wenig Ahnung von VBA. Kriegt einer von Euch lieben Leuten so etwas hin?
Vielen Dank für eure Mühe.[/font][/size]
Hallo,

und das muss ein Makro sein oder darf es auch per Formel gehen?

Arbeitsblatt mit dem Namen 'Tabelle1'
 ABCDE
1A1B1C1 A1
2A2B2C2 B1
3A3B3C3 C1
4    A2
5    B2
6    C2
7    A3
8    B3
9    C3

ZelleFormel
E1=INDEX(A:C;(ZEILE(A1)-1)/3+1;REST(ZEILE(A1)-1;3)+1)
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

Anschliessend (optional):

- den Bereich mit den Formeln markieren
- mit Strg-C in die Zwischenablage kopieren
- rechte Maus - Inhalte einfügen - Werte - Ok

Dadurch werden die Formeln im markierten Bereich in Werte umgewandelt und man kann jetzt die bisherige Spalte löschen
Brauche das Ganze als Makro in VBA aber trotzdem vielen Dank für die Formel!
Hallo Lore,

mit VBA könnte dieses Makro Deine Excel-Daten in die gewünschte Reihenfolge bringen:

Code:
Option Explicit

Sub transformieren()
'Transformiert den Bereich A:C in die Spalte A
'=INDEX(A:C;(ZEILE(A1)-1)/3+1;REST(ZEILE(A1)-1;3)+1)
'Variablendeklarationen
'Variant-Array
Dim arrDaten, arrTrans
'Long
Dim loLetzte&
'integer
Dim iCnt%

'letzte benutzte Zelle annhand Spalte A feststellen
loLetzte = Cells(Rows.Count, 1).End(xlUp).Row
'Daten in Array uebernehmen
arrDaten = Range(Cells(1, 1), Cells(loLetzte, 3))
'arrTrans entsprechned Anzahl Datenzellen redimensionieren
ReDim arrTrans(1 To loLetzte * 3)
'Schleife über alle Daten
For iCnt = 1 To loLetzte * 3 Step 3
    'Inhalt Zelle aus Spalte A uebernehmen
    arrTrans(iCnt) = arrDaten(WorksheetFunction.RoundUp(iCnt / 3, 0), 1)
    'Inhalt Zelle aus Spalte B uebernehmen
    arrTrans(iCnt + 1) = arrDaten(WorksheetFunction.RoundUp(iCnt / 3, 0), 2)
    'Inhalt Zelle aus Spalte C uebernehmen
    arrTrans(iCnt + 2) = arrDaten(WorksheetFunction.RoundUp(iCnt / 3, 0), 3)
'Ende Schleife über alle Daten
Next
'Datenbereich leeren
Range(Cells(1, 1), Cells(loLetzte, 3)).ClearContents
'transponierte Daten eintragen
Cells(1, 1).Resize(UBound(arrTrans), 1) = WorksheetFunction.Transpose(arrTrans)
End Sub
Moin,

markiere den Datenbereich der transponiert werden soll und führe das folgende Makro aus:

Code:
Option Explicit
Option Base 1

Sub TransferData()
   Dim aData()
   Dim anzZe As Integer, anzSp As Integer
   Dim Ze As Integer, Sp As Integer, z As Integer
  
   aData = Selection
   z = 1
   With Selection
      anzZe = .Rows.Count
      anzSp = .Columns.Count
      .ClearContents
   End With
   ReDim aData2(anzZe * anzSp)
   For Ze = 1 To anzZe
      For Sp = 1 To anzSp
         Cells(z, 1) = aData(Ze, Sp)
         z = z + 1
      Next Sp
   Next Ze
End Sub

Das Ergebnis wird dann in A1 und die Zellen darunter geschrieben.
Vielen herzlichen Dank für Eure Hilfe. Einfach Super!!