Autocompilazione celle



  • Autocompilazione celle
    di mimmo82 data: 10/05/2016 16:41:34

    Ciao a ttt,

    ho 2 fogli, uno che compone un piccolo DB, l altro di data entry form.
    Devo far autocompilare una cella in funzione a valori presenti nei precedenti campi.

    Paradossalmente riesco a risolvere se l'autocompilazione riguarda svariati campi con la vertical, mentre non riesco se i campi sono solamente uno...Nel mio caso, il prezzo.

    Grazie a chi mi dara qualche dritta o esmpio, ho cercato sul forum ma avendo una connessione lentissima, mi va in loop il caricamento.Scusatemi



  • di alfrimpa data: 10/05/2016 17:56:10

    Scusa mimmo ma non riesco a capire

    In base al tuo esempio qual è il valore che deve andare nella cella verde del foglio Form Ins?

    Cioè di quali criteri si deve tenere conto per la individuazione del prezzo giusto?

    Alfredo





  • di mimmo82 data: 11/05/2016 09:33:58

    in pratica in base alla combinazione, deve visualizzarmi il prezzo cliente(ho dimenticato di scrviere sulla cella "prezzo Cliente").

    Grazie e scusami



  • di cromagno data: 11/05/2016 10:03:27

    Ciao a tutti,

    @mimmo82

    nella cella E2 del foglio "Form Ins" potresti usare questa formula matriciale (quindi da confermare con la combinazione di tasti CTRL+MAIUSC+INVIO):

    =INDICE(DataBase!$G$1:$G$5;MIN(SE.ERRORE((1/(DataBase!$E$2:$E$5='Form Ins'!$D2))*(1/(DataBase!$C$2:$C$5='Form Ins'!B2))*(1/(DataBase!$B$2:$B$5='Form Ins'!$A2))*(1/(DataBase!$D$2:$D$5='Form Ins'!$C2))*RIF.RIGA($A$2:$A$5);"")))

    prende in considerazione tutte le scelte effettuate nel range A2:D2 del foglio "Form Ins".

    Ti riallego il file...



  • di mimmo82 data: 11/05/2016 10:15:58

    Grazie cromagno!

    una curiosità, perche nn hai utilizzato il cerca verticale?

    Cerco di capire la formula...ha un nome?

    Grazie infinte



  • di cromagno data: 11/05/2016 10:19:32

    Ciao,
    perchè il CERCA.VERT prende in esame un solo dato alla volta, quindi avrei dovuto usare 4 CERCA.VERT e dopo confrontarli con un'ennesima funzione (es. CONFRONTA) per trovare il valore cercato.

    Inoltre, il CERCA.VERT restituisce solo la prima corrispondenza trovata, quindi in caso di nomi o valori ripetuti (come nel tuo caso) non troverebbe la giusta corrispondenza.



  • di mimmo82 data: 11/05/2016 10:21:59

    ok, come si chiama questa funzionalità?

    Se cambio l'articolo da errore...

    Grazie infinite, soprattutt perche nn riuscivo a fare la vlookup con piu celle, ed ecco spiegato il perche.



  • di cromagno data: 11/05/2016 10:24:42

    La funzione principale è INDICE (come puoi vedere).

    Se ti da errore vuol dire che per le 4 scelte non c'è alcuna corrispondenza.



  • di mimmo82 data: 11/05/2016 10:26:01

    La scelta ce, ho solo sostituito nel menua tendina birra/pasta



  • di cromagno data: 11/05/2016 10:28:05

    Infatti,

    quindi con le scelte:
    Num. = 10
    Art = birra
    GG spedizioni = 5
    Fornitore = fornitore 1

    non c'è alcuna corrispondenza nel foglio "DataBase" che soddisfi tutte e quattro le scelte.



  • di cromagno data: 11/05/2016 10:31:59

    Modifica la fomula in questo modo per farti restituire il testo "Nessuna Corrispondenza":

    =SE.ERRORE(INDICE(DataBase!$G$1:$G$5;MIN(SE.ERRORE((1/(DataBase!$E$2:$E$5='Form Ins'!$D2))*(1/(DataBase!$C$2:$C$5='Form Ins'!B2))*(1/(DataBase!$B$2:$B$5='Form Ins'!$A2))*(1/(DataBase!$D$2:$D$5='Form Ins'!$C2))*RIF.RIGA($A$2:$A$5);NON.DISP())));"Nessuna Corrispondenza")



  • di mimmo82 data: 11/05/2016 10:43:33

    c ho provato ma mi da "#NAME?

    Cerco di studiare intanto questa formula



  • di cromagno data: 11/05/2016 10:46:35

    #NAME

    è l'errore che esce quando si è scritto una formula che non esiste (magari è stata scritta in maniera sbagliata) o si è usato male qualche suo argomento.

    Controlla se le funzioni (INDICE, SE.ERRORE, MIN, etc...) le hai scritte correttamente.



  • di mimmo82 data: 11/05/2016 10:57:16

    cromagno ma nella finestra "Function Argoments" nella sezione "Row_num" cosa serve la formula 1/database?

    MIN(IFERROR((1/(DataBase!$E$2:$E$5='Form Ins'!$D2))*(1/(DataBase!$C$2:$C$5='Form Ins'!B2))*(1/(DataBase!$B$2:$B$5='Form Ins'!$A2))*(1/(DataBase!$D$2:$D$5='Form Ins'!$C2))*ROW($A$2:$A$4);""))



  • di cromagno data: 11/05/2016 11:06:37

    Quel:
    1/database = "tuo valore"

    serve per restituire un errore in caso di corrispondenza non trovata e questo errore lo posso gestire con la funzione SE.ERRORE.

    Spiegarti la formula a pezzi non servirebbe a nulla se non hai almeno una base delle funzioni usate.

    Allega nuovamente il tuo file (con la formula che hai usato e che ti dà errore) per capire cosa c'è che non và.



  • di mimmo82 data: 11/05/2016 11:12:37

    ho allegato, ma penso che sia un problema di compatibilità lingue a cui sto sbattendo, grazie



  • di cromagno data: 11/05/2016 11:29:23

    Ciao,

    in effetti appena aperti il file mi dava errore ma riconfermando la formula (entrando nell'editor con F2 e riconfermando) ha riconosciuto le funzioni

    Comunque, nell'ultima formula che ti ho proposto c'era un errore dovuto ad una caratteristica della funzione MIN... e cioè che restituiva 0 (zero) invece di errore se i risultati erano tutti valori vuoti (i due doppi apici nella formula).
    Quindi sostituisci la funzione MIN(formula) con PICCOLO(formula;1):

    =SE.ERRORE(INDICE(DataBase!$G$1:$G$5;PICCOLO(SE(VAL.ERRORE((1/(DataBase!$E$2:$E$5='Form Ins'!$D2))*(1/(DataBase!$C$2:$C$5='Form Ins'!B2))*(1/(DataBase!$B$2:$B$5='Form Ins'!$A2))*(1/(DataBase!$D$2:$D$5='Form Ins'!$C2)));"";RIF.RIGA($A$2:$A$5));1));"Nessuna Corrispondenza")



  • di mimmo82 data: 11/05/2016 11:35:14

    perdonami, son entrato nell editor con "F2" mi evidenza ma non mi riconsoce la formula. In allegato



  • di cromagno data: 11/05/2016 11:41:53

    Ciao,
    non saprei che risponderti... a me funziona.

    Prova a sostituire la funzione INDICE con INDIRETTO:

    =SE.ERRORE(INDIRETTO("'DataBase'!G"&PICCOLO(SE(VAL.ERRORE((1/(DataBase!$E$2:$E$5='Form Ins'!$D2))*(1/(DataBase!$C$2:$C$5='Form Ins'!B2))*(1/(DataBase!$B$2:$B$5='Form Ins'!$A2))*(1/(DataBase!$D$2:$D$5='Form Ins'!$C2)));"";RIF.RIGA($A$2:$A$5));1));"Nessuna Corrispondenza")

    anche se non credo sia quello il problema....

    In alternativa si potrebbe scrivere un codice in VBA che dovrebbe essere uguale per tutte le versioni.



  • di mimmo82 data: 11/05/2016 11:52:00

    no, neanche con "INDIRETTO" funziona.
    Io continuo a pensare che il problema sia l'inserimento del codice in italiano, mentr eil mio excel è in inglese. Ma non esiste una funzioanltia "allinea/converti"...anche perche i file che prima mi hai allegato, li visualizzo correttamente, diversamente se lo edito io in italiano sul mio excel in inglese.



  • di cromagno data: 11/05/2016 11:55:20

    Ah... ok allora...

    la conversione delle formule avviene in automatico se apri un file e le formule sono già inserite ma se devi scrivere una formula nel tuo excel (versione inglese) devi per forza utilizzare le diciture in inglese.

    Quindi dovrai mettere INDEX al posto di INDICE etc...




  • di cromagno data: 11/05/2016 12:00:45

    Prova ad inserire questa formula:

    =IFERROR(INDEX(DataBase!$G$1:$G$5;SMALL(IF(ISERROR((1/(DataBase!$E$2:$E$5='Form Ins'!$D2))*(1/(DataBase!$C$2:$C$5='Form Ins'!B2))*(1/(DataBase!$B$2:$B$5='Form Ins'!$A2))*(1/(DataBase!$D$2:$D$5='Form Ins'!$C2)));"";ROW($A$2:$A$5));1));"Nessuna Corrispondenza")

    dovrei aver tradotto tutte le funzioni usate...comunque controlla.

    [EDIT]

    Avevo dimenticato di tradurre SE in IF... ora dovrebbe essere a posto



  • di mimmo82 data: 11/05/2016 12:04:00

    user-defined type not defined

    Mi fa specie che un colosso come office non abbia previsto questa "traslate" automatica del codice inserito.



  • di cromagno data: 11/05/2016 12:05:06

    Ho messo un EDIT prima... avevo dimenticato di tradurre la funzione SE.



  • di mimmo82 data: 11/05/2016 12:10:50

    ho inserito questo codice:

    =IFERROR(INDEX(DataBase!$G$1:$G$5;SMALL(IF(ISERROR((1/(DataBase!$E$2:$E$5='Form Ins'!$D2))*(1/(DataBase!$C$2:$C$5='Form Ins'!B2))*(1/(DataBase!$B$2:$B$5='Form Ins'!$A2))*(1/(DataBase!$D$2:$D$5='Form Ins'!$C2)));"";ROW($A$2:$A$5));1));"Nessuna Corrispondenza")

    stesso messaggio



  • di mimmo82 data: 11/05/2016 12:11:24

    non è che l errore è ISERROR?



  • di mimmo82 data: 11/05/2016 12:12:18

    aspe ora ci sto a ruota, prova ad allegare il file con questa formula e vediamo come mi converte il cod in inglese cosi capiamo lo sbaglio



  • di cromagno data: 11/05/2016 12:14:58

    Allegato... ma credo che le traduzioni siano giuste.

    Purtroppo dovrei avere il tuo pc sottomano per capirci di più.



  • di mimmo82 data: 11/05/2016 12:16:10

    PERFETTO!
    Per i piu smaliziosi, il testo del codice era questo:

    =IFERROR(INDEX(DataBase!$G$1:$G$5;SMALL(IF(ISERROR((1/(DataBase!$E$2:$E$5='Form Ins'!$D2))*(1/(DataBase!$C$2:$C$5='Form Ins'!B2))*(1/(DataBase!$B$2:$B$5='Form Ins'!$A2))*(1/(DataBase!$D$2:$D$5='Form Ins'!$C2)));"";ROW($A$2:$A$5));1));"Nessuna Corrispondenza")

    Non ho ancora capito l errore, ma nell ansia lo allego qua ahahah



  • di cromagno data: 11/05/2016 12:17:42



    non vedo differenze con la formula tradotta prima ma son contento che si è risolto



  • di mimmo82 data: 11/05/2016 12:18:44

    si vero!!!
    boh...grazie infinite!!!



  • di mimmo82 data: 11/05/2016 16:01:54

    cosa succede se la ricerca ha gli stessi campi ma il prezzo diverso? qual ' è il criterio?



  • di cromagno data: 11/05/2016 16:05:23

    Ciao,
    ho solo il cellulare al momento ma se ricordo bene il file, viene scelta la riga più bassa (il numero della riga), quindi il primo prezzo (che ha tutte e 4 le corrispondenze) a partire dall'alto.



  • di mimmo82 data: 11/05/2016 20:43:07

    quindi per modificare lo scritp che visualizza il prezzo piu basso devo incrementare la forumula con un MIN di...?



  • di cromagno data: 11/05/2016 21:12:04

    Ciao,
    no, dovresti eliminare la funzione INDICE e al posto di:
    RIF.RIGA($A$2:$A$5)

    usare:
    DataBase!$G$2:$G$5

    Quindi la formula diventerebbe:

    =SE.ERRORE(PICCOLO(SE(VAL.ERRORE((1/(DataBase!$E$2:$E$5='Form Ins'!$D2))*(1/(DataBase!$C$2:$C$5='Form Ins'!B2))*(1/(DataBase!$B$2:$B$5='Form Ins'!$A2))*(1/(DataBase!$D$2:$D$5='Form Ins'!$C2)));"";DataBase!$G$2:$G$5);1);"Nessuna Corrispondenza")

    Ti riallego il file ("Condizioni di scelta 5")....
    La nuova formula si trova nella cella E6.



  • di mimmo82 data: 11/05/2016 22:01:08

    do un occhiata, grazie 1000



  • di mimmo82 data: 20/05/2016 11:13:59

    ma...sono spariti gli allegati?

    Ma il vba è riconosciuto anche dai sistemi OpenOffice?