Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Condizioni multiple

  1. #1
    pgft non è in linea Novello
    Buongiorno a tutti.

    Sono un nuovo iscritto e sono alle prese con un problema che non so risolvere.

    Ho un foglio excel 2010 nel quale dovrei operare alcune scelte condizionate, annidando più funzioni "IF".
    Il problema è che excel 2010 non consente più di 64 annidamenti di "IF", mentre le possibili scelte sono 127.

    In pratica, se io ho un determinato valore nella cella A2, mi deve comparire un altro determinato valore nella cella B2. E così fino alla fine (al momento le righe sono oltre 132.000).

    Per fare un esempio di formula (ovviamente da inserire in cella B2):

    =SE(A1="Maria";"Femmina";SE(A1="Giorgio";"Maschio" ;SE(A1="";"Non valutabile";"")))

    Entrando nel dettaglio (sono un medico 118 e mi occupo di qualità dei processi) in una colonna ho dei codici, ciascuno dei quali corrisponde al nome di una determinata postazione. Al momento, con la funzione di filtro dei dati, seleziono le celle vuote e inserisco a mano i dati relativi alla denominazione della postazione e che corrispondono ai vari codici. Ma vorrei automatizzare le cose.

    Come dicevo il problema è che le possibili scelte sono ben 127, mentre Excel 2010 consente un annidamento massimo di 64 "SE".
    Girovagando sul web, ho letto della possibilità di usare la funzione "SCEGLI", ma non ho capito bene come procedere.

    Come posso ovviare?

    Grazie in anticipo.

  2. #2
    alfrimpa non è in linea Scolaretto
    Ciao

    Se le condizioni sono 127 io proverei ad utilizzare il VBA scrivendo una funzione personalizzata utilizzando l'enunciato Select Case

    la funzione andrà inserita in un modulo standard e potrà essere utilizzata sul foglio di lavoro come una qualsiasi funzione di Excel.

    Un esempio potrebbe essere:

    Function miose(a as variant)
    Select Case a
    case "condizione1"
    miose = "risultato1"
    !
    !
    !
    case "condizione127"
    miose = "risultato127"
    End Select
    End Function
    Sul foglio di lavoro basterebbe scrivere =miose(la tua cella da valutare)

    Alfredo

  3. #3
    pgft non è in linea Novello
    Quote Originariamente inviato da alfrimpa Visualizza il messaggio
    Ciao

    Se le condizioni sono 127 io proverei ad utilizzare il VBA scrivendo una funzione personalizzata utilizzando l'enunciato Select Case

    la funzione andrà inserita in un modulo standard e potrà essere utilizzata sul foglio di lavoro come una qualsiasi funzione di Excel.

    Un esempio potrebbe essere:



    Sul foglio di lavoro basterebbe scrivere =miose(la tua cella da valutare)

    Alfredo
    Ciao e grazie per la risposta velocissima.

    Il problema è che non so come si usa VBA. Ho attivato la Scheda "sviluppo" sulla barra delle funzioni, ma sono totalmente digiuno di programmazione VBA.
    Se fossi in ambiente FileMaker non ci sarebbero problemi, ma per vari motivi preferisco usare Excel.

    Potresti spiegarmi meglio? In particolare, come apro il modulo di cui parli? E come faccio poi a usare la funzione personalizzata nel mio spreadsheet?

    Grazie

    Pasquale

  4. #4
    alfrimpa non è in linea Scolaretto
    Ciao Pasquale

    Purtroppo il regolamento di questo Forum proibisce la fornitura di "soluzioni pronte".

    Comunque, sperando di non infrangere nessuna regola, prova a fare così:

    1) Apri l'Editor di VBA con Alt+F11
    2) Dal menù Inserisci scegli Modulo
    3) Nella finestra a destra copia ed incolla la funzione che ti ho scritto ovviamente modificandola con le tue condizioni ed i relativi risultati.
    4) Nel foglio di lavoro scrivi =miose(A1) e dai Invio

    Prova a scrivere la funzione secondo le mie indicazioni; se non va postala sul forum che proviamo a correggere.

    Alfredo

  5. #5
    pgft non è in linea Novello
    Quote Originariamente inviato da alfrimpa Visualizza il messaggio
    Ciao Pasquale

    Purtroppo il regolamento di questo Forum proibisce la fornitura di "soluzioni pronte".

    Comunque, sperando di non infrangere nessuna regola, prova a fare così:

    1) Apri l'Editor di VBA con Alt+F11
    2) Dal menù Inserisci scegli Modulo
    3) Nella finestra a destra copia ed incolla la funzione che ti ho scritto ovviamente modificandola con le tue condizioni ed i relativi risultati.
    4) Nel foglio di lavoro scrivi =miose(A1) e dai Invio

    Prova a scrivere la funzione secondo le mie indicazioni; se non va postala sul forum che proviamo a correggere.

    Alfredo
    OK, grazie.

    Ci provo e ti faccio sapere.

    Forse ci metterò un po' di tempo...

    Pasquale

  6. #6
    alfrimpa non è in linea Scolaretto
    Ma scrivi 4/5 condizioni (giusto per testare) e lo fai in un attimo.

    Quando avrai verificato che la funzione opera correttamente la integrerai con tutte le condizioni necessarie.

    Se non va bene posta solo la funzione "ridotta"

    Alfredo

  7. #7
    pgft non è in linea Novello
    Quote Originariamente inviato da alfrimpa Visualizza il messaggio
    Ciao

    Se le condizioni sono 127 io proverei ad utilizzare il VBA scrivendo una funzione personalizzata utilizzando l'enunciato Select Case

    la funzione andrà inserita in un modulo standard e potrà essere utilizzata sul foglio di lavoro come una qualsiasi funzione di Excel.

    Un esempio potrebbe essere:



    Sul foglio di lavoro basterebbe scrivere =miose(la tua cella da valutare)

    Alfredo
    Carissimo Alfredo,
    non so come ringraziarti, perchè mi hai risolto il problema.

    Ho seguito i tuoi consigli e ho costruito una macro, che funziona alla grande. Naturalmente, ci ho messo un po' di tempo ma il risultato è eccellente.
    Adesso, sulla falsariga di questo esempio, costruirò le altre macro che mi servono.

    Ho solo notato che con le macro il processo di salvataggio dello spreadsheet si rallenta un po', ma credo che sia una caratteristica di Excel.

    Grazie ancora.

    Pasquale

  8. #8
    alfrimpa non è in linea Scolaretto
    Scusa Pasquale ma, ripensandoci, forse potresti costruire una tabellina con tutte le condizioni e poi con un semplice CERCA.VERT andarti a pescare il valore voluto; in questo caso potresti fare a meno del VBA.

    Ma, non conoscendo la struttura dei tuoi dati, la mia era solo un'idea forse bislacca.

    Per focalizzare meglio l'attenzione potresti allegare (con Filedropper, Dropbox ecc.) un file che rispecchi la struttura del tuo senza dati sensibili specificando meglio la tua necessità.

    Alfredo

    P.S. Mentre scrivevo mi hai risposto. Sono contento che tu abbia risolto da solo e brillantemente il tuo problema.
    Quanto ai tempi di salvataggio del file, non credo, ma potrei anche sbagliarmi, che la presenza di macro possa influire più di tanto.

    Ed infine, se vuoi scrivere altre macro, tieni presente che quella che hai fatto è una Function.

    In VBA è possibile scrivere due tipi di procedure: Sub e Function.

    Le Sub sono un insieme di codice VBA che permettono l'esecuzione di un'azione (es. copiare dati, spostarli, salvare un file, applicare un formato e mille altre cose).

    Le Function, invece, sono procedure che non compiono azioni ma restituiscono risultati in base ai parametri passati nella Function (nel tuo caso la cella da valutare) e delle regole di calcolo dettate dalle istruzioni VBA (nel tuo caso i vari Select Case).

    Ma ora mi fermo altrimenti non finirei più.

    Un saluto.

    Alfredo
    Ultima modifica di alfrimpa; 13-03-2015 15:18 

  9. #9
    ricky53 non è in linea Scribacchino
    Ciao,
    leggi il messaggio precedente di Alfredo.

    Che versione di Office utilizzi?

    Normalmente una macro non rallenta il salvataggio a meno che non sia enorme.

    Da quante righe di codice è/sono costituita/e la tua/tue macro?

    Il rallentamento si ha in modo evidente, invece, con tante formule, in particolari le "matriciali"
    ℹ️ Leggi di più su ricky53 ...

  10. #10
    pgft non è in linea Novello
    Quote Originariamente inviato da alfrimpa Visualizza il messaggio
    Scusa Pasquale ma, ripensandoci, forse potresti costruire una tabellina con tutte le condizioni e poi con un semplice CERCA.VERT andarti a pescare il valore voluto; in questo caso potresti fare a meno del VBA.

    Ma, non conoscendo la struttura dei tuoi dati, la mia era solo un'idea forse bislacca.

    Per focalizzare meglio l'attenzione potresti allegare (con Filedropper, Dropbox ecc.) un file che rispecchi la struttura del tuo senza dati sensibili specificando meglio la tua necessità.

    Alfredo

    P.S. Mentre scrivevo mi hai risposto. Sono contento che tu abbia risolto da solo e brillantemente il tuo problema.
    Quanto ai tempi di salvataggio del file, non credo, ma potrei anche sbagliarmi, che la presenza di macro possa influire più di tanto.

    Ed infine, se vuoi scrivere altre macro, tieni presente che quella che hai fatto è una Function.

    In VBA è possibile scrivere due tipi di procedure: Sub e Function.

    Le Sub sono un insieme di codice VBA che permettono l'esecuzione di un'azione (es. copiare dati, spostarli, salvare un file, applicare un formato e mille altre cose).

    Le Function, invece, sono procedure che non compiono azioni ma restituiscono risultati in base ai parametri passati nella Function (nel tuo caso la cella da valutare) e delle regole di calcolo dettate dalle istruzioni VBA (nel tuo caso i vari Select Case).

    Ma ora mi fermo altrimenti non finirei più.

    Un saluto.

    Alfredo
    Carissimo Alfredo,

    ci tengo a precisare che non ho risolto "da solo" il problema. Se non ci fossi stato tu io non avrei saputo da dove cominciare.
    Ho una buona esperienza di programmazione in FileMaker e avevo pensato di trasferire il tutto. Ma purtroppo FileMaker non ha la semplicità di uso delle tabelle pivot di Excel o delle funzioni grafiche. Si possono fare, ma sono molto più indaginose.

    Ribadisco i ringraziamenti, perchè il problema lo hai risolto tu: io ho semplicemente fatto da amanuense e ho imparato una tecnica che mi potrà servire in futuro. Mi fermo alle Functions: per le Sub vedremo...

    Quanto al postare il file, purtroppo non lo posso fare per via dei dati sensibili. Ti dico solo che è un tabulato di controllo da parte della mia azienda (il 118 di Roma) nei confronti di una azienda esterna che si occupa di lavaggio delle divise.
    Noi dobbiamo sapere quali postazioni mettono a lavare le divise (anche perchè vengono pagati bei soldini...) ma la ditta utilizza codici astrusi per individuare le postazioni, codici che differiscono dai nostri, e quindi bisogna fare questo lavoro di aggiornamento del tabulato.

    Prima del tuo prezioso intervento, io filtravo le celle vuote nelle varie colonne e inserivo i dati a mano.
    Come puoi immaginare era un lavoraccio infame.
    Adesso la cosa è automatica. Certo, fra scrittura della function, controllo, debug e.... pausa pranzo ci ho messo un'oretta di lavoro, ma da domani è tutto più semplice.

    Grazie ancora.

    Pasquale

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. query multiple
    Da retlaw nel forum Microsoft Access
    Risposte: 3
    Ultimo Post: 04-04-2013, 13:11
  2. Istanze multiple
    Da bahnzy nel forum Visual Basic 6
    Risposte: 1
    Ultimo Post: 26-01-2011, 22:32
  3. [Excel] Condizioni multiple
    Da Rapido nel forum Microsoft Excel
    Risposte: 2
    Ultimo Post: 18-02-2010, 10:39
  4. Stampanti multiple
    Da Eurofolle nel forum Visual Basic 6
    Risposte: 1
    Ultimo Post: 28-11-2007, 14:25
  5. Condizioni multiple
    Da coccobil nel forum PHP
    Risposte: 4
    Ultimo Post: 22-05-2006, 21:14