Condividi:        

Help formula

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

Help formula

Postdi statam » 09/03/16 21:02

Volevo chiedervi un aiuto anche su un altro quesito di cui non riesco a fare una formula.
Vi allego il file: http://www.filedropper.com/cambiandoncambiapercentuale

In pratica io vorrei che nel foglio1 cambiando manualmente la cella E3 (dove ora è riportato il numero 5) cambi automaticamente anche la percentuale riportata nella cella D3.
Ad esempio cambiando manualmente il numero nella cella E3 in 10, la cella D3 dovrà riportare 10%.

Come posso fare?
statam
Utente Junior
 
Post: 47
Iscritto il: 30/12/15 19:30

Sponsor
 

Re: Help formula

Postdi Anthony47 » 09/03/16 21:31

Ad esempio cambiando manualmente il numero nella cella E3 in 10, la cella D3 dovrà riportare 10%.
Probabilmente la sto facendo troppo facile, ma io farei cosi':
1) tolgo la formula in E3 e ci scrivo un valore
2) in D3 metto la formula
Codice: Seleziona tutto
=C3/100
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Help formula

Postdi statam » 12/03/16 21:40

statam ha scritto:Volevo chiedervi un aiuto anche su un altro quesito di cui non riesco a fare una formula.
Vi allego il file: http://www.filedropper.com/cambiandoncambiapercentuale

In pratica io vorrei che nel foglio1 cambiando manualmente la cella E3 (dove ora è riportato il numero 5) cambi automaticamente anche la percentuale riportata nella cella D3.
Ad esempio cambiando manualmente il numero nella cella E3 in 10, la cella D3 dovrà riportare 10%.

Come posso fare?


Si ma io necessito che nella cella D3 ci sia il cerca.vert e solo in caso venga cambiato il numero nella cella E3 allora deve variare la percentuale nella cella D3...forse dovrei fare una formula con il SE ma come posso costruirla?

Del tipo: (in D3)
Codice: Seleziona tutto
=CERCA.VERT(B3;Foglio2!$A$1:$B$4;2;0) SE e solo se nella cella E3 viene cambiato il numero allora fai E3/100
statam
Utente Junior
 
Post: 47
Iscritto il: 30/12/15 19:30

Re: Help formula

Postdi Anthony47 » 13/03/16 21:00

Se ho capito bene allora tu vuoi che in D3 ci sia una formula, ma se l'utente cambia il contenuto di C3 allora D3 deve assumere il valore C3/100.
Se e' cosi', allora "Si puo' fare", ma ti sia chiaro che a quel punto D3 perdera' irrimediabilmente la sua formula; e contemporaneamente a me non e' per nulla chiaro il significato di questa automazione senza ritorno...

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

Re: Help formula

Postdi statam » 13/03/16 22:47

Anthony47 ha scritto:Se ho capito bene allora tu vuoi che in D3 ci sia una formula, ma se l'utente cambia il contenuto di C3 allora D3 deve assumere il valore C3/100.
Se e' cosi', allora "Si puo' fare", ma ti sia chiaro che a quel punto D3 perdera' irrimediabilmente la sua formula; e contemporaneamente a me non e' per nulla chiaro il significato di questa automazione senza ritorno...

Ciao


