Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
904to908
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
904to908
904to908
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Mal wieder: Array sortieren

Mal wieder: Array sortieren
13.09.2007 15:38:00
Peter
Hallo zusammen,
mal wieder treibt mich das Sortieren eines zweidimensionalen Arrays in den Haarausfall ...
Für das Sortieren nutze ich den bekannten Algorithmus von Nepomuk (www.online-excel.de/excel/singsel_vba.php?f=97).
Dort wird vorausgesetzt, daß die Indizierung des zu sortierenden Arrays bei 1 beginnt
(Dim vntArray(1 To 10000, 1 To 30) As Variant).
Da ich mein zu sortierendes Array nicht von Hand befülle, sondern über die COM-Schnittstelle aus einer externen Anwendung erhalte, habe ich auf die Array-Indizierung keinen Einfluss. Diese externe Anwendung beginnt mit Zeilenindex=0 und Spaltenindex=0.
Wenn ich dann ein derart gefülltes Array sortieren will, bekomme ich einen Laufzeitfehler 9: "Index außerhalb des gültigen Breiches".
Habt Ihr eine Idee, wie ich diesen Fehler durch eine Quellcode-Anpassung umgehen kann.
Ungern würde ich den Umweg übder das Umkopieren meines Eingangs-Arrays in ein neues Array mit Indexbeginn bei 1 gehen ...
Vielen Dank für Eure Hilfe und viele Grüße
Peter

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mal wieder: Array sortieren
13.09.2007 15:45:00
Ramses
Hallo
Setz mal an den Anfang des Moduls, z.B. nach "Option Explicit" die Anweisung "Option Base 1"
Damit beginnen nun ALLE !!! Arrays bei 1 anstelle von 0
Gruss Rainer

AW: Mal wieder: Array sortieren
13.09.2007 15:55:50
Peter
Hallo Rainer,
das werd' ich gleich mal ausprobieren.
Vielen Dank für Deine Info - ich melde mich
Gruß
Peter

AW: Mal wieder: Array sortieren
13.09.2007 16:00:27
Peter
Hallo Rainer,
hier ist gleich die zweite Rückmeldung.
Wenn ich Deinen Weg über "Option Base 1" gehe, dann haut mir Excel beim Einlesen der Matrix aus der externen Anwendung auf die Finger mit der Meldung "Laufzeitfehler 10 - Datenfeld ist unveränderlich oder momentan gesperrt".
Das ist sicherlich kein Problem von Excel, sondern von der externen Ansteuerung.
Vielleicht ist ja die (von mir ursprünglich ungeliebte) Idee von Rudi mit dem Umkopieren doch die beste ...
Vielen Dank erneut für Deine Hilfe
Gruß
Peter

Anzeige
AW: Mal wieder: Array sortieren
13.09.2007 15:46:00
Rudi
Hallo,

Dort wird vorausgesetzt, daß die Indizierung des zu sortierenden Arrays bei 1 beginnt


Das ist falsch. Nepumuk arbeitet mit LBound() und UBound(). Damit ist es unerheblich, wo das Array beginnt und wo es endet.
Der Fehler muss woanders sein.


Ungern würde ich den Umweg übder das Umkopieren meines Eingangs-Arrays in ein neues Array mit Indexbeginn bei 1 gehen ...


Das ist allenfalls ein programmtechnischer Aufwand. Der Zeitbedarf dürfte sich im Millisekundenbereich befinden.
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Anzeige
AW: Mal wieder: Array sortieren
13.09.2007 15:55:14
Peter
Hallo Rudi,
in der - auf seiner Seite benannten Routine - prcTest() definiert er das zu sortierende Feld so:
Dim vntArray(1 To 10000, 1 To 30) As Variant
Wenn anstelle dieser Definition die folgende steht: Dim vntArray(0 To 9999, 0 To 29) As Variant ... dann knallt später die Sortierroutine.
Entgegen meines als ungern beschriebenen Weges werde ich das mit dam Umkopieren mal ausprobieren - und auch den Weg von Reiner mit "Option Base 1".
Vielen Dank für Deine Hilfe
Peter

AW: Mal wieder: Array sortieren
13.09.2007 16:03:00
Rudi
Hallo,
FALSCH!!!!!
Glaube mir! Ich arbeite ständig damit.
Wenn du nur die Dim änderst, knallt es hier:

For lngRow = 1 To 10000
For intColumn = 1 To 30
vntArray(lngRow, intColumn) = Fix((5 * Rnd) + 1)
Next
Next


Dort bekommst du schon den Index außerhalb....
Mit


For lngRow = 0 To 9999
For intColumn = 0 To 29
vntArray(lngRow, intColumn) = Fix((5 * Rnd) + 1)
Next
Next


läuft es anstandslos durch.
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Anzeige
AW: Mal wieder: Array sortieren
13.09.2007 16:25:21
Peter
Hallo Rudi,
bei fünf Ausrufezeichen komme ich jetzt ins Schwitzen ... und zweifle stark an mir.
https://www.herber.de/bbs/user/46010.xls
In der hochgeladenen Mappe findest Du zwei Module. In Modul "M42_SortTest" stehen zwei Aufrufe - einmal mit der Dimensionierung beginnend bei 1 und einmal beginnend bei 0.
Wenn ich das jeweils starte, dann läuft die erste Routine durch - die zweite nicht.
Da ich Deine Fähigkeiten hier schon oft genießen konnte findest Du sicher den blinden Fleck bei mir und in meiner Programmierung.
Vielen Dank für Deine Zeit und Deine Hilfe
Gruß
Peter

Anzeige
AW: Mal wieder: Array sortieren
13.09.2007 17:27:50
Rudi
Hallo,
ich muss sagen: Kommando zurück!
Das zu sortierende Array muss tatsächlich 1-basiert sein.
Das ist mir bisher noch gar nicht aufgefallen, da ich in der Regel Arrays aus Bereichen fülle und dann sind sie immer 1-basiert.
Ein Array auf Basis 0 könnte man mit der Routine auch nicht nach der ersten Spalte sortieren, da diese den Index 0 hat. 0 wird in vntSortArray aber ignoriert (If vntSortArray(intIndex) 0 Then). vntSortArray=Array(1) sortiert nach der 2. Spakte.
Dir bleibt also nichts anderes, als das Array 1x umzuschaufeln. In Nepumuks Beispiel dauert das für die 300.000 Werte gerade mal 1/10 Sekunde.
So hab ich auch noch was gelernt.
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Anzeige
AW: Mal wieder: Array sortieren
13.09.2007 17:37:43
Peter
Hallo Rudi,
die Routine zum Array-Umschaufeln hab' ich gerade gebastelt ...
Das geht schnell und tut mir dennoch irgendwie in der Seele weh. Ich werd' sie hinter einer Funktion verstecken. Dann fällt's nicht so auf :-)
Vielen Dank für Deine Beschäftigung mit meiner Frage und viele Grüße
Peter

AW: Mal wieder: Array sortieren
13.09.2007 20:23:52
Rudi
Hallo,
ich für mein Teil werde die Umschaufelei in meinen 'Rohling' der Sortierroutine integrieren. Dann brauch ich nicht mehr drauf zu achten.
Gruß
Rudi
Eine Kuh mach muh, viele Kühe machen Mühe.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige