Excel e gli applicativi Microsoft Office LAMBDA e ricorsione – mettiamoli all'opera

Login Registrati
Stai vedendo 8 articoli - dal 1 a 8 (di 8 totali)
  • Autore
    Articoli
  • #52683 Score: 0 | Risposta

    LucaSR
    Partecipante
      15 pts

      Ciao a tutti, vi propongo questa piccola sfida, per sfruttare, quando possibile, la combinazione di LAMBDA e  la ricorsione per ottenere qualcosa di carino.

      Mi spiego meglio:

      - data una stringa iniziale, restituire la posizione del "." (mi serviva il punto ed ho creato una funzione dedicata, ma si potrebbe estendere tranquillamente a qualsiasi carattere) in base a quale occorrenza se ne voglia sapere la posizione. Nel caso in cui la stringa sia vuota o si voglia ottenere la posizione di un occorrenza non presente deve ritornare "0".

      L'ho chiamata TROVA.PUNTO(testo_Da_Elaborare;tipo_Ricerca;posizione_Iniziale;occorrenza) dove:

      - testo_Da_Elaborare (non ha bisogno di spiegazioni)

      - tipo_Ricerca (serebbe quale punto, 1, 2, 3, etc)

      - posizione_Iniziale (parametro opzionale, se capissi come fare - parte da 0 ed è il contatore della posizione di ritorno)

      - occorrenza (parametro opzionale, se capissi come fare - parte da 0 ed è un contatore interno dell'occorrenza attuale trovata)

      Logicamente sono passato da gestione nomi, detto questo fatemi sapere così poi vi propongo la mia soluzione   

      #52688 Score: 0 | Risposta

      LukeReds
      Partecipante
        19 pts

        ciao,

        ho tempo solo per rispondere ad una parte di quesito (la posizione del punto in una cella). Nomefunzione = trovaC

        Se la cella è A1

        =LAMBDA(s;n;p;SE(SINISTRA(s)=".";n;trovaC(DESTRA(s;LUNGHEZZA(s)-1);n+1;1)))(A1;1;1)

        Un se.errore all'inizio per far uscire 0 in caso di errore

        Certo che la formula =SE.ERRORE(TROVA(".";A1;B1);0) risolve tutto il problema in un lampo, le lambda ricorsive non sono  proprio il massimo (tra l'altro, parere personale, è più semplice imparare 3 istruzioni di vba che le lambda ricorsive)

         

        #52690 Score: 0 | Risposta

        LucaSR
        Partecipante
          15 pts

          ciao forse non ci siamo capiti, lo scopo non è trovare il punto in una stringa, ma creare una funzione che trovi la posizione del punto dinamicamente senza ogni volta stare li a riscrivere la formula ed adattarla.

           

          #52691 Score: 0 | Risposta

          gianfranco55
          Partecipante
            91 pts

            ciao

            In Gestione Nomi
            TrovaPunto=LAMBDA(testo_Da_Elaborare;carattere_Da_cercare;tipo_Ricerca;posizione_Iniziale;LET(s;SEQUENZA(LUNGHEZZA(testo_Da_Elaborare));f;SE(STRINGA.ESTRAI(testo_Da_Elaborare;s;1)=carattere_Da_cercare;s);SE.ERRORE(INDICE(FILTRO(f;f*(f>=tipo_Ricerca);FALSO);tipo_Ricerca);0)))
            dove vuoi, trova tutte le posizioni:
            =TrovaPunto(A1;".";;)
            ad esempio se vuoi la seconda occorrenza (9):
            =TrovaPunto(A1;".";2;)
            se vuoi la seconda, ma dal 7° carattere in poi (15)
            =TrovaPunto(A1;".";2;7)
            se ometti un parametro è uguale a FALSO (e quindi zero).

            #52693 Score: 0 | Risposta

            LukeReds
            Partecipante
              19 pts

              ciao,

              mi pare che la posizione del punto sia esattamente quanto ottenuto dalla formula sopra (immagine)

              trovaC va inserita in gestione nomi

              Comunque  la funzione TROVA, come ho indicato sppta: =SE.ERRORE(TROVA(".";A1;B1);0)) è la soluzione al problema, con l'ultimo parametro dici alla funzione da quale carattere iniziare la ricerca. Ribadisco le mie perplessità sull'utilità pratica di lambda ricorsiva

               

               

              Allegati:
              You must be logged in to view attached files.
              #52695 Score: 0 | Risposta

              gianfranco55
              Partecipante
                91 pts

                ciao

                LUK

                è una piccola sfida per usare LAMBDA nella realtà difficilmente useremo una formula

                così ostica

                #52696 Score: 0 | Risposta

                LucaSR
                Partecipante
                  15 pts

                  Ciao per me non è stata così piccola    non avevo ancora avuto l'occasione di provare LAMBDA e diciamo che come inizio nn c'è male!!!

                  Edit: nel pomeriggio provo le vostre formule 

                  #52701 Score: 0 | Risposta

                  LucaSR
                  Partecipante
                    15 pts

                    Ciao ho fatto delle prove, non è che mi siano piaciute del tutto.

                    Mi sono accorto che avevo testato male la mia funzione TROVA.PUNTO, come potete vedere dall'immagine allegata non sempre tutte e 3 le funzioni riportano il risultato corretto (sempre che io non abbia sbagliato ad interpretare i vostri parametri).

                    Allego anche il file dove ho fatto le prove, magari così se avessi sbagliato qualcosa potreste intervenire e riproporre.

                    Intanto stasera, tempo permettendo, dovrò rivedere la mia funzione!   

                    che riporto di seguito:

                    =LAMBDA(testo_Da_Elaborare;tipo_Ricerca;posizione_Iniziale;occorrenza; 
                    LET(str;testo_Da_Elaborare; 
                    tipoRic;tipo_Ricerca; 
                    pos;posizione_Iniziale+1; 
                    lungh;LUNGHEZZA(str); 
                    SE(str=""; 
                    0; 
                    SE(SINISTRA(str;1)="."; 
                    SE(occorrenza=tipoRic-1; 
                    pos; 
                    TROVA.PUNTO(DESTRA(str;lungh-1);tipoRic;pos;occorrenza+1)); 
                    SE(lungh>1; 
                    TROVA.PUNTO(DESTRA(str;lungh-1);tipoRic;pos;occorrenza);
                    0)))))
                    Allegati:
                    You must be logged in to view attached files.
                  Login Registrati
                  Stai vedendo 8 articoli - dal 1 a 8 (di 8 totali)
                  Rispondi a: LAMBDA e ricorsione – mettiamoli all'opera
                  Gli allegati sono permessi solo ad utenti REGISTRATI
                  Le tue informazioni: