Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1016to1020
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

Makro, große Zahlen

Makro, große Zahlen
23.10.2008 10:45:59
Alifa
Hallo Forum,
habe mich lange zurückgehalten mit Fragen. Ich habe hier ein Makro, das ständig "Überlauf" meckert.

Sub EsIstZumVerzweifeln()
Dim a%, b%, c As Variant, z%, t!, d As Variant
t = Timer
For a = 100 To 360
For b = 100 To 360
c = CStr(CDec(a * (a + 1)) * (b * (b + 1)))
If d = 5 & Mid(c, 2, 1) & Mid(c, 3, 1) & Mid(c, 4, 1) & Mid(c, 5, 1) & Mid(c, 6, 1) _
& Mid(c, 7, 1) & Mid(c, 8, 1) & Mid(c, 9, 1) & 4 And a  b Then
Cells(z + 1, 1) = a
Cells(z + 1, 2) = b
Cells(z + 1, 3) = d
z = z + 1
End If
Next
Next
MsgBox "fertig in" & Round(Timer - t, 2) & " Sek"
End Sub


Es soll eine 10-stellige Zahl gefunden werden, die mit 5 beginnt....
Danke im Voraus!
Gruß, Alifa

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro, große Zahlen
23.10.2008 11:15:00
JogyB
Du hast a und b als Integer deklariert, daher rechnet VBA hier in Integer.
Das Makro steigt bei a = 100 und b = 181 aus, da 181 * 182 = 32945 > 32786 (180 * 181 = 32580 geht noch).
Deklariere beide als Long und es funktioniert.
Gruss, Jogy
AW: Makro, große Zahlen
23.10.2008 12:05:00
fcs
Hallo Alifa,
durch die Verwendung des Zahlentyps Integer für die Variablen a und b wird bei der Multiplikation in den Klammern ein Zahlenüberlauf verursacht, da der Zahlentyp beibehalten wird.
Andere Variablendeklaration und setzen der Klammern sollte funktionieren.

Sub EsIstZumVerzweifeln2()
Dim a&, b&, c As Variant, z&, t!, d As Variant
On Error GoTo Fehler
t = Timer
For a = 100 To 360
For b = 100 To 360
c = CStr(CDec(a * (a + 1)) * (b * (b + 1)))
If c = 5 & Mid(c, 2, 1) & Mid(c, 3, 1) & Mid(c, 4, 1) & Mid(c, 5, 1) & Mid(c, 6, 1) _
& Mid(c, 7, 1) & Mid(c, 8, 1) & Mid(c, 9, 1) & 4 And a  b Then
Cells(z + 1, 1) = a
Cells(z + 1, 2) = b
Cells(z + 1, 3) = c
z = z + 1
End If
Next
Next
MsgBox "fertig in " & Round(Timer - t, 2) & " Sek"
Fehler:
If Err.Number  0 Then
MsgBox "Zahl c : " & c & vbLf & "Fehler Nr.: " & Err.Number & vbLf & Err.Description
End If
End Sub


Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige