Ich möchte Daten von einem Datenfeld in ein anderes "umsortieren" und dabei Werte tilgen, wenn sie aufeinanderfolgend die selbe Ausprägung haben.
Die Werte stehen der Variablen OrgMatrix. Durch die Redim Anweisung erhält die Matrix die Form: Zeilen, Spalten, wobei die Zeilen von 1 bis 3973 laufen, und insgesammt 2 Spalten vorhanden sind.
In der Spalte 1 steht eine fortlaufende Zahl, also 1, 2, ... und in der Spalte 2 steht jeweils eine andere Zahl mit 2 Nachkommastellen.
Ich definiere nun eine zweite Matrix Namens "TilgMatrix", die zunächst die selbe Dimension wie die erste erhält.
Ich definiere einen Algorithmus, der die Werte in der zweiten Spalte (der Orginalmatrix) miteinander vergleicht, und falls diese ungleich sind, die Werte in die neue Matrix schreibt.
Von einem Test auf einem Excelsheet weiß ich, daß durch den Vorgang insgesamt 151 Zeilen "getilgt", d.h. nicht in die zweite Matrix geschrieben werden.
Der Algorithmus läuft sauber durch und anhand der Indices weiß ich, daß er auch die 151 Fälle findet.
Abschließend möchte ich nun mittels der ReDim Preserve - Anweisung die Größe der neuen Matrix neu festsetzen, da sie bislang der Größe der OrgMatrix entspricht. Die Neue Matrix soll auch 2 Dimensionen enthalten, aber die Zeilenanzahl soll nun von 1 bis "Lcounter" laufen, wobei LCounter im Test auch den richtigen Wert annimmt, nämlich (3973-151 = 3822). Zudem sollen natürlich die Daten erhalten bleiben.
Mit der ReDim Preserve Anweisung erhalte ich jedoch den Fehler "Index außerhalb des gültigen Bereichs)
Was muß ich ändern???
Hier Teile des Programms:
Option Base 1
Sub TUP()
Dim OrgMatrix() As Single
Dim TilgMatrix() As Single
Dim RowCount, LCounter, i, j As Integer
...
ReDim OrgMatrix(RowCount, 2) As Single
...
' zweite Matrix definieren und Zeile 1 füllen
ReDim TilgMatrix(RowCount, 2) As Single
TilgMatrix(1, 1) = OrgMatrix(1, 1)
TilgMatrix(1, 2) = OrgMatrix(1, 2)
LCounter = 1
' Werte sortieren und "tilgen"
For i = 2 To RowCount
If TilgMatrix(LCounter, 2) = OrgMatrix(i, 2) Then
' mache nichts
Else
LCounter = LCounter + 1
TilgMatrix(LCounter, 1) = OrgMatrix(i, 1)
TilgMatrix(LCounter, 2) = OrgMatrix(i, 2)
End If
Next
' Nun neue Matrix wird auf die durch "LCounter" gemessene Länge reduzieren
ReDim Preserve TilgMatrix(1 To LCounter, 2) As Single
' => hier entsteht der Fehler
End Sub