PDA

Vollständige Version anzeigen : Allgemeine Frage zu Excel abstürzen


Mathes32
27.06.2014, 11:32
Guten Tag,

ich bin momentan ein wenig am rumspielen mit Excel VBA, dabei ist mir jetzt schon häufiger passiert das Excel sich bei einfachen "do loop" Schleifen aufhängt (keine Endlosschleife). zb. auch mit Zufallszahlen hier als Beispiel:

Do
ActiveCell.Value = Int((200000000 * Rnd) + 1)
If ActiveCell.Value = 1 Then
Exit Do
End If

Loop


Die Schleife soll einfach so lange eine Zufallszahl in die Zelle schreiben bis sie "1" enthält.
Habe dann mal den Bereich hochgesetzt aus dem die Zahlen kommen können, dann kommen ein paar Zahlen und schon bleibt Excel hängen und nach 10 Minuten warten oder dem Taskmanager steht dann eine 1 in der Zelle.

Also meine allgemeine Frage wie kann man solche Abstürze verhindern? Also das Excel einfach so lange rechnet bis das Ergebnis kommt was man haben möchte. Kann man den Memory entlasten oder sonst was? Verstehe auch nicht warum der Rechenanspruch höher ist nur weil er länger rechnet ist ja trotzdem in jedem Schleifendurchgang die selbe Rechnung, sie wird ja nicht exponentiell länger.



gruß Mathes32

-RaBe-
27.06.2014, 12:05
Hallo Mathes32,

theoretisch sollte dein Beispiel keine Endlosschleife sein. Praktisch sind die Zufallszahlen von Excel aber nicht so zufällig wie du offenbar vermutest, denn ich hatte z.B. komplexe Berechnungen in die ca. 2 Mio. "Zufallszahlen" von Excel eingingen und in einem zweiten Durchlauf wurden exakt die gleichen Resultate ermittelt. Daher habe ich durchaus Zweifel, ob Excel wirklich so kleine Zufallszahlen bereitstellt, dass der Zellwert in deinem Beispiel 1 ergibt. Wenn NEIN, dann hast du praktisch doch eine Endlosschleife!

Gruß
-RaBe-

Mc Santa
27.06.2014, 12:16
Hallo Mathes32,

theoretisch sollte dein Beispiel keine Endlosschleife sein. Praktisch sind die Zufallszahlen von Excel aber nicht so zufällig wie du offenbar vermutest, denn ich hatte z.B. komplexe Berechnungen in die ca. 2 Mio. "Zufallszahlen" von Excel eingingen und in einem zweiten Durchlauf wurden exakt die gleichen Resultate ermittelt. Daher habe ich durchaus Zweifel, ob Excel wirklich so kleine Zufallszahlen bereitstellt, dass der Zellwert in deinem Beispiel 1 ergibt. Wenn NEIN, dann hast du praktisch doch eine Endlosschleife!

Gruß
-RaBe-

Wenn das der Fall ist, dann nutze die Funktion Randomize, wenn du neue Zufallszahlen brauchst.

VG

-RaBe-
27.06.2014, 12:23
Hallo Mc Santa,

danke für den Hinweis, aber der ist schon seit Jahren umgesetzt ;-)))

Ich wollte "nur" dem Anfrager klar machen, das sein theoretisch richtiger Gedanke in der Praxis trotzdem falsch sein kann.

Gruß
-RaBe-

Mathes32
27.06.2014, 12:26
Das mit den zufallszahlen ist mir schon bekannt das bei 2 versuchen quasi immer die selben verläufe auftreten. Aber die 1 kommt aufjedenfall vor.
(Nach dem hängenbleiben steht ja auch eine 1 dann in der Zelle).

Es sollte auch nur als beispiel dienen, ich wollte nur allgemein wissen wie man das hängenbleiben verhindert.

Allerdings hab ich im Internet gelesen das man es als eine "vermeintliche Endlosschleife" ansehen kann, da es ja unter umständen ewig dauern kann bis eine 1 rauskommt.

gruß
Mathes32

Hasso
27.06.2014, 12:44
Hallo Mathes32,

warum schreibst du denn 200-Millionenmal eine Zahl in eine Zelle??? Dass das zu Problemen führt, ist verständlich.

Nimm stattdessenOption Explicit

Sub test()

Dim dblZahl As Double

Do
dblZahl = Int((200000000 * Rnd) + 1)
If dblZahl = 1 Then
ActiveCell = dblZahl
Exit Do
End If

Loop
End Sub
Wobei ich überhaupt keinen Sinn in dem Code sehe. Er schreibt dir am Ende ja immer 1 in die Zelle - egal wie viele Berechnungen vorher durchgeführt wurden.

EarlFred
27.06.2014, 13:20
Hallo Mathes,

Allgemeine Frage zu Excel abstürzen
wie man das hängenbleiben verhindert
Da stürzt nichts ab. Da bleibt nichts hängen. Der Code ist einfach grottenlangsam und muss elendig viel schuften!

Je nach Zufallsreihe kann das Erreichen des Wertes 1 mehrere (zweistellig) Millionen Durchläufe andauern. Das heißt: Mehrere Millionen Mal wird ein Wert in eine Zelle geschrieben und genauso oft wieder ausgelesen. Blattzugriffe dauern eben.

Der Code arbeitet brav nach Deinen Anweisungen. Von Absturz kann keine Rede sein.

Hassos Vorschlag arbeitet hingegen rasend schnell, so dass Du die zigmillionen Rechenschritte kaum bemerkst.

Dennoch ist Vorsicht bei solchen Schleifen geboten. Eine erfüllbare Abbruchbedingung sollte immer enthalten sein - zur Not auch mal einen Zähler mitlaufen lassen, der beim Erreichen eines bestimmten Wertes (angemessen wählen) zum Abbruch führt. Das wäre für mich aber immer der 2. Weg oder der Hosenträger zum Gürtel.

Schau da! Dein Code ist nach schlappen 28 Minuten grad fertig geworden und auf dem Prozessor kann ich Spiegeleier braten ;)

Grüße
EarlFred

Mathes32
27.06.2014, 13:31
Erst mal Danke an alle.
Klar macht der Code quasi kein Sinn, soll er auch garnicht :D
war nur als Beispiel gedacht zur allgemeinen Frage.

@Earl Fred ok abstürzen war wohl Falsch ausgedrückt. Angenommen irgendein Code muss ähnliches leisten, muss man dann damit leben das nichts mehr angezeigt wird? Aber ich denke sowas passiert auch nur bei Spielerreien, bei ernstgemeinten Code ist mir das ja auch noch nicht passiert.
Ist bis jetzt auch nur aufgetreten wenn etwas sehr oft in Zellen geschrieben werden sollte

gruß Mathes32

Edit: dann hatte ich ja noch glück mit den 15 min Laufzeit :D

EarlFred
27.06.2014, 13:33
Hallo Mathes,

wenn MEIN Code etwas ähnliches leisten müsste, würde er Hassos sehr ähnlich sein. Damit würde sich auch die Rückfrage erübrigen.
Und ja: Excel gibt irgendwann keine Lebenszeichen mehr von sich, wenn es zu beschäftigt ist. Das heißt aber nicht, dass es im Feierabend ist.

passiert auch nur bei Spielerreien, bei ernstgemeinten Code ist mir das ja auch noch nicht passiert.
wie kommst Du zu dieser Überzeugung? Solche Fehler können auch in "ernsthaften" Codes vorkommen. Das ist doch unabhängig vom Zweck der Anwendung.

Grüße
EarlFred

Mathes32
27.06.2014, 13:38
@EarlFred , das war darauf bezogen , das man nur bei spielereien die rechenschritte sehen möchte, sonst interessiert einen ja nur das ergebnis und nicht das durchlaufen jedes wertes. zb. excelfelder mit zufallsfarben in einer dauerschleife füllen,dann kann man sich das Farbspektakel angucken :D

EarlFred
27.06.2014, 13:42
Hallo Mathes,

solche Endlosschleifen können grundsätzlich vorkommen, wenn man sie nicht erkennt. Das ist doch nicht nur auf dieses Beispiel bezogen.

Komm, lass gut sein.

Grüße
EarlFred