Condividi:        

[Excel] Divisione con grandi numeri

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Excel] Divisione con grandi numeri

Postdi Anthony47 » 17/08/08 18:27

Ho visto su diversi forum una domanda posta piu' volte e ancora senza risposta:
Cortesemente vorrei sapere come si calcola il resto del seguente numero per 97: =resto(330542811101000000123456182900;97) ho provato per alcuni giorni ma non ci sono riuscito


La domanda ha due risposte:
1) Con le funzioni di excel NON SI PUO' FARE;
Il problema non e' la mancanza di una funzione idonea (che esiste: RESTO(Dividendo;Divisore), ma la strutture stessa di rappresentazione dei dati di excel. Infatti "Excel memorizza e calcola con 15 cifre significative di precisione" (dall' help on line, voce Precisione dei calcoli). Un numero a 30 cifre e' quindi stratosfericamente piu' alto di quanto excel puo' gestire; il che non significa che excel "non ci prova", ma che sia la rappresentazione che i calcoli sono limitati a 15 cifre significative.
Provate a digitare il numero a 30 cifre dato sopra, poi formattate la cella come "Numero" con 0 decimali, e vedrete che tutta la parte bassa e' stata sostituita da "zeri"; potete digitare numeri ben piu' grandi di 15 cifre (in effetti potete inserire valori fino a 1,79769313486231E308, cioe' 1,79769xyz moltiplicato per 10 elevato a 308; insomma un numero di 308 cifre!) ma solo i 15 digit piu' significativi saranno memorizzati e usati per i calcoli).
Con questi limiti (in effetti piu' che ragionevoli per un programma di tipo "Office"), calcolare il vero "resto" di una operazione con un operatore a 30 cifre e' quindi impossibile.

2) PERO' si puo' fare con una "user defined function" che estenda questo limite di calcolo;
Il codice per questa "cosa" e' il seguente:
Codice: Seleziona tutto
Function StrDivid(Dividen As String, Divisor As String, Optional R_R As Boolean = True) As String
'Calcola il QUOZIENTE o il RESTO di una divisione i cui termini sono
'   rappresentati da "stringhe"
' (c) by Anthony47 2008
'Uso:
' =StrDivid(Dividendo as String;Divisore as String [;Quoziente/Resto as 0/1])
' Il parametro Quoziente/Resto e' opzionale:
'   1 o mancante = Quoziente
'   0 = Resto
'
' Esempio =StrDivid("123456";"333") restituisce quoziente "370"
'  mentre =StrDivid("123456";"333";0) restituisce il resto "246"
'Per convertire il risultato da stringa a valore anteporre
'   "--" a StrDivid, senza apici (cioe' doppia negazione)
'
Dim Avan As String, StrRis As String
Dim LDen As Integer, LSor As Integer, I As Integer
Dim SDen As Long, VSor As Long, SubRis As Long

LDen = Len(Dividen)
LSor = Len(Divisor)
VSor = Val(Divisor)

For I = 1 To LDen
SubRis = 0
If Asc(Mid(Dividen, I, 1)) > 57 Or Asc(Mid(Dividen, I, 1)) < 48 Then
StrDivid = "#NUM!": Exit Function
End If
SDen = Val(Avan & Mid(Dividen, I, 1))
Sottr:
If SDen >= VSor Then
SDen = SDen - VSor
SubRis = SubRis + 1
End If
If SDen >= VSor Then GoTo Sottr
StrRis = StrRis & SubRis
Avan = SDen & ""
Next I
If R_R = True Then StrDivid = StrRis Else: StrDivid = Avan
End Function


Da excel, aprite il vba (l' editor delle macro) con Alt-F11; poi Menu /Inserisci /Modulo; copiate il codice dato sopra e incollatelo nel frame di dx.
A questo punto sul foglio di lavoro inserite ad esempio in A1 il Dividendo sotto forma di stringa (anteponete un "apostrofo" prima dei numeri, o formattate prima le celle come Testo), e in A2 il Divisore (idem), e scrivete la vostra formula, es
Codice: Seleziona tutto
=StrDivid(A1;A2;0)
vi restituira' una stringa con il resto, oppure usate
Codice: Seleziona tutto
=--StrDivid(A1;A2;0)
per avere il resto convertito a "valore numerico" (con i limiti di precisione a 15 cifre...).
Ovviamente potete combinare questa funzione con le altre offerte da excel; es
Codice: Seleziona tutto
=SE(--StrDivid(A11;B11;0)>C11;Se vero; Se falso)


Ah, dimenticavo: la divisione tra il numerone dato e 97 da' come quoziente 3407657846402061856942847246 e come resto 38.

Spero di non avervi annoiati; ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Sponsor
 

Re: [Excel] Divisione con grandi numeri

Postdi Cedamido » 17/08/08 23:55

Ho provato, non ci sono riuscito, anzi excel ha smesso di funzionare
Saluti e salute perfetta
excel 2003
Cedamido
Utente Senior
 
Post: 314
Iscritto il: 17/08/08 23:26

Re: [Excel] Divisione con grandi numeri

Postdi Anthony47 » 18/08/08 00:15

Ciao Cedamido e benvenuto nel forum.
Ho provato, non ci sono riuscito

Se dici quello che hai fatto e che cosa ti succede posso provare ad aiutare, altrimenti posso solo confermarti che quanto pubblicato e' stato collaudato e (apparentemente) fa quanto ho scritto.

anzi excel ha smesso di funzionare

Beh, non credo che le mie macro siano cosi' indigeste; vedi sopra per eventuale aiuto.

Ciao, fatti sentire.
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Divisione con grandi numeri

Postdi Cedamido » 18/08/08 22:12

Sei il solo che hai risposto al quesito, ho consultato il programmatore di una Ditta di livello mondiale che usa il linguaggio cobol per le paghe, ha detto non so.
Il quesito è rimasto insoluto vari mesi, nonostante abbia interpellato trenta forum.
Di conseguenza Ti farò sapere allorquando avrò determinato bene ciò che Tu hai scritto.
Saluti e salute perfetta
excel 2003
Cedamido
Utente Senior
 
Post: 314
Iscritto il: 17/08/08 23:26

Re: [Excel] Divisione con grandi numeri

Postdi Anthony47 » 18/08/08 22:45

Ho trattato il caso proprio perche' l' ho visto postato in piu' forum ma senza esito.

Verifica se la soluzione proposta funziona per te, se SI allora ti chiederei di tornare sui "trenta" forum che hai consultato e segnalare che su questo forum hai avuto la soluzione (basta inserire il messaggio "Per una soluzione basata su User Defined Function guardate qui: http://www.pc-facile.com/forum/viewtopic.php?f=26&t=74566")
Se NO, allora spiega le difficolta' che ti saltano fuori (es cosa fai, che cosa succede), perche' ci tengo a risolvere il caso.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Divisione con grandi numeri

Postdi Cedamido » 19/08/08 20:31

Dopo vari tentativi sono riuscito a calcolare il resto, di fatto, seguendo attentamente le Tue spiegazioni, da 38.
Scusami, se insisto, non riesco ad evadere la divisione tra il numerone 330542811101000000123456182900 e 97:=330542811101000000123456182900/97.
Saluti e salute perfetta
excel 2003
Cedamido
Utente Senior
 
Post: 314
Iscritto il: 17/08/08 23:26

Re: [Excel] Divisione con grandi numeri

Postdi Anthony47 » 19/08/08 20:52

Scusa, dici che hai calcolato correttamente il resto di una operazione ma non riesci a fare la seconda.
Se scrivi il numerone in A1 e il numerino in A2 (ambedue in formato stringa, mi raccomando) e poi usi la formula =StrDidiv(A1;A2) dovresti ottenere il quoziente; con =StrDivid(A1;A2;0) dovresti avere il resto.
Oppure puoi usare direttamente =StrDivid("330542811101000000123456182900";"97";0) per il resto e =StrDivid("330542811101000000123456182900";"97") per il quoziente.

Tu invece che cosa fai e che cosa ti succede??
Se hai dubbi o domande anche strane non farti remore.

Ciao, ti aspetto.
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Divisione con grandi numeri

Postdi Cedamido » 19/08/08 21:39

Ho risolto, non veniva perchè non eliminavo dalla formula ;0 punto
Dall'uno gennaio coran è stato introdotto il codice IBAN:la divisione, il resto servono per controllarlo.
330542811101000000123456182900 avremo 38 che sottratto a 98 ci fornisce 60.
Sessanta corrisponde al CIN IT 60 dell'IBAN relativo al conto corrente bancario di una persona che si adopera come funzionalità di controllo, dal momento che le Banche consegnano IBAN errati.
Sono ritardato in excel e VBA, ma Tu sei veramente bravo.
diciannove agosto duemilaotto
Saluti e salute perfetta
excel 2003
Cedamido
Utente Senior
 
Post: 314
Iscritto il: 17/08/08 23:26

Re: [Excel] Divisione con grandi numeri

Postdi Anthony47 » 19/08/08 22:06

Interessante questo metodo per il controllo dell' iban...

Ti raccomando di aggiornare i "trenta" forum che hai interpellato su dove hai trovato la soluzione, come ti dissi un paio di messaggi fa.

Alla prossima, ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Controllo codice Iban

Postdi Anthony47 » 22/08/08 20:08

Segnalo con piacere, a chi avesse il problema del controllo del codice IBAN, la soluzione proposta da "Tribuno" qui: http://archi.forumup.it/about618-archi.html
La soluzione che ho presentato io su Pc-facile e' in effetti piu' ampia della necessita' dell' utente; partendo infatti dalla domanda "come calcolare il resto su una divisione di 30 cifre" io ho presentato una "funzione" che, a seconda di come e' richiamata, calcola il resto oppure il quoziente tra dividendo di qualsiasi lunghezza e divisore fino a 15 cifre (questo limite non e' descritto nel post iniziale).

La necessita' dell' utente, che in effetti e' stata chiarita solo dopo la mia risposta, era di eseguire il controllo di correttezza dei codici Iban: questa esigenza specifica puo' essere indirizzata , oltre che con l' uso della mia StrDivid con il metodo di calcolo del resto e sottrazione di questo dal numero magico 98, anche con la soluzione presentata da Tribuno: chi e' interessato visiti il link.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Divisione con grandi numeri":


Chi c’è in linea

Visitano il forum: Nessuno e 21 ospiti