Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[excel] Anomalia con vba

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] Anomalia con vba

Postdi riskismoney » 28/03/15 15:30

Ho notato un'anomalia a cui non riesco a dare una spiegazione, provo a spiegarla nella speranza che qualcuno di voi riesca a capirne il motivo.

Nella cella A2 ho una formula che in base al valore numerico inserito in A1 mi restituisce un nome.

Es. (A2) =SE(A1=>4,54;"OK","NO").

Il valore in A1 viene immesso da un routine vba. Nel 99,9% dei casi tutto funziona a dovere, a volte però quando il valore di A1 è al limite (es. 4,54), A2 mi restituisce NO anzichè OK. Se poi mi posiziono sulla cella A1 e premo F2 e successivo invio. Il valore di A2 restituisce correttamente OK. Nessun problema se il valore in A1 viene inserito manualmente.

Come diavolo è possibile?
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Sponsor
 

Re: [excel] Anomalia con vba

Postdi Flash30005 » 28/03/15 15:47

nella macro per caso è disabilitato il calcolo automatico?
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] Anomalia con vba

Postdi riskismoney » 28/03/15 16:47

Assolutamente no. Il calcolo automatico è abilitato.
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [excel] Anomalia con vba

Postdi riskismoney » 28/03/15 17:51

Allora ho risolto ma non ho capito quale fosse il problema.

Dunque il risultato finale che andava in A1 veniva calcolato grosso modo cosi:

a=arrotonda.eccesso(.....,0.01)
b=arrotonda.eccesso(.....,0.01)

c=min(a,b)

Poi la macro scriveva il valore in A1 il valore c. Il valore era corretto ma in A2 non si otteneva il voluto, se non premendo F2 ed invio.

Ora ho trasformato la formula cosi:

a=....
b=....
c= arrotonda.eccesso(min(a,b9),0.01)

Il risultato del codice macro è identico ma stavolta la formula in A2 funziona correttamente.

Mistero..............

Avendo a che fare con numeri che partono a 0 a 100.000 con decimali, è corretto dichiarare le varibibli cosi:

dim a as double
dim b as double
etc..

?
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [excel] Anomalia con vba

Postdi Anthony47 » 30/03/15 00:51

Il problema e' legato al diverso arrotondamento fatto da Excel rispetto a quanto fatto in vba.

La dichiarazione double e' corretta.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] Anomalia con vba

Postdi riskismoney » 30/03/15 10:01

Grazie Anthony.

Toglimi però due curiosità:
la prima, in cosa differiscono gli arrotondamenti di excel e vba;
la seconda, anche nel primo caso il numero restituito da vba era corretto (e non vi erano altri decimali oltre i 2 voluti).
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [excel] Anomalia con vba

Postdi Anthony47 » 30/03/15 22:20

Vba fa i calcoli con i suoi strumenti e i suoi arrotondamenti; Excel fa i calcoli con altri strumenti e altri arrotondamenti.
Non e' detto che il risultato "4,54" non sia per il vba 4,539999999999999 e per Excel 5,540000000000001.
Evidentemente c' era una qualche differenza, che scompariva quando con F2 /Enter inputavi il dato nella modalita' Excel.
Ti potra' incuriosire la contemporanea esperienza di Ricky: viewtopic.php?f=26&t=104384

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] Anomalia con vba

Postdi riskismoney » 17/04/15 15:24

Proprio oggi ho notato che il problema non è solo l'arrotondamento. Oggi ad esempio dal calcolo vba arriva il numero 23146,26, il calcolo presente sul foglio lo legge in maniera errata. Poi mi posizione dove sta il numero 23146,26, clicco su F2 e poi invio e magicamente il calcolo sul foglio lo interpreta correttamente (non ci sono anomalie di decimali, infatti anche aumentando i decimali in modo infinito non si vedono anomalie di arrotondamento).
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [excel] Anomalia con vba

Postdi riskismoney » 17/04/15 18:19

E' tutto molto strano. Non ci sono decimali di troppo/di meno, il numero che arriva da vba è assolutamente identico eppure non funziona. Se però da vba salto i calcoli e gli faccio scrivere direttamente 23146,26 allora tutto funziona facendo quindi pensare ad un errore di arrotondamento. Qualcuno ha idea di come si possa risolvere?
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [excel] Anomalia con vba

Postdi Anthony47 » 18/04/15 02:34

E' un fatto di precisione di calcoli; non escludo possa essere amplificato da una errata dichiarazione delle variabili che entrano nei calcoli vba (tutti i fattori).
Non si risolve, ma ne devi tenere conto quando imposti le formule sul foglio.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] Anomalia con vba

Postdi riskismoney » 18/04/15 11:11

Anthony ma come ne tengo conto nel foglio? Di fatto ho un livello minimo che attiva una condizione. Il valore da vba è corretto o almeno cosi sembra però il foglio non riconosce correttamente quel valore se non premendo f2/enter. Piuttosto, non è possibile da vba, dopo aver inserito il valore, fargli pigiare f2/enter in modo da validare con excel il valore arrivato da vba?
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [excel] Anomalia con vba

Postdi scossa » 18/04/15 16:24

riskismoney ha scritto:Il valore in A1 viene immesso da un routine vba.


Ciao,

nel codice, prima dell'istruzione che scrive il valore in A1 metti l'istruzione debug.print tua_variabile. Poi, quando si presenta l'anomalia, controlla nella finestra immediata del VBE il valore della variabile e posta qui i due numeri.
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 424
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: [excel] Anomalia con vba

Postdi riskismoney » 18/04/15 17:13

Ciao scossa,
il valore che arriva in a1 è 23146,26
il valore che arriva nella finestra immediata è 23146,26
che è il valore minimo che dovrebbe attivare la condizione.
La condizione però non si attiva se non posizionando il cursore excel su A1, premere F2 ed invio.
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [excel] Anomalia con vba

Postdi scossa » 18/04/15 17:26

riskismoney ha scritto:... 23146,26
che è il valore minimo che dovrebbe attivare la condizione.


E se nella finestra immediata scrivi:
[A1]= 23146.26
e premi invio cosa succede?

Comunque, per agire in modo mirato, dovresti allegare il file .....
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 424
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: [excel] Anomalia con vba

Postdi riskismoney » 18/04/15 17:31

scossa ha scritto:
E se nella finestra immediata scrivi:
[A1]= 23146.26
e premi invio cosa succede?


Succede che la condizione si attiva... che diavolo significa?
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [excel] Anomalia con vba

Postdi scossa » 18/04/15 17:51

riskismoney ha scritto:Succede che la condizione si attiva... che diavolo significa?


Può significare tutto o niente .... posta un file ridotto all'osso ma col codice che realmente utilizzi e che presenti il problema che descrivi, poi ci si ragiona su.
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 424
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: [excel] Anomalia con vba

Postdi riskismoney » 19/04/15 11:43

Ecco allegato il file in versione super ridotta. Vediamo se qualcuno capisce dove sta il problema.

http://www.filedropper.com/errore

Ciao
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [excel] Anomalia con vba

Postdi scossa » 19/04/15 12:22

riskismoney ha scritto:Ecco allegato il file in versione super ridotta. Vediamo se qualcuno capisce dove sta il problema.


Dovresti dirci anche che valori vanno cambiati per replicare il problema.

Poi ti suggerisco di eliminare l'istruzione Application.ScreenUpdating = False o di mettere prima di end sub l'istruzione Application.ScreenUpdating = True
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 424
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: [excel] Anomalia con vba

Postdi riskismoney » 19/04/15 12:42

Non bisogna cambiare nessun valore. Basta lanciare la macro e vedrai che la condizione in B2 è disattiva. Poi sulla cella A2 cliccare su F2/ENTER e la condizione diventa attiva.
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [excel] Anomalia con vba

Postdi Anthony47 » 19/04/15 14:12

Ma io non vedo tutto questo problema...

Dici "ho un livello minimo che attiva una condizione", quindi hai una condizione On/Off; e' critico che la "condizione" invece di scattare a 23146,26-Epsilon (il noto "Epsilon piccolo a piacere") scatti a 23146,26 + Epsilon? Penso di no, e quindi tutto si traduce alla meraviglia sul fatto che due entita' (il foglio Excel e il vba) fanno calcoli che sembrano uguali e producono risultati che differiscono di un Epsilon; ma dimentichiamo che solo qualche anno fa, se facevi 10/3*3 molte calcolatrici davano ancora come risultato 9.999999

Andando sul file pubblicato...
Se ti posizioni in B2, fai un Valuta Formula e segui i vari step noterai che quando A2 e' caricato da vba il calcolo di Ultimo-Basso produce 59,3600000000006
Sembrerebbe un errore sulla 15° cifra significativa, quindi in contrasto con l'affermazione Microsoft che i calcoli sono fatti con 15 cifre di precisione; ma in realta', visto che il calcolo parte da 23000 l' errore e' sulla 18° cifra, quindi ampiamente nella precisione garantita.
Procedendo nel calcolo, (Ultimo-Basso)/(Alto-Basso) produce un risultato di 0,800000000000039; di nuovo, quei "39" rappresentano un errore sulla 19° cifra (sempre in confronto al 23000 di partenza); quando fai *100 e confronti co 80 e' normale che il risultato sia Falso, quindi "Disattiva"

E se fai F2 Enter? In questo caso stai introducendo nella cella quel valore da tastiera.
In questo caso Ultimo-Basso produce 59,3599999999969
Un valore diverso dal precedente calcolo di 0,000000000000370; un errore pero' che si palesa solo sulla 18° cifra significativa

E' simile a quanto facevo osservare a Ricky: "Prova a sottrarre 103790,01 da 103800; il risultato sara' 9,99000000000524: un errore ben peggiore delle 15 cifre, all' apparenza... Ma se lo rapportiamo ai 103800 allora la precisione e' fino alla 17° cifra" (viewtopic.php?f=26&t=104384#p608789)

Insomma da Excel possiamo aspettarci una precisione fino alla 15° cifra, ma tenendo a mente quelli che sono i fattori iniziali.
Se questa tolleranza da fastidio nelle formule, vanno "aggiustate" le formule.

Ciao a tutti.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "[excel] Anomalia con vba":


Chi c’è in linea

Visitano il forum: Nessuno e 15 ospiti