Si è esattamente quello che voglio fare (solo che l'utente cambierà il contenuto della cella E3 non C3 e di conseguienza D3 dovrà assumere il valore E3/100) e mi va benissimo che poi la formula precedente verrà perduta. Solo che non so come costruirla
statam
Utente Junior
 
Post: 47
Iscritto il: 30/12/15 19:30

Re: Help formula

Postdi Anthony47 » 14/03/16 11:21

Si, nel messaggio precedente avevo scritto "C3" ma doveva essere "E3".

Non avendo capito un'acca di quel che stai cercando di fare (e questo e' il primo errore che si fa, cioe' descrivere come uno ha pensato di risolvere un problema senza descrivere il problema stesso) ti propongo un approccio diverso.
Mi pare che tu stia cercando di lasciare all'utente la possibilita' di modificare un dato (es lo sconto) normalmente estratto da una tabella.
Allora lascia una cella riservata per questa operazione, es F3. Poi nella cella dello sconto usa la formula tipo
Codice: Seleziona tutto
=Se(F3="";CERCA.VERT(B3;Foglio2!$A$1:$B$4;2;0);F3/100)

Usa la formattazione condizionale per evidenziare che F3 e' compilato, in modo da aiutare l'utente a evitare errori clamorosi.

E se questo approccio non fa al tuo caso allora inseriremo una macro di WorksheetChange per compilare D3 a ogni cambiamento manuale inserito in E3.

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

Re: Help formula

Postdi statam » 14/03/16 22:36

Grazie mille Anthony per il tuo aiuto. Cerco di spiegare meglio quello che mi serve perchè quella formula non fa il mio caso:

Come puoi vedere dal file nella cella D3 viene estrapolato un dato col cerca.vert mentre nella cella E3 viene visualizzato un altro dato (che è sempre la moltiplicazione della cella D3, che cambia, con la cella G1, che è fissa). Dunque le celle D3 ed E3 sono sempre compilate. Io però voglio permettere all'utente, in caso di necessità, di modificare manualmente il numero all'interno della cella E3. Così facendo voglio che in base a questa modifica venga modificata automaticamente anche la percentuale nella cella D3 (dunque in D3 comparirà E3/100).

Per questo avevo pensato a un if come scritto precedentemente.

Se invece l'utente non fa nessuna modifica alla cella E3, in D3 rimane semplicemente la formula con il cerca.vert
statam
Utente Junior
 
Post: 47
Iscritto il: 30/12/15 19:30

Re: Help formula

Postdi Anthony47 » 15/03/16 22:32

Premesso che il file su filedropper.com "scade" dopo 3-4 gg quindi oramai non e' piu' consultabile.
-Fai tasto dx sul tab col nome foglio di lavoro, scegli Visualizza codice
-ti si aprira' l'editor delle macro nella posizione corretta
-copia questo codice e incollalo nel frame di dx:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
'
If Target.Address = "$E$3" Then
    Application.EnableEvents = False
    Range("D3").Value = Target.Value / 100
    Application.EnableEvents = True
End If
End Sub

A questo punto tutte le volte che si va a modificare il contenuto di E3, anche se tramite macro, scattera' il codice suddetto e D3 verra' compilato di conseguenza.
Questo significa che se tu in qualche modo gia' scrivi in E3 via macro probabilmente vorrai evitare l'effetto descritto; per questo devi inserire nel tuo codice (prima di andare a modificare E3) l'istruzione Application.EnableEvents = False e subito dopo Application.EnableEvents = True

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

Re: Help formula

Postdi statam » 21/03/16 19:57

Anthony47 ha scritto:Premesso che il file su filedropper.com "scade" dopo 3-4 gg quindi oramai non e' piu' consultabile.
-Fai tasto dx sul tab col nome foglio di lavoro, scegli Visualizza codice
-ti si aprira' l'editor delle macro nella posizione corretta
-copia questo codice e incollalo nel frame di dx:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
'
If Target.Address = "$E$3" Then
    Application.EnableEvents = False
    Range("D3").Value = Target.Value / 100
    Application.EnableEvents = True
End If
End Sub

A questo punto tutte le volte che si va a modificare il contenuto di E3, anche se tramite macro, scattera' il codice suddetto e D3 verra' compilato di conseguenza.
Questo significa che se tu in qualche modo gia' scrivi in E3 via macro probabilmente vorrai evitare l'effetto descritto; per questo devi inserire nel tuo codice (prima di andare a modificare E3) l'istruzione Application.EnableEvents = False e subito dopo Application.EnableEvents = True

Ciao


Innanzi tutto grazie mille per il tuo aiuto, scusa se rispondo solo ora.
Ho provato il codice ma non ho ben capito un paio di cose:
    1. Per inserire questo codice clicco sulla cella (quella che potrà essere cambiata manualmente dall'utente) e poi vado su svliuppa>visualizza codice e inserisco il codice? Però se devo farlo su tante celle come faccio? perchè anche cambiando il riferimento di cella nel codice se clicco su una qualsiasi altra cella e poi su sviluppo>visualizza codice mi torna sullo stesso codice appena inserito.

    2. Cosa più importante: Per quanto riguarda la percentuale, come puoi vedere sul file che ho ripostato in fondo, nella cella D3 ho una percentuale ricavata da un CERCA.VERT e nella cella E3 ho un numero ricavato da una formula. Quello che vorrei è che cambiando manualmente il numero contenuto in E3 cambi la percentuale nella cella D3, ma in maniera adattata. Ad esempio (come nel file) nella cella D3 ho riportato il 5%; nella cella E3 ho riportato 2,5. Se nella cella E3 inserisco il numero 5 la cella D3 dovrà adattarsi e far comparire 10% (il doppio). (Diciamo che la stessa cosa si può fare al contrario, ovvero se nel file cambi la cella D3 sostituendo il 5% con il 10%, noterai che nella cella E3 il numero diventerà 5)

Ti ringrazio ancora per il tuo aiuto, qui trovi il file rihostato: http://www.filedropper.com/cambiandonca ... centuale_1
statam
Utente Junior
 
Post: 47
Iscritto il: 30/12/15 19:30

Re: Help formula

Postdi Anthony47 » 22/03/16 01:28

Secondo me stai cercando di risolvere il problema nel modo sbagliato...
Se, come mi pare, stai cercando di variare lo sconto standard in funzione di input che da' l'operatore allora torno al suggerimento dato qualche messaggio fa:
-in un tot di celle usi le formule; altre celle le lasci libere perche' l'operatore possa inserire i suoi input.
-il risultato finale lo calcoli in una ulteriore colonna sulla base del contenuto della cella lasciata all'operatore.

Ad esempio:
-F3 e' la cella lasciata all'operatore
-in G3 calcoli lo sconto che vuoi applicare con la formula
Codice: Seleziona tutto
=SE(F3="";D3;F3/E3*D3)

In questo modo le formule sono sempre valide e non vanno distrutte per modificare il risultato che si vuole ottenere.

Se procedi su questa strada allora ti potrebbe aiutare una macro che cancelli il contenuto della cella lasciata all'operatore quando si cambia il contenuto della colonna B, che svilupperemo all'occorrenza (si tratta di 10-15 righe di codice).

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

Re: Help formula

Postdi statam » 23/03/16 19:20

Anthony47 ha scritto:Secondo me stai cercando di risolvere il problema nel modo sbagliato...
Se, come mi pare, stai cercando di variare lo sconto standard in funzione di input che da' l'operatore allora torno al suggerimento dato qualche messaggio fa:
-in un tot di celle usi le formule; altre celle le lasci libere perche' l'operatore possa inserire i suoi input.
-il risultato finale lo calcoli in una ulteriore colonna sulla base del contenuto della cella lasciata all'operatore.

Ad esempio:
-F3 e' la cella lasciata all'operatore
-in G3 calcoli lo sconto che vuoi applicare con la formula
Codice: Seleziona tutto
=SE(F3="";D3;F3/E3*D3)

In questo modo le formule sono sempre valide e non vanno distrutte per modificare il risultato che si vuole ottenere.

Se procedi su questa strada allora ti potrebbe aiutare una macro che cancelli il contenuto della cella lasciata all'operatore quando si cambia il contenuto della colonna B, che svilupperemo all'occorrenza (si tratta di 10-15 righe di codice).

Ciao

Ti spiego meglio: D3 contiene il peso del prodotto che viene rilevato da un tool esterno e quindi riportato con un cerca.vert mentre la cella E3 svela la quantità da produrre in base a quel peso. Ora io voglio che cambiando eventualmente la quantità nella cella E3 si adegui anche la percentuale in D3 in maniera proporzionale. All inizio avevo pensato a un se nella cella D3 ma la cella D3 contiene già un se e non saprei come costruirlo. In pratica la cella D3 dovrebbe riportare come n il cerca.vert la percentuale riportata in un altro foglio di lavoro, se nel figlio di lavoro non trova niente allora deve riportare cella vuota. Se invece viene cambiata manualmente la cella D3 con un altro numero deve adattarsi alla percentuale in base allo stesso. Però non so come costruirla :(
statam
Utente Junior
 
Post: 47
Iscritto il: 30/12/15 19:30

Re: Help formula

Postdi Anthony47 » 24/03/16 01:55

Premesso che col vba "si puo' fare quasi tutto", rimango della mia idea che e' sbagliato sostituire il risultato di una formula con un valore inputato a mano.
Quindi il mio suggerimento e' di usare una colonna libera per i dati da inputare, e poi con formule calcoli i risultati che servono.

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

Re: Help formula

Postdi statam » 24/03/16 20:03

Anthony47 ha scritto:Premesso che col vba "si puo' fare quasi tutto", rimango della mia idea che e' sbagliato sostituire il risultato di una formula con un valore inputato a mano.
Quindi il mio suggerimento e' di usare una colonna libera per i dati da inputare, e poi con formule calcoli i risultati che servono.

Ciao


So che può sembrare sbagliato ma in realtà è proprio quello che mi serve perchè poi in caso di modifica del file questo viene salvato in un'altra destinazione dall'originale
statam
Utente Junior
 
Post: 47
Iscritto il: 30/12/15 19:30

Re: Help formula

Postdi statam » 26/03/16 21:27

Si può fare?
statam
Utente Junior
 
Post: 47
Iscritto il: 30/12/15 19:30

Re: Help formula

Postdi Anthony47 » 29/03/16 22:50

So che può sembrare sbagliato ma in realtà è proprio quello che mi serve perchè poi in caso di modifica del file questo viene salvato in un'altra destinazione dall'originale
L'uso di una colonna di servizio per consentire l'input dell'utente (senza toccare le celle contenenti le formule) non impedisce di spostare, copiare, inviare il file e quant'altro si fa normalmente con un file; quindi rimane quello il mio suggerimento.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Help formula

Postdi statam » 30/03/16 20:38

Anthony ti ringrazio per i tuoi suggerimenti, ma io avrei bisogno di farlo esattamente così e per un consistente numero di celle, senza aggiungere alcuna colonna, spero tu possa aiutarmi.

Grazie ancora infinite
statam
Utente Junior
 
Post: 47
Iscritto il: 30/12/15 19:30

Re: Help formula

Postdi Anthony47 » 30/03/16 23:45

La descrizione data il 23-3 e' poco comprensibile per la presenza di alcune incongruenze:
Ti spiego meglio: D3 contiene il peso del prodotto che viene rilevato da un tool esterno e quindi riportato con un cerca.vert mentre la cella E3 svela la quantità da produrre in base a quel peso. Ora io voglio che cambiando eventualmente la quantità nella cella E3 si adegui anche la percentuale in D3 in maniera proporzionale. [. . . ]
In realta D3 contiene una percentuale, non un peso; forse volevi dire G1?

[. . . ] In pratica la cella D3 dovrebbe riportare come n il cerca.vert la percentuale riportata in un altro foglio di lavoro, se nel figlio di lavoro non trova niente allora deve riportare cella vuota. Se invece viene cambiata manualmente la cella D3 con un altro numero deve adattarsi alla percentuale in base allo stesso.
Intendi forse dire "se viene cambiata la cella E3 allora la cella D3 deve adattarsi."?

Lavorero' quindi sulla prima descrizione:
In pratica io vorrei che nel foglio1 cambiando manualmente la cella E3 (dove ora è riportato il numero 5) cambi automaticamente anche la percentuale riportata nella cella D3.
Ad esempio cambiando manualmente il numero nella cella E3 in 10, la cella D3 dovrà riportare 10%.
Cioe' nel foglio originale E3 e' calcolato in funzione della percentuale calcolata in D3; tu vuoi poter invertire la regola: se l'utente imposta E3 allora la percentuale in D3 si adegua.

Avevo per questo gia' pubblicato una macro di Worksheet_Change, che procedeva a fare quanto richiesto partendo dalla modifica di E3 (viewtopic.php?f=26&t=106548#p623794)

Questa soluzione era rimasta (credo) inapplicata, probabilmente perche' non hai saputo adattare il codice a una moltitudine di celle (statam: "Però se devo farlo su tante celle come faccio?").
Supponiamo che per "moltitudine di celle" si intenda ad esempio l'intervallo E3:E100; il codice della macro diventera'
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Area As String, myC As Range
'
Area = "E3:E100"              '<<< L'area da monitorare
If Not Application.Intersect(Target, Range(Area)) Is Nothing Then
    Application.EnableEvents = False
    For Each myC In Target
        myC.Offset(0, -1).Value = Target.Value / Range("G1")
    Next myC
    Application.EnableEvents = True
End If
End Sub
L'istruzione marcata <<< andra' personalizzata.

Per l'uso della macro devi seguire letteralmente le istruzioni che gia' ti diedi: "Tasto dx sul tab etc etc".
Il file andra' poi salvato nel formato "macro enabled" (xlsm).

Tutto questo lo faccio mentre ribadisco che ritengo questo modo di procedere per "aggiustare" i calcoli sia sbagliato: perche' non evidenzia quali risultati siano calcolati e quali aggiustati; perche' annulla le formule in modo irreversibile aprendo le porte a calcoli inesatti qualora il campo di colonna B venga modificato in una seconda fase.

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

Re: Help formula

Postdi statam » 04/04/16 22:19

Ho provato il codice e mi sono accorto che la formula non va bene (ovvero << Target.Value / Range("G1") >>)

Difatti non saprei come formulare questa espressione.
Riepilogando io ho:
    -Le celle della colonna D in cui ho una percentuale (rappresentante il peso dei prodotti, estrapolati da un tool e messi sulla cella attraverso un cerca.vert)
    -Le celle della colonna E contenenti la quantità da produrre in base alla percentuale, o peso, contenuto nella cella D (la formula moltiplica il fatturato contenuto nella cella G1 con la percentuale e divide il tutto per il prezzo senza iva)

Ora come puoi vedere (fai una prova): se cambi manualmente una delle percentuali nella colonna D, ad esempio nella cella D3 sostituisci 5% con 8%, vedrai che la corrispondente cella nella colonna E cambierà in base alla percentuale appena cambiata, nel nostro caso nella cella E3 comparirà 1,6

Quello che voglio ottenere ora è l'inverso del procedimento, ovvero cambiando manualmente una delle celle contenute nella colonna E la percentuale si adatti. Ad esempio se cambio manualmente la cella E3 da 1 a 1,6 voglio che la percentuale nella cella D3 diventi 8%.

Tengo a precisare inoltre che qui nel file ho solo una tabella con un solo fatturato (nella cella G1), poi nel file definitivo avrò numerose tabelle che si ripetono con numeri diversi e con celle fatturato (come quella G1) che si ripetono con numeri differenti.

FILE: http://www.filedropper.com/cambiandoncambiapercentuale

Ci tengo inoltre a ringraziarti per il tuo prezioso tempo concessomi, siete un forum eccezzionale!
statam
Utente Junior
 
Post: 47
Iscritto il: 30/12/15 19:30

Re: Help formula

Postdi Anthony47 » 05/04/16 23:11

Il file che avevi pubblicato in E3 conteeva la formula =+SE(VAL.ERRORE(G1*D3);"";($G$1*D3))
Su questa formula ho basato il calcolo di D3 pari a Target.Value/ Range("G1") (equivalente a D3=E3/G1)

Il file che pubblichi oggi contiene un'altra formula =+SE(VAL.ERRORE($G$1*D3)/CERCA.VERT(B3;Foglio3!$A$2:$B$5;2;0);"";($G$1*D3)/CERCA.VERT(B3;Foglio3!$A$2:$B$5;2;0))
E' chiaro che questo richiede un calcolo diverso.

Ma questo mi riporta a quello che cerco di dirti da sempre: usa una colonna di appoggio riservata all'utente per scriverci quel che vuole, cosi' in D3/E3 puoi usare le formule piu' opportune. Come dimostrato in questa immagine:
Immagine
upload immagini
Le colonne D & E sono quelle calcolate con le formule originali, che cambi quando vuoi.
L'utente che vuole forzare un risultato diverso scrive il suo valore in colonna F.
Il nuovo risultato lo calcoli in G3 con la formula
Codice: Seleziona tutto
=SE(F3<>0;D3*F3/E3;D3)
(questa formula e' indipendente da quali formule hai usato in D3 /E3).

Oppure modifichi il calcolo fatto dalla macro, e ogni volta che cambi le formule nelle celle originali adatti il codice.

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

Re: Help formula

Postdi statam » 10/04/16 20:39

Anthony47 ha scritto:Il file che avevi pubblicato in E3 conteeva la formula =+SE(VAL.ERRORE(G1*D3);"";($G$1*D3))
Su questa formula ho basato il calcolo di D3 pari a Target.Value/ Range("G1") (equivalente a D3=E3/G1)

Il file che pubblichi oggi contiene un'altra formula =+SE(VAL.ERRORE($G$1*D3)/CERCA.VERT(B3;Foglio3!$A$2:$B$5;2;0);"";($G$1*D3)/CERCA.VERT(B3;Foglio3!$A$2:$B$5;2;0))
E' chiaro che questo richiede un calcolo diverso.

Ma questo mi riporta a quello che cerco di dirti da sempre: usa una colonna di appoggio riservata all'utente per scriverci quel che vuole, cosi' in D3/E3 puoi usare le formule piu' opportune. Come dimostrato in questa immagine:
Immagine
upload immagini
Le colonne D & E sono quelle calcolate con le formule originali, che cambi quando vuoi.
L'utente che vuole forzare un risultato diverso scrive il suo valore in colonna F.
Il nuovo risultato lo calcoli in G3 con la formula
Codice: Seleziona tutto
=SE(F3<>0;D3*F3/E3;D3)
(questa formula e' indipendente da quali formule hai usato in D3 /E3).

Oppure modifichi il calcolo fatto dalla macro, e ogni volta che cambi le formule nelle celle originali adatti il codice.

Ciao


Ti ringrazio, la formula funziona ma solo aggiungendo la nuova colonna :(
Io invece ho la necessità di non aggiungere nessuna colonna, ad esempio modificando D3 con 8% la cella E3 dovrebbe diventare 1,6. In questi giorni ho ragionato sulla formula da usare e come usarla per l'intero foglio...ma aimè non sono riuscito a ricavare niente, a questo punto penso non si possa fare :cry:
statam
Utente Junior
 
Post: 47
Iscritto il: 30/12/15 19:30

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Help formula":


Chi c’è in linea

Visitano il forum: Ricky0185 e 49 ospiti