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' |
| A | B | C | D | E |
1 | A1 | B1 | C1 | | A1 |
2 | A2 | B2 | C2 | | B1 |
3 | A3 | B3 | C3 | | C1 |
4 | | | | | A2 |
5 | | | | | B2 |
6 | | | | | C2 |
7 | | | | | A3 |
8 | | | | | B3 |
9 | | | | | C3 |
Zelle | Formel |
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!!