Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
664to668
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
664to668
664to668
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

2-dim Feld erweitern .... nur mit Transponieren?

2-dim Feld erweitern .... nur mit Transponieren?
15.09.2005 13:58:34
Philipp
Hallo Forum,
ich kann mir zwar nicht vorstellen, dass mein Problem noch nie beantwortet wurde, konnte aber leider nichts Entsprechendes finden. Sorry daher, falls ich das zum x-ten Mal anspreche.
Ich habe folgendes Problem:
Ich möchte ein 2-dimensionales Feld, das bereits dimensioniert und mit Werten gefüllt wurde in der ersten Dimension erweitern. Also z.B. sowas:

Sub testdim()
Dim testfeld() As String
ReDim Preserve testfeld(1, 1)
testfeld(0, 0) = "nullnull"
testfeld(0, 1) = "nulleins"
testfeld(1, 0) = "einsnull"
testfeld(1, 1) = "einseins"
ReDim Preserve testfeld(2, 1)                      <--- hier gibts den Fehler
testfeld(2, 0) = "zweinull"
testfeld(2, 1) = "zweieins"
For i = 0 To UBound(testfeld, 1)
For j = 0 To UBound(testfeld, 2)
MsgBox (testfeld(i, j))
Next j
Next i
End Sub

Jetzt bekomme ich jedesmal an der markierten Stelle die Fehlermeldung "Index außerhalb des gültigen Bereichs". Ich habe bereits herausgefunden, dass es wohl funktioniert, wenn man das Feld transponiert.
- Ist das die einzige Möglichkeit?
Falls ja, wie funktioniert das?
Kann/Muss ich das Feld transponieren, dann die 2te Dimension erweitern und wieder zurücktransponieren? Wie sähe ein Methode dazu aus?
Sorry, dass es soviele Fragen sind, aber Transponieren ist völliges Neuland für mich. Ich hoffe ihr könnt mir da helfen.
Vielen Dank schonmal!
Gruß,
Philipp

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 2-dim Feld erweitern .... nur mit Transponieren?
15.09.2005 14:24:33
Volker
Hallo Philipp,
gestern war hier ne ähnliche Geschichte, da wollte einer die Anzahl der Dimensionen erhöhen.
Schau mal unter REDIM in der Hilfe nach. ZITAT:
"Die Anzahl der Dimensionen kann nicht verändert werden. Mit dem Schlüsselwort Preserve können Sie nur die Größe der letzten Datenfelddimension ändern. Wenn das Datenfeld zum Beispiel nur eine Dimension hat, können Sie die Größe dieser Dimension ändern, weil es die letzte und einzige Dimension ist. Hat das Datenfeld jedoch mindestens zwei Dimensionen, so können Sie lediglich die Größe der letzten Dimension ändern, wenn der Inhalt des Datenfeldes erhalten bleiben soll. Das folgende Beispiel verdeutlicht, wie Sie die letzte Dimension eines dynamischen Datenfeldes vergrößern können, ohne bereits bestehende Daten im Datenfeld zu löschen."
Du mußt dir wohl oder übel ein Hilfsfeld einrichten, wo die Daten zwischenspeicherst,
oder du legst das Feld gleich groß genug an
Gruß
Volker
Anzeige
AW: 2-dim Feld erweitern .... nur mit Transponieren?
15.09.2005 14:27:15
MichaV
Hallo Phillip,
es geht in VB wirklich nur so.

Option Explicit
Option Base 1
Private Sub CommandButton1_Click()
Dim Arr()
Dim TmpArr()
Dim x%
ReDim Arr(1, 4)
'1. Dimension um x erweiten
x = 1
TmpArr = Application.WorksheetFunction.Transpose(Arr)
Erase Arr
ReDim Preserve TmpArr(UBound(TmpArr, 1), UBound(TmpArr, 2) + x)
Arr = Application.WorksheetFunction.Transpose(TmpArr)
Erase TempArr 'nur zur besseren Übersicht
'fertig
Debug.Print UBound(Arr, 1), UBound(Arr, 2)
End Sub

http://www.online-excel.de/fom/fo_read.php?f=1&bzh=773&h=773
Gruss- Micha
PS: Rückmeldung wäre nett.
Anzeige
funzt leider noch nicht ganz...
15.09.2005 14:55:24
Philipp
Hallo ihr 2,
vielen dank schonmal für eure Antworten. Ich war gerade auf der Suche nach besagtem Foreneintrag, als die 2te Lösung von Mich eintrudelte.
Scheint ganz logisch zu sein und überraschenderweise auch recht simpel, nur leider funktioniert es nicht ganz. Ich habe es zunächst an mein Beispiel angepasst, als das nicht lief dann aber mal deinen Original-Code getestet und der bringt auch jedesmal in der Zeile
"ReDim Preserve TmpArr(UBound(TmpArr, 1), UBound(TmpArr, 2) + x)"
den Fehler "Index außerhalb des gültigen Bereichs".
Außerdem ist der Ubound(TmpArr, 1) = 5 und der UBound(TmpArr, 2)= 2. Sollte das nicht 4 und 1 sein? Den Quellcode habe ich soweit verstanden, mit der Ausnahme "dim x%". Was bedeutet das denn? Wäre spitze, wenn du nochmal kurz Rückmeldung gibst.
Vielen Dank.
Gruß,
Philip
Anzeige
musst schon richtig abtippeln ;o)
15.09.2005 22:26:03
MichaV
Hallo,
Transpose erzeugt immer 1- Basierte Datenfelder. Der erste Index ist also nicht 0, sondern 1. Prüfe mal in Deinem Makro die untere Grenze mit LBound vor und nach dem Transponieren. (Du hast das auch gesehen- die Obergrenze war Dir um 1 zu hoch ;o))
Um diesen Effekt auszuschließen habe ich ganz oben Option Base 1 geschrieben. Das hast Du wohl übersehen. Dieser Schalter bewirkt, daß Arrays nicht mit 0, sondern mit 1 anfangen. Dann kannst Du Transponieren bis zum Umfallen.
Dim x% heißt nix anderes als Dim x as Integer.
Gruß- Micha
PS: Rückmeldung wäre nett.
Anzeige
kleine Anmerkung
15.09.2005 23:27:10
MichaV
"es geht in VB wirklich nur so."
...das ist natürlich Quatsch. In VB gehts so grade nicht, weil man da keine Excel- Worksheetfunctions hat.
Was ich meinte war: So gehts mit Transponieren.
Weitere Möglichkeiten stehen im Link.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige