Condividi:        

funzione excel 2003 complessa

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

funzione excel 2003 complessa

Postdi libraio » 08/02/11 18:50

Un saluti a tutti e la richiesta di un aiuto prezioso...
Da due fogli di lavoro con dati simili devo rilevare i cambi prezzo.
Vorrei ottenere una formula che, applicata ad una colonna vuota del Foglio2, pubblicasse il prezzo -se variato- rispetto il medesimo aricolo in Foglio1. L'unita di confronto -codice articolo- è in colonna 'A' di ambedue i fogli della cartella.

Ho iniziato ad elaborare la formula da altra applicazione, nel modo seguente:
=SE(VAL.ERRORE(CERCA.VERT(A2;Foglio1!$A$1:$Z$10000;
ma non riesco a proseguire, per ottenere il risultato:
- in 'n'2 del Foglio2 ottengo il prezzo dell'articolo in Foglio1, se diverso da quello del medesimo articolo in Foglio2.

Grazie per la collaborazione
libraio
libraio
Utente Senior
 
Post: 329
Iscritto il: 04/01/10 20:31

Sponsor
 

Re: funzione excel 2003 complessa

Postdi ricky53 » 08/02/11 19:00

Ciao,
il "codice articolo" è presente una volta solo nella colonna "A" di entrambi i fogli vero ???

Il "prezzo" in che colonna si trova ???
La colonna del "prezzo" è la stessa per entrambi i fogli ???
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: funzione excel 2003 complessa

Postdi ricky53 » 08/02/11 19:10

Così tanto per gradire:

ipotesi
1. i dati del codice articolo sono in colonna "A"
2. i dati del prezzo sono in colonna "B"
3. nel foglio1 e nel foglio2 i dati sono sempre in colonna "A" e "B"
4. le righe impostate sono "100"

ecco una formula ca copiare un "C2" del foglio2 e da trascinare in basso per le 100 righe
e ... prova
Codice: Seleziona tutto
=SE(SE(VAL.ERRORE(CERCA.VERT($A$2:$A$100; Foglio1!$A$2:$B$100; 2; 0)); B2; CERCA.VERT($A$2:$A$100;Foglio1!$A$2:$B$100; 2; 0))<>B2; CERCA.VERT($A$2:$A$100;Foglio1!$A$2:$B$100; 2; 0); "-")
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: funzione excel 2003 complessa

Postdi libraio » 08/02/11 19:50

Ti ringrazio per il contributo e rispondo alle tue domande.
Premesso che in Foglio2 inserisco il mio prezziario desunto dal gestionale, in foglio1 inserisco, di volta in volta, i listini dei diversi fornitori, pertanto:
in Foglio2: codice articolo sempre in colonna 'A'; prezzo sempre in colonna 'L'
in Foglio1: le posizioni del codice articolo e del prezzo sono diverse, dipendendo dal file dei diversi fornitori.

Posso tuttavia intervenire sul Foglio1 prima di applicare la formula, uniformando la posizione del codice articolo e del prezzo in base alla tua preziosa formula inserita nel secondo post.
libraio
libraio
Utente Senior
 
Post: 329
Iscritto il: 04/01/10 20:31

Re: funzione excel 2003 complessa

Postdi ricky53 » 08/02/11 20:05

Ciao,
sarebbe meglio avere i dati nelle stesse colonne.
Vedi tu.

Ipotizziamo che il prezzo sia in entrambi i fogli in colonna "L"

Devi adattare la formula:
a. modificando "B" con "L" tutte le volte che è presente
b. modificando il "2" (sta per colonna "B") con "12" (colonna "L")
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: funzione excel 2003 complessa

Postdi libraio » 08/02/11 20:15

Perfetto.
Grazie
libraio
libraio
Utente Senior
 
Post: 329
Iscritto il: 04/01/10 20:31

Re: funzione excel 2003 complessa

Postdi ricky53 » 08/02/11 20:16

Di nulla, è stato un piacere.
Alla prossima.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: funzione excel 2003 complessa

Postdi libraio » 08/02/11 21:07

Temo ci sia un errore nella formula...
L'ho applicata alla cartella di lavoro con i correttivi segnalatami, ma in tutte celle ottengo come risultato il segno "-", anzichè il nuovo prezzo (se cambiato), desunto dal foglio1.

Ecco la formula che ho applicato dopo le correzioni indicatemi:
=SE(SE(VAL.ERRORE(CERCA.VERT($A$2:$A$5000; Foglio1!$A$2:$B$5000; 12; 0)); L2; CERCA.VERT($A$2:$A$5000;Foglio1!$A$2:$B$5000; 12; 0))<>L2; CERCA.VERT($A$2:$A$5000;Foglio1!$A$2:$B$5000; 12; 0); "-")

Cosa devo modificare? :oops:
Ancora grazie
libraio
Utente Senior
 
Post: 329
Iscritto il: 04/01/10 20:31

Re: funzione excel 2003 complessa

Postdi Anthony47 » 08/02/11 22:15

Non ho analizzato la sostanza della formula, penso che l' abbia fatto Ricky; ma nella forma e' sbagliato usare nella cerca.vert l' area $A$2:$B$5000 e poi 12 come indice (la col 12=L non e' inclusa nell' area dichiarata); quindi dovresti usare $A$2:$L$5000

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

Re: funzione excel 2003 complessa

Postdi ricky53 » 09/02/11 00:25

Ciao,
Anthony: si la formula è mia ed era stata scritta con un altro intervallo, doveva adattarla Libraio.

Libraio: ricordi cosa ti avevo scritto
Devi adattare la formula:
a. modificando "B" con "L" tutte le volte che è presente
b. modificando il "2" (sta per colonna "B") con "12" (colonna "L")


Tu non hai sostituito "B" con "L" !!!
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: funzione excel 2003 complessa

Postdi libraio » 09/02/11 11:18

Ho effettuato le ulteriori correzioni, ma il risultato continua ad essere "-" anzichè il nuovo prezzo.
Ho quindi pensato di ricondurre tutto all'origine; ho ridotto i dati dei due fogli alle sole colonne A (codice articolo per ambedue i fogli) e B (prezzo attuale in foglio2, nuovo prezzo in foglio1).
Applicata la formula originaria di Ricky in colonna C del foglio2 ottengo comunque unicamente il segno "-"
Ho postato la cartella di lavoro:
http://ul.to/yvhh47
Io non riesco a venirne fuori... :-?
Grazie per l'attenzione
libraio
Utente Senior
 
Post: 329
Iscritto il: 04/01/10 20:31

Re: funzione excel 2003 complessa

Postdi Anthony47 » 09/02/11 11:54

Hai un elenco lungo 4050 righe, nella formula ti limiti a sondare $A$2:$A$100…
Metti $A$2:$A$10000 (oppure A:B) e funzionera'.
Una piccola alternativa potrebbe essere questa formula
Codice: Seleziona tutto
=SE(VAL.ERRORE(CERCA.VERT(A2;Foglio1!A:B;2;0));"-";SE(CERCA.VERT(A2;Foglio1!A:B;2;0)<>B2;CERCA.VERT(A2;Foglio1!A:B;2;0);"--"))

Che fa distinzione se la voce manca nell' elenco di Foglio1 (restituisce -) o se i due prezzi sono uguali (restituisce --).

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

Re: funzione excel 2003 complessa

Postdi libraio » 09/02/11 12:19

Grazie Anthony,
ovviamente l'esempio in upload andava "allungato" alle righe presenti, ma lo avevo solo testato per riscontrare i risultati (anche solo sulle prime 100 righe, del resto già il prezzo in prima riga è variato).
Ho verificato la tua formula ed è perfetta.
Ringrazio anche Ricky per la paziente attenzione accoradtami.
Siete preziosi! :D
libraio
Utente Senior
 
Post: 329
Iscritto il: 04/01/10 20:31

Re: funzione excel 2003 complessa

Postdi libraio » 09/02/11 19:58

Ancora una richiesta, sperando di "non allargarmi" troppo...
Ho automatizzato l'applicazione della formula suggeritami da Anthony, ottenendo la macro seguente:

Range("N2").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-12],Foglio1!C[-13]:C[-2],12,0)),""manca"",IF(VLOOKUP(RC[-12],Foglio1!C[-13]:C[-2],12,0)<>RC[-1],VLOOKUP(RC[-12],Foglio1!C[-13]:C[-2],12,0),""invariato""))"
Selection.AutoFill Destination:=Range("N2:N1123")
Range("N2:N1123").Select
End Sub

