1.9k Aufrufe
Gefragt in Tabellenkalkulation von
Nach einem Kopieren einer PDF Tabelle wird in Excel leider daraus eine einzige
Spalte. Ich möchte es nun gern zurück-formatieren. Dazu müßte aus 5 Zeilen jeweils 5
Spalten werden, und dann wieder eine neue Zeile. Lässt sich das mit Excel oder
Open-Office Werkzeugen automatisch erledigen?

8 Antworten

0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo,

angenommen die Daten stehen in Spalte A ab A1 abwärts bis in Zeile 100, dann schreibe in B1 folgende Formel und kopiere sie zunächst nach rechts bis in Spalte F und dann nach Bedarf nach unten.

=INDEX($A$1:$A$100;ZEILE()*5-6+SPALTE())

Hast Du mehr als 100 Zeilen, dann musst Du die Formel anpassen.

Gruß
Rainer
0 Punkte
Beantwortet von
Das klappt soweit gut. Wie könnte ein kleines Makro aussehen:

Mache aus den Zeilen Spalte A -> Spalten (transponieren)
solange bis du auf zwei hindereinanderfolgende Datumszellen triffst
dann fange damit eine neue Zeile an, und immer so weiter bis Ende
Spalte A

Danke
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo,

in OO kann ich Dir nicht mit einem Makro helfen, aber es müsste auch mit Formeln zu erschlagen sein.

Allerdings müsste man schon etwas mehr über Deine Basisdaten wissen, am besten wäre eine Beispieldatei, um auch testen zu können.

Gruß
Rainer
0 Punkte
Beantwortet von
Ich kopiere Spalte A einfach mal hier rein. Wie man sehen kann, war
die Tabelle mal ein Kontoauszug. Immer wenn die zwei
Datumsfelder kommen, müßte eine neue Zeile anfangen.

Die Länge einer Zeile von der Anzahl der Spalten ist nicht einheitlich,
deswegen klappt die erste Formel nicht ganz.

Danke

04.01.2010
04.01.2010
Dauerauftrag
xxxxx / xxxxxxx
MODELLBAU MARTIN
MIETE LAGERRAUM
− 36,00 €
04.01.2010
04.01.2010
Dauerauftrag
455xxxxxx / 8xxx xxxx xxxx
GERD SONNTAG
RÜCKZAHLUNG ALLIANZ
− 57,50 €
04.01.2010
04.01.2010
Überweisungs-Eingang
282xxxxxx / 8xxx xxxx xxxx
NESTLER DIETMAR ODER
FLUR-NR 532/9
GARAGENPACHT FUER 2010
60,00 €
04.01.2010
04.01.2010
Kartenzahlung/-en
000xxxxxxx / 30x xxx xxxx
ALDI SAGT DANKE 27/016
EC 5xxxxxxx 30.12 08.18 CE0
− 26,18 €
04.01.2010
04.01.2010
Kartenzahlung/-en
000xxxxxx / 300 xxx xxx
DANKE,IHR LIDL
EC 6xxxxx/ 30.12 16.59 CE0
− 44,64 €
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo,

die Formel kann auch nicht funktionieren, da sie auf 5 Zeilen je Datensatz ausgelegt ist.
Angepasst auf 7 Zeilen je Datensatz muss sie so lauten:

=INDEX($A$1:$A$100;ZEILE()*7-8+SPALTE())

Allerdings müssen es immer 7 Zeilen sein, bei unterschiedlicher Zeilenanzahl versagt auch diese Formel, und eine flexible Formel fällt mir dazu nicht ein.

Gruß
Rainer
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

ein beispiel :-)

gruss nighty

Sub ArrayTranspose()
Dim TbSpAZeile As Long
Dim Qzeile As Long
Dim IndexSp As Long
Dim IndexZe As Long
TbSpAZeile = Cells(Rows.Count, 1).End(xlUp).Row
ReDim TbSpaA(1 To TbSpAZeile, 1) As Variant
ReDim TbSpaNeu(1 To TbSpAZeile, 1 To 7) As Variant
TbSpaA() = Range("A1:A" & TbSpAZeile)
For Qzeile = 1 To TbSpAZeile
If IsDate(TbSpaA(Qzeile, 1)) = True Then
IndexSp = 1
IndexZe = IndexZe + 1
Qzeile = Qzeile + 1
TbSpaNeu(IndexZe, IndexSp) = TbSpaA(Qzeile, 1)
Else
IndexSp = IndexSp + 1
If IndexSp = 8 Then IndexSp = 1
TbSpaNeu(IndexZe, IndexSp) = TbSpaA(Qzeile, 1)
End If
Next Qzeile
Range("A1:G" & TbSpAZeile).Resize(UBound(TbSpaNeu())) = TbSpaNeu()
End Sub
0 Punkte
Beantwortet von
Hallo nighty, super, dieses Makro funktioniert ganz gut.

Er macht nur komischerweise aus 01.04.2010 -> 04.01.2010 usw.. Falls
im Verwendungszweck ein Datum steht wirds auch etwas durcheinander.
Deswegen immer nur Zeilenumbruch, wenn zwei
hintereinanderfolgende, identische Datum stehen.

Trotzdem vielen Dank, tolle Leistung.
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi ^^

mit beiden datumsangaben dann so

gruss nighty

Sub ArrayTranspose()
Dim TbSpAZeile As Long
Dim Qzeile As Long
Dim IndexSp As Long
Dim IndexZe As Long
Dim Schalter As Boolean
TbSpAZeile = Cells(Rows.Count, 1).End(xlUp).Row
ReDim TbSpaA(1 To TbSpAZeile, 1) As Variant
ReDim TbSpaNeu(1 To TbSpAZeile, 1 To 7) As Variant
TbSpaA() = Range("A1:A" & TbSpAZeile)
For Qzeile = 1 To TbSpAZeile
If IsDate(TbSpaA(Qzeile, 1)) = True And Schalter = False Then
Schalter = True
IndexSp = 1
IndexZe = IndexZe + 1
TbSpaNeu(IndexZe, IndexSp) = TbSpaA(Qzeile, 1)
Else
IndexSp = IndexSp + 1
If IndexSp = 8 Then IndexSp = 1
TbSpaNeu(IndexZe, IndexSp) = TbSpaA(Qzeile, 1)
Schalter = False
End If
Next Qzeile
Range("A1:G" & TbSpAZeile).Resize(UBound(TbSpaNeu())) = TbSpaNeu()
End Sub
...