Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VBA, Array, Transponieren/Spiegeln

622 views
Skip to first unread message

Markus Eckel

unread,
Apr 4, 2003, 10:15:26 AM4/4/03
to
Hallo Leute,

gibt es per VBA eine Möglichkeit, in einem Array Zeilen und Spalten zu
vertauschen (wie beim Kopieren mit der "Transponier"-Funktion)?
Kann man eventuell auch das erste gegen das letzte Element vertauschen (also
nicht wie oben diagonal spiegeln, sondern vertikal pder horizontal)?

Für Hinweise wäre ich dankbar!

Markus


Stephan Kassanke

unread,
Apr 4, 2003, 11:24:19 AM4/4/03
to

Hi Markus,

beim Transponieren ändern sich die Dimensionen des Arrays (wenn es nicht ein
nXn Array ist). Aber trotzdem kannst Du das natürlich in einer Schleife
umkopieren. Wenn Du also ein nXm Array hast infach ein neues Array mXn
anlegen und die Schleife verschachtelt über Zeilen und Spalten laufen
lassen. Dann kannst Du in dem neuen Array Spalten und zeilen zuweisen und Du
erhälst eine Transponierung.

Die Spiegelung ist natürlich auch möglich (ich habe mal das grundgerüst
skizziert:

for i = 1 to ende
puffer = a[i]
' swap
a[i]=a[Ende+1-i]
a[Ende+1-i] = puffer

next i


hth,

Stephan


Markus Eckel

unread,
Apr 4, 2003, 11:40:19 AM4/4/03
to
Ja, ist klar, ich habe halt gedacht, daß es da irgendeine spezielle Funktion
(oder so was) für gibt - hätt' ja sein können...
Sonst noch Anregungen dazu???

Trotzdem vielen Dank erstmal !!!

Markus


"Stephan Kassanke" <ka...@upb.de> schrieb im Newsbeitrag
news:b6kbi3$58a$1...@news.uni-paderborn.de...

Reimund Lebeis

unread,
Apr 4, 2003, 11:43:48 AM4/4/03
to
Hallo Markus,

Das geht schon, indem Du die Werte vom Ausgangsarray in ein Zielarray
schreibst:

Public Function ArraySpiegelnV(Arr As Variant) As Variant
'Spiegelt Arr an der vertikalen Achse
Dim n As Long, m As Long
Dim ArrOut As Variant
ArrOut = Arr 'statt Redim-Anweisung
For n = 1 To UBound(Arr, 1)
For m = 1 To UBound(Arr, 2)
ArrOut(n, m) = Arr(n, UBound(Arr, 2) - m + 1)
Next
Next
ArraySpiegelnV = ArrOut
End Function

Public Sub Test()
Dim ArrIn As Variant, ArrOut As Variant
ArrIn = Sheets("Tabelle1").Range("A1:D3").Value
ArrOut = ArraySpiegelnV(ArrIn)
Sheets("Tabelle1").Range("A4:D6").Value = ArrOut
End Sub

Gruss Reimund


"Markus Eckel" <Markus...@Nexgo.de> schrieb im Newsbeitrag
news:#MJDJ0r#CHA....@TK2MSFTNGP10.phx.gbl...

Markus Eckel

unread,
Apr 4, 2003, 12:22:49 PM4/4/03
to
Ja, klar - aber auch so muß ich jeden meiner ca. 200000 Werte explizit
ansprechen. Das wollte ich gerader vermeiden (siehe Posting zum anderen
Hinweis)

Trotzdem Danke

Markus

"Reimund Lebeis" <re...@onlinehome.de> schrieb im Newsbeitrag
news:dAija.74$Ew.76...@news.odn.de...

Stephan Kassanke

unread,
Apr 7, 2003, 1:11:58 AM4/7/03
to
Markus Eckel wrote:
>> Ja, klar - aber auch so muß ich jeden meiner ca. 200000 Werte
>> explizit ansprechen. Das wollte ich gerader vermeiden (siehe Posting
>> zum anderen Hinweis)
>>
>> Trotzdem Danke
>>
>> Markus

Hallo Markus,

ok, wenn es um so viele Werte geht ist das natürlich ein
Geschwindigkeitsproblem. Mir ist jetzt keine Funktion in Excel (die man auch
ansprechen kann) bekannt, die das erledigt. Da könntest Du höchstens noch
auf eine in C/C++ geschriebene DLL bzw. XLL ausweichen.

Ich war mal so frei google zu bemühen und vielleicht hilft dir der folgende
Link da ja weiter:

Installing your own matrix class
... to pass the nested matrix object to the transpose algorithm ... to open
the built add-in
file MtxAdapt1.xll in the ... press Ctrl+Shift+Enter to create an array
formula ...
www.as-ltd.co.uk/xllplus-online/ howto_matrix_adapter.htm - 15k - Cached -
Similar pages

Gruß,

Stephan


0 new messages