Cesarettin ha notato che la funzione del foglio di lavoro MOD non può produrre un risultato quando il numero viene valutato è 268.435.456 o maggiore e il divisore è 2. Se il numero è inferiore a questo, non c’è problema. Ad esempio, se la funzione è MOD (268435455, 2) non ci sono problemi. Si chiede se esiste un modo per utilizzare la funzione MOD con numeri più grandi e un divisore di 2?

Il problema è effettivamente più grande di quanto propone Cesarettin. Microsoft conosce questo problema; sembra derivare da problemi con le formule interne utilizzate da MOD. Puoi trovare maggiori informazioni sull’errore qui:

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

Fondamentalmente, la funzione MOD restituisce un errore se il divisore (il secondo argomento nella funzione MOD), moltiplicato per 134,217,728, è minore o uguale al numero da valutare (il primo argomento nella funzione MOD).

Pertanto, il problema si verifica quando il numero da valutare è 268.435.456 e il divisore è 2, il numero da valutare è 402.653.184 e il divisore è 3, il numero da valutare è 536.870.912 e il divisore è 4, ecc.

La soluzione suggerita da Microsoft è semplicemente non utilizzare la funzione MOD e affidarsi invece alla seguente formula:

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

Tuttavia, questa non è l’unica soluzione. Ci sono anche altri approcci formulari che puoi usare. Ad esempio:

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

Questo risolverà per numeri più grandi molto più grandi del limite per MOD, ma teoricamente colpirà lo stesso problema quando il numero valutato raggiungerà 134,217,728134,217,728 divisore. Per la maggior parte degli usi, questo limite è abbastanza grande da non essere mai raggiunto.

Se hai solo bisogno di trovare il modulo di un numero diviso per 2, puoi inserire un segno di spunta nella tua formula nel modo seguente:

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

Questo controlla se il numero da valutare (in questo caso, nella cella A1) è maggiore del limite e, in caso affermativo, sottrae il limite dal numero prima di calcolare il modulo. Puoi anche rimuovere efficacemente il limite MOD usando questa formula:

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

Questo porta il numero grande modulo 2 alla sedicesima potenza, quindi prende il valore risultante modulo 2. Se i numeri sono visti come binari, è facile vedere cosa sta succedendo. MOD (largenum, 2 ^ 16) elimina tutti i bit a sinistra della 16a cifra binaria. Per il modulo 2, è necessaria solo la cifra più a destra per determinare comunque il risultato, quindi i bit rilasciati non influiscono mai sul risultato, indipendentemente dal valore.

Ovviamente, potresti semplicemente creare la tua funzione MOD in VBA e usarla nelle tue formule invece della funzione MOD incorporata.

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

La funzione ti consente semplicemente di passare due argomenti alla funzione VBA. Quindi si basa sulla funzione Mod VBA, che non ha la stessa limitazione della funzione del foglio di lavoro MOD.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (3302) si applica a Microsoft Excel 97, 2000, 2002 e 2003.