Poichè i listini sono di lunghezza variabile, vorrei inserire nella macro un contatore righe piene in Foglio2, ma non ne vengo a capo, malgrado tentativi diversi (e vani).
Posso avere (spudoratamente) un altro aiuto?
Grazie
libraio
Utente Senior
 
Post: 329
Iscritto il: 04/01/10 20:31

Re: funzione excel 2003 complessa

Postdi Anthony47 » 09/02/11 23:54

La mia formula e' perfetta, ma anche quella di Ricky era discreta (ciao Ricky :D ): e' vero che gia' sulla prima riga il prezzo era diverso da quello presente in Foglio1, ma su Foglio1 tu limitavi la ricerca alle prime 100 righe, mentre il codice 9788808001061 e' in riga 2680..

Per il nuovo quesito:
-metti a mano la formula in riga 2
-poi la tua macro includera'
Codice: Seleziona tutto
Range("N3:N" & Rows.Count).Clear
Range("N2").Copy Destination:=Range("N2").Resize(Cells(Rows.Count, 1).End(xlUp).Row)

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

Re: funzione excel 2003 complessa

Postdi ricky53 » 10/02/11 01:41

Anthony: la modestia è il tuo forte !!! Complimenti !!!

Per la tua soluzione hai preso spunto dalla mia !!! Eh, Eh !!!
Vuoi fare il Giotto della situazione ???
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: funzione excel 2003 complessa

Postdi libraio » 10/02/11 09:48

Lunga vita a Giotto e Cimabue che "litigano" per la migliore creazione! :)
A goderne sono gli interlocutori :D :D
Grazie!
libraio
Utente Senior
 
Post: 329
Iscritto il: 04/01/10 20:31

Re: funzione excel 2003 complessa

Postdi libraio » 10/02/11 13:12

Dopo l'ultima risposta di Anthony sono più incasinato di prima...
Se ho ben capito, tu mi suggerisci di abbandonare la macro iniziale, scrivere la formula in linea 2 ed inserire il codice del contatore in una macro ex-novo (sbaglio)?
Così facendo io non ttengo nulla, o meglio: errori su errori.
Ho ripreso la mia macro ed ho "tentato" di inserire il codice contatore, ma non ne vengo a capo comunque.
Io vorrei "semplicemente" che la formula, lanciata con la macro, venisse applicata alle righe piene :cry:
Posso ancora sperare in voi? (gli affreschi sono stupendi...)
libraio
libraio
Utente Senior
 
Post: 329
Iscritto il: 04/01/10 20:31

Re: funzione excel 2003 complessa

Postdi Anthony47 » 10/02/11 14:01

Non so quale e' la tua macro, io dicevo
Codice: Seleziona tutto
Sub replicaN2()
Range("N3:N" & Rows.Count).Clear
Range("N2").Copy Destination:=Range("N2").Resize(Cells(Rows.Count, 1).End(xlUp).Row)
End Sub

Da lanciare con la formula iniziale scritta in N2

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

Re: funzione excel 2003 complessa

Postdi libraio » 10/02/11 16:03

Allora avevo applicato giustamente il tuo precedente suggerimento,ma... se io inserisco manualmente la formula in N2 e poi lancio la macro:

Sub replicaN2()
Range("N3:N" & Rows.Count).Clear
Range("N2").Copy Destination:=Range("N2").Resize(Cells(Rows.Count, 1).End(xlUp).Row)
End Sub

non succede nulla (la formula resta apllicata unicamente in N2).

La mia macro, che funziona e che vorrei applicasse la formula a tutte le righe piene (attualmente vincolata a 1123 righe ) è la seguente:

Sub Applica_Formula()
Range("N2").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-12],Foglio1!C[-13]:C[-2],12,0)),""manca"",IF(VLOOKUP(RC[-12],Foglio1!C[-13]:C[-2],12,0)<>RC[-1],VLOOKUP(RC[-12],Foglio1!C[-13]:C[-2],12,0),""invariato""))"
Selection.AutoFill Destination:=Range("N2:N1123")
Range("N2:N1123").Select
End Sub

Spero di non abusare della tua disponibilità...
libraio
Utente Senior
 
Post: 329
Iscritto il: 04/01/10 20:31

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "funzione excel 2003 complessa":


Chi c’è in linea

Visitano il forum: Gianca532011 e 42 ospiti