Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1148to1152
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bereiche automatisch per Script transponieren

Bereiche automatisch per Script transponieren
julia
Hi,
habe eine Tabelle bestehend aus rund 400 Sets/Blöcken immer nur mit einer Werte-Spalte mit 26 Zeilen (A1:A26).
In Zeile 27 kommt eine Zeile mit dem Wert "xxx" und soll eigentlich nur das Ende dieses Sets/Blockes darstellen.
Danach beginnt in Zeile 28 das nächste Set. Insgesamt eben 400 Sets. Wie ich mit Excel die Sets "zu Fuss" von der
Spalten- in Zeilen-Darstellung bekomme ist bekannt. Nur ist dies Set für Set eine gewaltige Aufgabe über mehrere Stunden.
Daher suche ich nach einer Lösung die ich per Script für die ganze Tabelle in einem Rutsch transponieren kann.
Wert 1
Wert 2
Wert 3
Wert 4
....
Wert 26
xxx
Wert 1
Wert 2
Wert 3
Wert 4
....
Wert 26
xxx
Wer kann mir helfen?
mfg
Julia

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Bereiche automatisch per Script transponieren
08.04.2010 16:32:44
Peter
Hallo Julia,
versuch es so:
Option Explicit
Public Sub Transponieren()
Dim WkSh_Q   As Worksheet
Dim WkSh_Z   As Worksheet
Dim lZeile_Q As Long
Dim lZeile_Z As Long
Dim vTemp    As Variant
Application.ScreenUpdating = False
Set WkSh_Q = ThisWorkbook.Worksheets("Tabelle1") ' den Tabellenblattnamen ggf. anpassen!
Set WkSh_Z = ThisWorkbook.Worksheets("Tabelle2") ' den Tabellenblattnamen ggf. anpassen!
For lZeile_Q = 1 To WkSh_Q.Cells(Rows.Count, 1).End(xlUp).Row Step 27
vTemp = WkSh_Q.Range("A" & lZeile_Q & ":A" & lZeile_Q + 26)
lZeile_Z = WkSh_Z.Cells(Rows.Count, 1).End(xlUp).Row + 1
WkSh_Z.Range(WkSh_Z.Cells(lZeile_Z, 1), WkSh_Z.Cells(lZeile_Z, 26)) = _
Application.Transpose(vTemp)
Next lZeile_Q
Application.ScreenUpdating = True
End Sub

Gruß Peter
Anzeige
AW: Bereiche automatisch per Script transponieren
08.04.2010 18:31:07
julia
Hallo Peter,
vielen Dank für die schnelle Antwort.
Habe gerade eben mal ausprobiert, das geht ja schon super.
Dabei habe ich ein Problem gesehen, was mir vorher nicht aufgefallen war. Ist mal in einem Set eine Zeile zusätzlich oder weniger wie es eigentlich sein sollte, verrutschen nicht nur in dieser Zeile die Daten, sondern auch bei alle nachfolgenden. Händische Korrektur (bei wenigen Zeilen kein Problem) wird so kaum möglich.
Meine Idee daher, statt Zeilen zählen, in Spalte A einen Bezeichner aufnehmen der den Beginn des Sets markieren kann und in Spalte B die Werte.
Statt abzählen der Zeilen ist es eventuell besser, wenn mein Set immer beim Bezeichner "Nummer" beginnt + 25 weitere Zeilen. Ist einmal etwas durcheinander geraten, würde das nächste Set ja wieder mit Bezeichner "Nummer" beginnen und damit evtl. Fehler nur auf die verursachte Zeile eingrenzen und nicht wie jetzt auf den kompletten Rest bis zum Daten-Schluss.
Die Spalte A dient somit lediglich der besseren Suche, braucht in der "Tabelle2" natürlich nicht abgespeichert werden.
Nummer;Wert 1
feld02;Wert 2
feld03;Wert 3
feld04;Wert 4
....
feld26;Wert 26
Nummer;Wert 1
feld02;Wert 2
feld03;Wert 3
feld04;Wert 4
....
feld26;Wert 26
Könnte man so etwas machen?
Gruß
Julia
Anzeige
Variable Bereiche per VBA transponieren
08.04.2010 20:22:16
Erich
Hi Julia,
diese Prozedur richtet sich bei der Blockbildung nicht nach Zeilennummern, sondern nur nach dem Blocktrenner,
im Beispiel "xxx":

Public Sub Transponieren2()
Dim WkSh_Z   As Worksheet
Dim lZeile_Q As Long
Dim lZeile_Z As Long
Dim vTemp    As Variant
Dim lZvon    As Long
Dim lAnz     As Long
Const strTrenn As String = "xxx"    ' Blocktrenner in Spalte A ggf. anpassen
Application.ScreenUpdating = False
Set WkSh_Z = ThisWorkbook.Worksheets("Tabelle2") ' Ziel- Blattnamen ggf. anpassen
With ThisWorkbook.Worksheets("Tabelle1")         ' Quell-Blattnamen ggf. anpassen
lZvon = 1
lZeile_Z = WkSh_Z.Cells(WkSh_Z.Rows.Count, 1).End(xlUp).Row
For lZeile_Q = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
If .Cells(lZeile_Q, 1) = strTrenn Then
lAnz = lZeile_Q - lZvon
If lAnz > 0 Then
vTemp = .Cells(lZvon, 1).Resize(lAnz)
lZeile_Z = lZeile_Z + 1
WkSh_Z.Cells(lZeile_Z, 1).Resize(, lAnz) = Application.Transpose(vTemp)
End If
lZvon = lZeile_Q + 1
End If
Next lZeile_Q
If lZvon 
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Variable Bereiche per VBA transponieren
09.04.2010 12:03:22
julia
Hallo Erich,
Klasse - klappt auf Anhieb.
Vielen Dank.
mfg
Julia

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige