Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1892to1896
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

Tabelle transponieren

Tabelle transponieren
27.07.2022 16:29:16
Henry
Hallo liebes Forum,
ich benötige mal wieder eure Hilfe.
Ich habe in einem Tabellenblatt eine Tabelle mit dem Namen "Matrix" hinterlegt.
Die Zeilen der Tabelle "Matrix" können dabei von Ihrer Anzahl her variieren.
Ich möchte nun die Tabelle mit einem Code auf das zweite Tabellenblatt übertragen und transponieren.
Sprich: Die Zeilen sollen zu Spalten und die Spalten sollen zu Zeilen werden.
Ist es möglich die Tabelle "Matrix" OHNE die Copy-Methode auf das zweite Tabellenblatt zu übertragen?
Ich weiß leider nicht wie ich an dieses Problem herangehen soll.
Vielleicht kann mir ja jemand hier helfen.
Über eine Nachricht von Euch würde ich mich sehr freuen.
Viele Grüße
Henry

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabelle transponieren
27.07.2022 16:30:45
Henry
Kleiner Nachtrag:
Auch die Spalten können von Ihrer Anzahl her variieren.
AW: Tabelle transponieren
27.07.2022 16:33:42
GerdL
Moin Henry,
wieso ohne Kopieren, bei der zugehörigen PasteSpecial-Methode ist das Argument Transpose dabei ?
Gruß Gerd
AW: Tabelle transponieren
27.07.2022 16:34:51
Henry
Das ist eine Aufgabe, die ich ohne die Copy-Methode lösen soll.
Und genau daran scheitere ich. :-(
AW: Tabelle transponieren
27.07.2022 16:37:51
Henry
Kann man die Transpose Methode vielleicht in ein Array übergeben?
AW: Tabelle transponieren
27.07.2022 16:42:51
Daniel
Hi
was genau ist denn der Grund, warum du nicht das Transponieren von PasteSpecial verwenden sollst?
einfacher gehts ja nicht.
du kannst natürlich auch die Werte erst in ein Array lesen, dann das Array mit Worksheetfunction.Transpose transponieren und das dann ins andere Tabellenblatt zurückschreiben.
Gruß Daniel
Anzeige
AW: Tabelle transponieren
27.07.2022 16:44:39
{Boris}
Hi,
ohne Copy z.B. - hier bezogen auf den Ausgangsbereich A1:C4:

Sub Matrix_transponieren()
Dim x As Long, y As Long
x = 4 'Anzahl Zeilen Ausgangsbereich
y = 3 'Anzahl Spalten Ausgangsbereich
For y = 1 To 3
For x = 1 To 4
Tabelle2.Cells(y, x) = Tabelle1.Cells(x, y)
Next x
Next y
End Sub
Ist das ne Hausaufgabe? ;-)
VG, Boris
AW: Tabelle transponieren
27.07.2022 18:05:09
Henry
Hallo Boris,
ich habe den Code auf meinen Bereich angepasst.
Soweit funktioniert das auch.
Allerdings würde ich die Daten gerne in Tabelle 2 in A1 eintragen.
Kannst du mir hier nochmal helfen?
Die Daten in Tabelle 1 stehen in D8:F15.
Der Code sieht bislang wie folgt aus:

Sub Matrix_transponieren()
Dim x As Long, y As Long
x = 8 'Anzahl Zeilen Ausgangsbereich
y = 3 'Anzahl Spalten Ausgangsbereich
For y = 4 To 6
For x = 8 To 15
Tabelle2.Cells(y, x) = Tabelle1.Cells(x, y)
Next x
Next y
End Sub

Anzeige
AW: Tabelle transponieren
27.07.2022 19:33:16
{Boris}
Hi,
Du musst nur die Zeilen- und Spaltenzähler für die Ausgabe - Tabelle1.Cells(x, y) - entsprechend reduzieren. Da x bei 8 losgeht: -7 und y - 3.
Die beiden Zeilen
x = 8 'Anzahl Zeilen Ausgangsbereich
y = 3 'Anzahl Spalten Ausgangsbereich
sind zudem ersatzlos zu streichen, weil überflüssig.

Sub Matrix_transponieren()
Dim x As Long, y As Long
For y = 4 To 6
For x = 8 To 15
Tabelle2.Cells(y, x) = Tabelle1.Cells(x - 7, y - 3)
Next x
Next y
End Sub
VG, Boris
AW: Tabelle transponieren
27.07.2022 16:58:11
Rudi
Hallo,

Sub aaa()
Dim arrIN, arrOUT(), i As Long, j As Long
arrIN = Sheets(1).Cells(1, 1).CurrentRegion
ReDim arrOUT(1 To UBound(arrIN, 2), 1 To UBound(arrIN))
For i = 1 To UBound(arrIN)
For j = 1 To UBound(arrIN, 2)
arrOUT(j, i) = arrIN(i, j)
Next j
Next i
Sheets(2).Cells(1, 1).Resize(j - 1, i - 1) = arrOUT
End Sub
Gruß
Rudi
Anzeige
AW: Tabelle transponieren
27.07.2022 17:06:59
GerdL
Hallo Henry,
sowas will dein Auftraggeber bestimmt nicht.

Dim vntArray As Variant
vntArray = WorksheetFunction.Transpose(Tabelle1.Range("F8").CurrentRegion.Value)
Tabelle2.Range("A2").Resize(UBound(vntArray, 1), UBound(vntArray, 2)) = vntArray
Gruß Gerd
AW: Tabelle transponieren
28.07.2022 08:56:32
Henry
Guten Morgen,
ich habe selber noch etwas weiter probiert.
ich habe nun folgenden Code.
Ich möchte im Array die Tabelle "Test_Matrix" angeben.
Wenn ich den Code nun allerdings ausführe, wird in Sheet 2 lediglich die Zelle A1 befüllt.
Ich möchte aber, das die ganze Tabelle "Test_Matrix" in Sheet 2 transponiert wird.
Könnt ihr mir hier vielleicht noch einmal helfen?

Sub Möglichkeit1()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim MyArray As Variant
Set ws1 = ThisWorkbook.Sheets(1)
Set ws2 = ThisWorkbook.Sheets(2)
MyArray = ws1.Range("Test_Matrix")
MyArray = WorksheetFunction.Transpose(MyArray)
ws2.Range("A1").Value = MyArray
End Sub

Anzeige
falls du mehr als ....
27.07.2022 17:09:03
Rudi
16384 Zeilen hast, muss man die Breite einschränken.:

Sub aaa()
Dim arrIN, arrOUT(), i As Long, j As Long
arrIN = Sheets(1).Cells(1, 1).CurrentRegion
ReDim arrOUT(1 To UBound(arrIN, 2), 1 To Application.Min(Sheets(2).Columns.Count, UBound(arrIN)))
For i = 1 To UBound(arrOUT, 2)
For j = 1 To UBound(arrOUT)
arrOUT(j, i) = arrIN(i, j)
Next j
Next i
Sheets(2).Cells(1, 1).Resize(j - 1, i - 1) = arrOUT
End Sub

AW: falls du mehr als ....
27.07.2022 17:57:43
Henry
Hallo,
vielen Dank für Eure Hilfe.
Ist es möglich die dynamische Tabelle "Matrix" anzusprechen?
Zurzeit befinden sich die Daten in D8:F15; allerdings können Zeilen und Spalten der dynamische Tabelle "Matrix" variieren.
Anzeige
AW: falls du mehr als ....
27.07.2022 18:11:36
Daniel
Hi
wenn du eine "Matrix" genannte Tabelle im Tabellenblatt hast, kannst du sie mit
Range("Matrix") ansprechen.
Gruß Daniel
AW: falls du mehr als ....
27.07.2022 18:16:09
Henry
Hallo Daniel,
danke für den Tipp.
Das funktioniert.
Kann man den Code, wenn man die Tabelle "Test_Matrix" anspricht ggf. noch kürzen?
Oder sind hier dennoch alle Codezeilen erforderlich?
Mein Code sieht nun wie folgt aus:

Sub Möglichkeit2()
Dim arrIN, arrOUT(), i As Long, j As Long
arrIN = Sheets(1).Range("Test_Matrix")
ReDim arrOUT(1 To UBound(arrIN, 2), 1 To Application.Min(Sheets(2).Columns.Count, UBound(arrIN)))
For i = 1 To UBound(arrOUT, 2)
For j = 1 To UBound(arrOUT)
arrOUT(j, i) = arrIN(i, j)
Next j
Next i
Sheets(2).Cells(1, 1).Resize(j - 1, i - 1) = arrOUT
End Sub

Anzeige
AW: falls du mehr als ....
27.07.2022 18:25:22
Daniel
Hi
maximal gekürzt:

Sheets(1).Range("Test_Matrix").copy
Sheets(2).Cells(1, 1).PasteSpecial xlpastevalues, Transpose:=true
Gruß Daniel
AW: falls du mehr als ....
27.07.2022 18:26:20
Henry
Vielen Dank.
Leider soll ich nicht die Copy-.Methode verwenden. :-(
AW: falls du mehr als ....
27.07.2022 18:28:51
Daniel
ist aber das kürzeste
warum ist das verboten?
gibts dafür nen plausiblen Grund?
AW: falls du mehr als ....
27.07.2022 18:29:52
Henry
Ja ich weiß, dass es das kürzeste ist.
Und eigentlich gebe ich dir auch Recht.
Lt. Aufgabenstellung soll aber nicht mit Copy gearbeitet werden.
AW: falls du mehr als ....
27.07.2022 18:39:28
Daniel
wenns ne Haus- oder Übungsaufgabe ist, solltest du die auch alleine machen.
Schließlich willst du ja deine Note haben und nicht meine.
Gruß Daniel
Anzeige
AW: falls du mehr als ....
27.07.2022 18:58:32
Henry
Es handelt sich lediglich um eine Übungsaufgabe.
Diese wird nicht benotet.
Hilfe suchen ist okay.
AW: falls du mehr als ....
28.07.2022 13:57:33
Daniel
eine Lösung hast du doch.
sogar mit Fehlerabsicherung.
Gruß Daniel
AW: falls du mehr als ....
29.07.2022 08:26:09
Henry
Hallo,
der Code funktioniert einwandfrei.
Vielen Dank.
Allerdings verstehe ich folgende Zeile nicht.
Wieso muss es heißen Resize(j - 1, i - 1)?
Sheets(2).Cells(1, 1).Resize(j - 1, i - 1) = arrOUT

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige