Cesarettin bemerkte, dass die MOD-Arbeitsblattfunktion kein Ergebnis erzeugen kann, wenn die ausgewertete Zahl 268.435.456 oder größer und der Divisor 2 ist. Wenn die Zahl kleiner als diese ist, gibt es kein Problem. Wenn die Funktion beispielsweise MOD (268435455, 2) ist, gibt es kein Problem. Er fragt sich, ob es eine Möglichkeit gibt, die MOD-Funktion mit größeren Zahlen und einem Teiler von 2 zu verwenden.

Das Problem ist tatsächlich größer als das, was Cesarettin vorschlägt. Microsoft kennt dieses Problem. Es scheint auf Probleme mit den von MOD verwendeten internen Formeln zurückzuführen zu sein. Weitere Informationen zum Fehler finden Sie hier:

http://support.microsoft.com/kb/119083

Grundsätzlich gibt die MOD-Funktion einen Fehler zurück, wenn der Divisor (das zweite Argument in der MOD-Funktion), multipliziert mit 134.217.728, kleiner oder gleich der zu bewertenden Zahl ist (das erste Argument in der MOD-Funktion).

Somit tritt das Problem auf, wenn die zu bewertende Zahl 268.435.456 ist und der Divisor 2 ist, die zu bewertende Zahl 402.653.184 ist und der Divisor 3 ist, die zu bewertende Zahl 536.870.912 ist und der Divisor 4 ist usw.

Die von Microsoft vorgeschlagene Lösung besteht darin, die MOD-Funktion einfach nicht zu verwenden und sich stattdessen auf die folgende Formel zu verlassen:

=number-(INT(number/divisor)*divisor)

Dies ist jedoch nicht die einzige Lösung. Es gibt auch andere formelhafte Ansätze, die Sie verwenden können. Zum Beispiel:

=MOD(MOD(number,134217728*divisor),divisor)

Dies löst größere Zahlen, die viel größer als der Grenzwert für MOD sind, trifft jedoch theoretisch auf dasselbe Problem, wenn die ausgewertete Zahl 134.217.728134.217.728 Teiler erreicht. Für die meisten Anwendungen ist diese Grenze groß genug, dass sie niemals erreicht wird.

Wenn Sie nur den Modul einer durch 2 geteilten Zahl ermitteln müssen, können Sie einen Scheck auf folgende Weise in Ihre Formel einfügen:

=MOD(IF(A1>=268435456,A1-268435456,A1),2)

Dies prüft, ob die auszuwertende Zahl (in diesem Fall in Zelle A1) größer als der Grenzwert ist, und subtrahiert den Grenzwert von der Zahl, bevor der Modul berechnet wird. Sie können das MOD-Limit auch effektiv entfernen, indem Sie die folgende Formel verwenden:

=MOD(MOD(number,2^16),2))

Dies bringt die große Zahl Modulo 2 zur 16. Potenz und dann den resultierenden Wert Modulo 2. Wenn die Zahlen als binär angesehen werden, ist es leicht zu sehen, was passiert. MOD (Largenum, 2 ^ 16) lässt nur alle Bits links von der 16. Binärziffer fallen. Für Modulo 2 ist ohnehin nur die am weitesten rechts stehende Ziffer erforderlich, um das Ergebnis zu bestimmen, sodass die verworfenen Bits das Ergebnis unabhängig vom Wert niemals beeinflussen.

Natürlich können Sie einfach Ihre eigene MOD-Funktion in VBA erstellen und in Ihren Formeln anstelle der integrierten MOD-Funktion verwenden.

Function DblMod(Dividend, Divisor)

' Declare two double precision variables     Dim D1 As Double     Dim D2 As Double

' Copy function arguments to local variables     D1 = Dividend     D2 = Divisor

DblMod = D1 Mod D2 End Function

Mit der Funktion können Sie einfach zwei Argumente an die VBA-Funktion übergeben. Es basiert dann auf der VBA-Mod-Funktion, die nicht die gleiche Einschränkung wie die MOD-Arbeitsblattfunktion aufweist.

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (3302) gilt für Microsoft Excel 97, 2000, 2002 und 2003.