Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1664to1668
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 befüllen

Array befüllen
12.01.2019 16:47:12
Steve
Hallo
Ich versuche enen Code anzupassen, der Permutationen mit Wiederholung berechnet.
der code funktioniert fantastisch und extrem schnell, viel schneller als ein von mir programmierter Code.
Leider läuft bei 11 feldern ein Index über und ich verstehe leider nicht, welcher und warum. nach allem, was ich über Limitationen gehört habe sollte das noch gehen.
wenn ich die Zeilen-Variable lrow ausgebe , so ist bei ca 2 490 000 schluss.
Könnte Ihr mir sagen, welcher Index überläuft und warum?

Dim BufferPtr As Long
Dim lrow As Long
Option Explicit
' PGC - AUG 2016
' Permutation with repetition and with restrictions.
' A set of distinguishable objects is given, as well and the number of times _
each one is repeated
' Ex. Permutations with repetition with 2 "a"'s, 1 "b" and 2 "c"'s
' Input in a nx2 table, first columns the elements and second column how many _
times they repeat
Sub PermMultRep()
Dim i%, j%, n%
Dim VarMax, VarQuot As Long
Dim vIn As Variant, vPerms As Variant, vPerm As Variant
lrow = 1
vIn = Range("A2", Range("A2").End(xlDown)).Resize(, 2).Value ' table of elements and number of  _
times they repeat
ReDim vPerm(1 To Application.Sum(Application.Index(vIn, 0, 2))) ' array for the current  _
permutation
ReDim vPerms(1 To Application.MultiNomial(Application.Index(vIn, 0, 2)), 1 To UBound(vPerm)) ' _
array to store all permutations
PermMultRep1 vIn, vPerm, vPerms, 1, lrow ' calculate all the permutations into the vPerms array
Debug.Print "testpunkt"
Columns("D").Resize(, UBound(vPerm) + 1).Clear ' clears columns for the output
Debug.Print UBound(vPerms, 1)
Debug.Print UBound(vPerms, 2)
Range("D2").Resize(UBound(vPerms, 1), UBound(vPerms, 2)).Value = vPerms ' writes _ the  output  _
in E2, down and across
If UBound(vPerms, 1)  0 Then
vPerm(lInd) = vIn(j, 1)
If lInd = UBound(vPerm) Then
If lrow Mod 10000 = 0 Then Debug.Print lrow
lrow = lrow + 1
For lCol = 1 To UBound(vPerm)
vPerms(lrow, lCol) = vPerm(lCol)
Next lCol
Else
v1 = vIn
v1(j, 2) = v1(j, 2) - 1
PermMultRep1 v1, vPerm, vPerms, lInd + 1, lrow
End If
End If
Next j
End Sub
die von mir benötigte ausgabe bezieht sich auf die Eingabe
A 4
B 2
C 2
D 2
E 1
F 1
G 1
wofür es knapp 6,5Millionen Möglichkeiten geben sollte.

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array befüllen
12.01.2019 16:54:56
Werner
Hallo Steve
Dim(ensioniere) mal als Long
Dim i%, j%, n%
Dim i As Long, j As Long, n As Long
Gruß Werner
AW: Array befüllen
12.01.2019 16:57:45
Steve
Hallo Werner
Das habe ich schon versucht. es halt leider nichts genutzt.
AW: Array befüllen
12.01.2019 17:26:40
onur
Wo GENAU kommt die Fehlermeldung?
AW: Array befüllen
12.01.2019 19:30:35
Steve
Ich denke innerhalb der zweiten, rekursiven sub, in Regel bei lrow ca 2490000
Genauer kriege ich es leider nicht raus.
Verwendete Eingabe ab A1:
A 4
B 2
C 2
D 2
E 1
F 1
G 1
Merkwürdigerweise - wenn ich die Eingabe auf insgesamt 11 oder 12 Elemente ( aktuell 13) reduzierte, schon bei 200000..., also einem knappen 10tel...
Jahr schon alles mögliche versucht...
Unter 10 Elementen funktioniert alle problemlos
Anzeige
AW: Array befüllen
12.01.2019 19:30:36
Steve
Ich denke innerhalb der zweiten, rekursiven sub, in Regel bei lrow ca 2490000
Genauer kriege ich es leider nicht raus.
Verwendete Eingabe ab A1:
A 4
B 2
C 2
D 2
E 1
F 1
G 1
Merkwürdigerweise - wenn ich die Eingabe auf insgesamt 11 oder 12 Elemente ( aktuell 13) reduzierte, schon bei 200000..., also einem knappen 10tel...
Jahr schon alles mögliche versucht...
Unter 10 Elementen funktioniert alle problemlos
AW: Array befüllen
12.01.2019 19:59:53
onur
Wieso "Ich denke" ?
Der Debugger zeigt doch immer genau die Stelle, wo der Fehler auftaucht.
AW: Array befüllen
12.01.2019 21:38:53
Steve
Irgendwie nicht. Ich weiß nicht warum, aber es ist nichts Gelb hinterlegt und die Zeilennummer ist immer dieselbe wie beim statt.
Ich denke es liegt daran, dass der Sreen zwischendurch quasi abschaltet...Hintergrund weiß wird
Anzeige
AW: Array befüllen
12.01.2019 21:44:23
onur
Du musst, wenn der Fehler auftaucht, auf "Debuggen" klicken.
Wenn das nicht hilft - Gehe mal auf VBA-Editor/Extras/Optionen/Allgemein und aktiviere "Unterbrechen bei jedem Fehler".
Dann lass dann den Code nochmal laufen.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige