5.461 Elemente sind maximal drin.
Gru?
Nepumuk
Excel & VBA ? Beispiele
ReDim AUSG(UBound(EING, 2), UBound(EING, 1))
For ze = 1 To UBound(AUSG, 1)
For sp = 1 To UBound(AUSG, 2)
AUSG(ze, sp) = EING(sp, ze)
Next 'sp
Next 'ze
Gru? Ingolf
Function ShortArray(ByVal arr As Variant) As Variant
Dim B()
Dim AUSG()
Dim ze As Long, sp As Long
Dim i As Long, k As Long
For i = 1 To UBound(arr)
If arr(i, 3) = "x" Then
k = k + 1
ReDim Preserve B(3, k)
B(1, k) = arr(i, 1)
B(2, k) = arr(i, 2)
B(3, k) = ""
End If
Next
ReDim AUSG(UBound(B, 2), UBound(B, 1))
For ze = 1 To UBound(AUSG, 1)
For sp = 1 To UBound(AUSG, 2)
AUSG(ze, sp) = B(sp, ze)
Next 'sp
Next 'ze
ShortArray = AUSG()
End Function
Noch eine Anmerkung, die ich bei meiner vorigen Antwort ?bersehen habe: Die Dimensionierung von AUSG() mit UBound() setzt voraus, dass Option Base 1 gesetzt, bzw. LBound immer =1 ist. Sonst musst du das eventuell noch anpassen.
ReDim AUSG(UBound(EING, 2), UBound(EING, 1))
For ze = 1 To UBound(AUSG, 1)
For sp = 1 To UBound(AUSG, 2)
AUSG(ze, sp) = EING(sp, ze)
Next 'sp
Next 'ze
Gru? Ingolf
Function ShortArray(ByVal arr As Variant) As Variant
Dim B()
Dim AUSG()
Dim ze As Long, sp As Long
Dim i As Long, k As Long
For i = 1 To UBound(arr)
If arr(i, 3) = "x" Then
k = k + 1
ReDim Preserve B(3, k)
B(1, k) = arr(i, 1)
B(2, k) = arr(i, 2)
B(3, k) = ""
End If
Next
ReDim AUSG(UBound(B, 2), UBound(B, 1))
For ze = 1 To UBound(AUSG, 1)
For sp = 1 To UBound(AUSG, 2)
AUSG(ze, sp) = B(sp, ze)
Next 'sp
Next 'ze
ShortArray = AUSG()
End Function
Noch eine Anmerkung, die ich bei meiner vorigen Antwort ?bersehen habe: Die Dimensionierung von AUSG() mit UBound() setzt voraus, dass Option Base 1 gesetzt, bzw. LBound immer =1 ist. Sonst musst du das eventuell noch anpassen.Um die worksheetfunction.transpose in Excel VBA zu verwenden, folge diesen Schritten:
Öffne Excel und gehe auf die Registerkarte „Entwicklertools“.
Klicke auf „Visual Basic“, um den VBA-Editor zu öffnen.
Füge ein neues Modul hinzu, indem Du im Menü „Einfügen“ auf „Modul“ klickst.
Schreibe den folgenden Code, um ein Array zu transponieren:
Sub TransposeExample()
Dim originalArray As Variant
Dim transposedArray As Variant
' Beispielarray
originalArray = Range("A1:C3").Value
' Transponiere das Array
transposedArray = Application.WorksheetFunction.Transpose(originalArray)
' Gebe das transponierte Array in einen anderen Bereich aus
Range("E1").Resize(UBound(transposedArray, 1), UBound(transposedArray, 2)).Value = transposedArray
End Sub
Führe das Makro aus, um das Original-Array zu transponieren und das Ergebnis in einen neuen Bereich zu schreiben.
Fehler: „Laufzeitfehler 1004: Methode 'Transpose' des Objekts 'WorksheetFunction' ist fehlgeschlagen“
Lösung: Dieser Fehler tritt auf, wenn die Anzahl der Elemente im Array die maximale Größe von 65.536 Zeilen oder 256 Spalten überschreitet. Stelle sicher, dass dein Array diese Grenzen nicht überschreitet.
Fehler: „Typen unverträglich“
Lösung: Achte darauf, dass das Array, das Du transponierst, korrekt dimensioniert ist. Verwende Dim und ReDim entsprechend, um sicherzustellen, dass die Dimensionen stimmen.
Es gibt auch andere Möglichkeiten, Daten in VBA zu transponieren:
Manuelle Transposition mit Schleifen:
Function ManualTranspose(ByVal arr As Variant) As Variant
Dim transposedArray() As Variant
Dim i As Long, j As Long
ReDim transposedArray(1 To UBound(arr, 2), 1 To UBound(arr, 1))
For i = LBound(arr, 1) To UBound(arr, 1)
For j = LBound(arr, 2) To UBound(arr, 2)
transposedArray(j, i) = arr(i, j)
Next j
Next i
ManualTranspose = transposedArray
End Function
Verwendung von vba.application.transpose:
Du kannst auch Application.Transpose verwenden, um ein Array ohne die WorksheetFunction-Klasse zu transponieren.
Hier sind einige praktische Beispiele zur Verwendung von worksheetfunction.transpose:
Transponieren eines Bereichs: Wenn Du einen Bereich von Zellen in Excel hast, z.B. A1:C3, kannst Du diesen wie folgt transponieren:
Sub TransposeRange()
Dim rng As Range
Set rng = Range("A1:C3")
Range("E1").Resize(rng.Columns.Count, rng.Rows.Count).Value = Application.WorksheetFunction.Transpose(rng.Value)
End Sub
Transponieren eines Arrays in VBA: Du kannst ein Array definieren und es transponieren, wie oben beschrieben. Hier ein Beispiel:
Sub ArrayTranspose()
Dim myArray As Variant
Dim transposed As Variant
myArray = Array(Array(1, 2, 3), Array(4, 5, 6))
transposed = Application.WorksheetFunction.Transpose(myArray)
' Ausgabe in die Konsole
Debug.Print transposed(1, 1) ' Gibt 1 aus
Debug.Print transposed(2, 1) ' Gibt 4 aus
End Sub
Performance-Optimierung: Wenn Du mit großen Datenmengen arbeitest, solltest Du die Verwendung von Application.ScreenUpdating und Application.Calculation optimieren, um die Ausführung zu beschleunigen.
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
' Dein Code hier
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Verwendung von Redim Preserve: Achte darauf, dass Du beim Anpassen der Größe von Arrays in VBA ReDim Preserve verwendest, um die bestehenden Daten zu erhalten.
1. Was ist der Unterschied zwischen Application.Transpose und WorksheetFunction.Transpose?
Application.Transpose ist eine alternative Methode, die in vielen Fällen schneller sein kann und keine Fehler bei großen Datenmengen auslöst.
2. Wie viele Elemente kann ich mit worksheetfunction.transpose transponieren?
Die maximale Anzahl der Elemente liegt bei 65.536 Zeilen oder 256 Spalten. Achte darauf, diese Grenzen nicht zu überschreiten, um Fehler zu vermeiden.
3. Kann ich Transpose auch in einer Formel in Excel verwenden?
Ja, Du kannst =TRANSPOSE(A1:C3) direkt in einer Excel-Zelle verwenden, um einen Bereich zu transponieren.