Registriert seit: 01.08.2014
Version(en): 2013
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]
Registriert seit: 12.04.2014
Version(en): Office 365
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
Gruß
Peter
Folgende(r) 1 Nutzer sagt Danke an Peter für diesen Beitrag:1 Nutzer sagt Danke an Peter für diesen Beitrag 28
• LoreHaubrich
Registriert seit: 01.08.2014
Version(en): 2013
Brauche das Ganze als Makro in VBA aber trotzdem vielen Dank für die Formel!
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
01.08.2014, 20:55
(Dieser Beitrag wurde zuletzt bearbeitet: 01.08.2014, 20:57 von schauan.)
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)
Registriert seit: 28.05.2014
Version(en): 2013 / 2016
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:1 Nutzer sagt Danke an GMG-CC für diesen Beitrag 28
• LoreHaubrich
Registriert seit: 01.08.2014
Version(en): 2013
Vielen herzlichen Dank für Eure Hilfe. Einfach Super!!