Cześć,
tworzę symulację zakładów bukmacherskich i napisałem kod dla jednego z systemów stawkowania. Jest tutaj sporo liczenia, ponad 400 mln zakładów do przesymulowania. Sprawdzając kod na mniejszych liczbach wszystko działa jak należy. Próbując odpalić kod na docelowych wartościach wyskakuje błąd '1004'. Zmieniając wartości metodą prób i błędów stwierdzam, że dzieje się to zawsze po takiej samej ilości obliczeń (przejście najbardziej wewnętrznej pętli jakieś 7-9 mln razy). Kompletnie nie wiem dlaczego, bo jedynie nadpisuję wartości zmiennych.
Bardzo proszę o poradę. ;)

Option Explicit

Public Const ilosc_zakladow As Byte = 250
Public Const ilosc_symulacji As Integer = 10000
Public Const kapital_poczatkowy As Byte = 100
Public Const odchylenie_w_kurs As Single = 0.05
Public Const odchylenie_w_edge As Single = 0.1

Public Type zaklad
    kurs As Single
    edge As Single
    prawdopodobienstwo As Single
    wynik As Boolean
    stawka As Single
    zwrot As Single
    budzet_po_zakladzie As Single
End Type


Sub plaska_stawka()

Application.ScreenUpdating = False


Cells(1, 1).Value = "edge"
Cells(1, 2).Value = "kurs"
Cells(1, 3).Value = "stawka"
Cells(1, 4).Value = "średni bankroll"
Cells(1, 5).Value = "odchylenie bankrolla"
Cells(1, 6).Value = "prawdopodobieństwo bankructwa"
Cells(1, 7).Value = "prawdopodobieństwo nie odniesienia zysku"

Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
Dim m As Integer
Dim n As Integer
Dim o As Integer
Dim wyniki(1 To ilosc_symulacji) As Single
Dim wyniki3(1 To ilosc_symulacji) As Byte ' prawdpodobienstwo bankructwa
Dim wyniki4(1 To ilosc_symulacji) As Byte ' prawdpodobienstwo nie odniesienia zysku


Dim wyniki5(1 To ilosc_zakladow) As Single 'do zerowania wyniku, jeśli wykorzystało się budżet



Dim docelowy_edge(1 To 7) As Single
docelowy_edge(1) = 0.9
docelowy_edge(2) = 0.95
docelowy_edge(3) = 1
docelowy_edge(4) = 1.05
docelowy_edge(5) = 1.1
docelowy_edge(6) = 1.15
docelowy_edge(7) = 1.2

n = n + 1


Dim docelowy_kurs(1 To 5) As Single
docelowy_kurs(1) = 1.67
docelowy_kurs(2) = 2
docelowy_kurs(3) = 2.5
docelowy_kurs(4) = 3.33
docelowy_kurs(5) = 5


Dim ustalona_stawka(1 To 5) As Byte
ustalona_stawka(1) = 1
ustalona_stawka(2) = 2
ustalona_stawka(3) = 3
ustalona_stawka(4) = 5
ustalona_stawka(5) = 10

Dim plaska_stawka_tablica(1 To ilosc_zakladow) As zaklad
For m = 1 To 5
For k = 1 To 7
For l = 1 To 5
For j = 1 To ilosc_symulacji
    For i = 1 To ilosc_zakladow
        With plaska_stawka_tablica(i)
            .kurs = Round(WorksheetFunction.Norm_Inv(Rnd(), docelowy_kurs(l), odchylenie_w_kurs), 2)
            .edge = WorksheetFunction.Norm_Inv(Rnd(), docelowy_edge(k), odchylenie_w_edge)
            .prawdopodobienstwo = plaska_stawka_tablica(i).edge / plaska_stawka_tablica(i).kurs
            .wynik = Rnd() < plaska_stawka_tablica(i).prawdopodobienstwo
            .stawka = ustalona_stawka(m)
            .zwrot = Round(Abs(plaska_stawka_tablica(i).kurs * plaska_stawka_tablica(i).stawka * plaska_stawka_tablica(i).wynik), 2)
        End With
    Next i

    plaska_stawka_tablica(1).budzet_po_zakladzie = kapital_poczatkowy + plaska_stawka_tablica(1).zwrot - plaska_stawka_tablica(1).stawka

    For i = 2 To ilosc_zakladow
        plaska_stawka_tablica(i).budzet_po_zakladzie = plaska_stawka_tablica(i - 1).budzet_po_zakladzie _
                    + plaska_stawka_tablica(i).zwrot _
                    - plaska_stawka_tablica(i).stawka
    Next i
    For o = 1 To ilosc_zakladow
        wyniki5(o) = plaska_stawka_tablica(o).budzet_po_zakladzie
    Next o
    wyniki(j) = plaska_stawka_tablica(ilosc_zakladow).budzet_po_zakladzie
    If Application.WorksheetFunction.Min(wyniki5) <= 0 Then wyniki(j) = 0
Next j

'do wydrukowania symulacji
'For i = 1 To 250
'Cells(i + 1, 2).Value = i
'Cells(i + 1, 3).Value = plaska_stawka_tablica(i).kurs
'Cells(i + 1, 4).Value = plaska_stawka_tablica(i).edge
'Cells(i + 1, 5).Value = plaska_stawka_tablica(i).prawdopodobienstwo
'Cells(i + 1, 6).Value = plaska_stawka_tablica(i).wynik
'Cells(i + 1, 7).Value = plaska_stawka_tablica(i).stawka
'Cells(i + 1, 8).Value = plaska_stawka_tablica(i).zwrot
'Cells(i + 1, 9).Value = plaska_stawka_tablica(i).budzet_po_zakladzie
'Next i

For i = 1 To ilosc_symulacji
    If wyniki(i) = 0 Then wyniki3(i) = 1 Else: wyniki3(i) = 0
    If wyniki(i) <= kapital_poczatkowy Then wyniki4(i) = 1 Else: wyniki4(i) = 0
Next i


Cells(n + 1, 1).Value = docelowy_edge(k)
Cells(n + 1, 2).Value = docelowy_kurs(l)
Cells(n + 1, 3).Value = ustalona_stawka(m)
Cells(n + 1, 4).Value = Application.WorksheetFunction.Average(wyniki)
Cells(n + 1, 5).Value = Application.WorksheetFunction.StDev(wyniki)
Cells(n + 1, 6).Value = Application.WorksheetFunction.Average(wyniki3)
Cells(n + 1, 7).Value = Application.WorksheetFunction.Average(wyniki4)

n = n + 1
Next l
Next k
Next m

End Sub