Zeilentransformation
#1
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]
Top
#2
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
Gruß
Peter
[-] Folgende(r) 1 Nutzer sagt Danke an Peter für diesen Beitrag:
  • LoreHaubrich
Top
#3
Brauche das Ganze als Makro in VBA aber trotzdem vielen Dank für die Formel!
Top
#4
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • LoreHaubrich
Top
#5
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.
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
[-] Folgende(r) 1 Nutzer sagt Danke an GMG-CC für diesen Beitrag:
  • LoreHaubrich
Top
#6
Vielen herzlichen Dank für Eure Hilfe. Einfach Super!!
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste