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

Array Transponieren: Dimension geht verloren

Array Transponieren: Dimension geht verloren
Andreas
Hallo VBA Freunde,
ich arbeite schon seit einiger Zeit mit Arrays uns transponiere diese gelegentlich auch. Heute nun bin ich auf eine Ausnahmesituation gestoßen. Ich fülle meine Arrays i.d.R. mit einer flexiblen 2. Dimension. Bevor ich ein solches Array dann zum sortieren gebe, transponiere ich es. Heute ergab es sich, daß die 2. Dimension mit nur einem Wert gefüllt wurde. Dies führte dazu, daß nach der Transponation das Array nur noch als eindimensional erkannt wurde. Damit kommen aber meine Sortierfunktionen nicht klar.


Sub ArraySortTest()
Dim arrTest()
ReDim arrTest(1 To 3, 1 To 1)
arrTest(1, 1) = 1
arrTest(2, 1) = 5
arrTest(3, 1) = 9
Debug.Print "1_1: "; UBound(arrTest, 1)
Debug.Print "1_2: "; UBound(arrTest, 2)
arrTest = Application.Transpose(arrTest)
Debug.Print vbLf
Debug.Print "2_1: "; UBound(arrTest, 1)
Debug.Print "2_2: "; UBound(arrTest, 2) 'Hier kommt der Debugger
End Sub


Habe ich nun etwas grundlegendes an dieser Funktion übersehen oder unterliege ich sonst einem Fehler oder Irrtum? Ich weiß nicht mehr so recht weiter.
Ich würde mich freuen, wenn mir jemand etwas Inspiration bzgl. meines Holzweges geben mag.
Dank und Gruß,
Andreas Hanisc

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Array Transponieren: Dimension geht verloren
10.08.2011 23:48:08
Josef

Hallo Andreas,
das geht so nicht mit .Transpose, da muss man sich selber was basteln.
Sub ArraySortTest()
  Dim arrTest()
  
  Redim arrTest(1 To 3, 1 To 1)
  
  arrTest(1, 1) = 1
  arrTest(2, 1) = 5
  arrTest(3, 1) = 9
  
  Debug.Print "1_1: "; UBound(arrTest, 1)
  Debug.Print "1_2: "; UBound(arrTest, 2)
  
  arrTest = TransposeDim(arrTest)
  
  Debug.Print vbLf
  Debug.Print "2_1: "; UBound(arrTest, 1)
  Debug.Print "2_2: "; UBound(arrTest, 2)
  
End Sub



Private Function TransposeDim(Field As Variant) As Variant
  Dim lngX&, lngX1&, lngX2&, lngY&, lngY1&, lngY2&
  Dim varTmp As Variant
  
  lngX1 = LBound(Field, 1)
  lngX2 = UBound(Field, 1)
  lngY1 = LBound(Field, 2)
  lngY2 = UBound(Field, 2)
  
  Redim varTmp(lngY1 To lngY2, lngX1 To lngX2)
  
  For lngY = lngY1 To lngY2
    For lngX = lngX1 To lngX2
      varTmp(lngY, lngX) = Field(lngX, lngY)
    Next
  Next
  
  TransposeDim = varTmp
  
End Function



« Gruß Sepp »

Anzeige
AW: Array Transponieren: Dimension geht verloren
10.08.2011 23:52:48
Gerd
Hallo Andreas,
die Fehlermeldung ist die Konsequenz deiner zutreffenden Analyse, dass keine 2.Dimension mehr vorhanden war. Vorschlag zum Umschaufeln:
Sub ArraySortTest2()
Dim arrTest(), arrTemp()
Dim lngA As Long, lngB As Long
ReDim arrTest(1 To 3, 1 To 1)
arrTest(1, 1) = 1
arrTest(2, 1) = 5
arrTest(3, 1) = 9
Debug.Print "1_1: "; UBound(arrTest, 1)
Debug.Print "1_2: "; UBound(arrTest, 2)
ReDim arrTemp(LBound(arrTest, 2) To UBound(arrTest, 2), LBound(arrTest, 1) To UBound(arrTest, 1) _
)
For lngA = LBound(arrTest, 1) To UBound(arrTest, 1)
For lngB = LBound(arrTest, 2) To UBound(arrTest, 2)
arrTemp(lngB, lngA) = arrTest(lngA, lngB)
Next
Next
Erase arrTest
arrTest = arrTemp
Debug.Print vbLf
Debug.Print "2_1: "; UBound(arrTest, 1)
Debug.Print "2_2: "; UBound(arrTest, 2) 'Hier kam der Debugger
End Sub
Gruß Gerd
Anzeige
AW: Array Transponieren: Dimension geht verloren
11.08.2011 10:49:12
Andreas
Hallo Josef, hallo Gerd,
vielen Dank für Eure schnellen und kompetenten Antworten. Das ich für diese Konstellation '.Transpose' leider nicht einsetzen kann, hatte ich schon geahnt und nun habt ihr es bestätigt. Nun kann ich beruhigt die von Euch vorgeschlagene Schleifenlösung einsetzen.
Habt beide einen schönen Donnerstag!
Grüße aus Berlin, Andreas Hanisch

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige