Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Makro, große Zahlen | Herbers Excel-Forum


Betrifft: Makro, große Zahlen von: Alifa
Geschrieben am: 23.10.2008 10:45:59

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

  

Betrifft: AW: Makro, große Zahlen von: JogyB
Geschrieben am: 23.10.2008 11:15:49

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


  

Betrifft: AW: Makro, große Zahlen von: fcs
Geschrieben am: 23.10.2008 12:05:32

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




Beiträge aus den Excel-Beispielen zum Thema "Makro, große Zahlen"