Buon pomeriggio @Tanzyn.
@Tanzyn, in risposta #8, scrive:
Come puoi ben vedere nell'immagine allegata alla risposta #7 in Colonna "B" la stringa riporta i Nominativi senza ". " finale.... Anche mettendo il punto alla fine di ogni nome nei singoli fogli e toglierlo nell'intermezzo fra X, Y e Z (non ". " ma " "), nel caso in cui Y1 fosse vuoto mi restituirebbe doppio spazio fra il nome in X1 e il nome in Z1. Potrei anche soprassedere, ma il risultato del concatena poi va copiato in un altro documento (una web app) e non è proprio bello da vedere. ...
Per fare ciò la Formula a cui avevo pensato comprendeva l'istruzione:
STRINGA.ESTRAItramite la quale escludevo gli ultimi due caratteri.
A disposizione.
Giuseppe
Non ti seguo, non è una quarta condizione; le condizioni sono sempre le tre che hai espresso tu:
1) Il valore è stato trovato;
2) il valore è vuoto;
3) L'errore #N/D perché il valore non c'è.
Va bene non dare la pappa pronta, ma almeno mettere l'acqua nel pentolino. La formula che hai proposto tu restituisce "NO" se uno dei tre CERCA.VERT è uguale a zero oppure un errore, invece a me serve che se uno dei tre è un errore lo ignori e concateni gli altri due.
Ho provato così ma il risultato è sempre "No"
=SE(SE.ERRORE(O(E(C2>0;D2>0;E2>0));VERO);"No";CONCATENA(C2;". ";D2;". ";E2))Ho anche provato a inserire un CERCA.VERT nidificato in un SE.ERRORE nelle colonne di servizio
=SE.ERRORE(CERCA.VERT(A2;Foglio3!$A$2:$B$5;2;FALSO);"/ ")ma nel CONCATENA
=CONCATENA(C2;". ";D2;". ";E2)Mi restituisce "Marco. pippo. " con lo spazio finale, perché appunto non ignora l'errore.
iao Giuseppe, ho provato a studiare la funzione INDIRETTO, ma non ho capito come applicarla al mio caso dato che non ho un nome univoco definito
Applicando però, come dicevo prima, il CERCA.VERT nidificato in un SE.ERRORE nelle colonne di servizio
=SE.ERRORE(CERCA.VERT(A2;Foglio3!$A$2:$B$5;2;FALSO);"/")e successivamente STRINGA.ESTRAI con un TROVA, sono effettivamente riuscito a togliere il "/" alla fine. Il problema è quando il "/" restituito dal SE.ERRORE si trova nel mezzo piuttosto che alla fine...
Buona sera @Tanzyn.
@Tanzyn in #8, scrive:
Nel Foglio di lavoro "Foglio4" ho aggiunto otto Colonne, vedi immagine in allegato....il foglio 4 ha già altre 8 colonne. ...
Nella Cella "K2" potresti provare a sostituire la tua Formula con:
=SE.ERRORE(CERCA.VERT($A2;INDIRETTO(K$1&"!$A2:$H1300");2;0)&". ";"")da copiare nel Range K2:M5
In Cella "B2" potresti provare ad utilizzare la Formula:
=SE($K2=". ";"NO";STRINGA.ESTRAI(($K2&$L2&$M2);1;LUNGHEZZA($K2&$L2&$M2)-2))da copiare nelle Celle sottostanti.
Fai sapere se può essere una possibile soluzione.
Buona serata.
Giuseppe
E tu gestisci l'eventualità direttamente nella formula:
=CONCATENA(C2; SE(VAL.ERRORE(D2);"";". ");D2;SE(VAL.ERRORE(E2);"";". ");E2)Così facendo, concateni il punto solo se dopo non hai un errore...
P.S: la formula [O(E(C2>0;D2>0;E2>0))] non ha senso... Così ritornerà sempre il risultato della [E]. La [O] è inutile...
Ciao Giuseppe, sì è una buona soluzione e funziona correttamente anche se, in tutta sincerità ho difficoltà a capire l'indiretto nidificato nel CERCA.VERT. Ma è un modo per studiarmelo.
La formula per come l'hai scritta non funziona, perché comunque anche se non concatena il punto in presenza di un errore, trova concatena comunque l'errore che trova in C2, D2 o E2. Ti allego lo screenshot per capire cosa intendo:
P.S. come fai a caricare l'immagine come allegato?
Però, ispirandomi alla tua soluzione ho creato una cosa di questo tipo:
Nelle colonne di servizio ho nidificato il CERCA.VERT in un SE.ERRORE, come spiegato nel post #13, inserendo un "/" in caso di errore.
Dopo di che ho creto questo CONCATENA:
=SE(O(C2=0;D2=0;E2=0);"NO";CONCATENA( SE(C2="/";"";C2);SE(D2="/";"";". "); SE(D2="/";"";D2);SE(E2="/";"";". "); SE(E2="/";"";E2)))Adesso posso anche provare a nidificare il cerca.vert direttamente nei SE del CONCATENA e togliere le colonne di servizio. La formula rimane comunque piuttosto semplice.
Grazie a entrambi per i suggerimenti.![]()
Ultima modifica di Tanzyn; 27-01-2021 13:45
Ottimo! Lieto di averti aiutato. L'esempio di Giuseppe studialo che lui ha sempre delle ottime idee.
A mettere la ciliegina sulla torta, ti basta strutturare il CONCATENA così:
=CONCATENA(C2; SE(VAL.ERRORE(D2);"";". ");SE.ERRORE(D2;"");SE(VAL.ERRORE(E2);"";". ");SE:ERRORE(E2;""))Che adopera la logica che hai già applicato.
Come ti dicevo, devi valutare con attenzione se la sostituzione dei CERCA.VERT va a rallentare il ricalcolo del foglio di lavoro.
Sì, in pratica evito il SE.ERRORE nei CERCA.VERT. Dovendo provare a nidificarli e togliere le tre colonne probabilmente questa soluzione è più "elegante".
La lentezza nel ricalcolo non dipende anche dal computer? Volevo provare anche a metterlo su sharepoint per condividerlo con i colleghi, quindi devo anche valutare se rallenta in quel caso.
Edit: scusate mi è venuta un'altra idea. Vorrei fare in modo che, se uno o due dei tre CERCA.VERT dà errore, vada a prendere il nome del foglio dove si è verificato e lo inserisca in un CONCATENA. In sostanza creare una risposta del tipo: "Foglio1+Foglio3". Ammesso che esista una funzione che legga il nome del foglio, avete suggerimenti su come poter fare una cosa del genere?
Ultima modifica di Tanzyn; 27-01-2021 16:16
Adatta i SE.ERRORE nella CONCATENA in modo che al posto di una stringa vuota restituisca il nome del foglio, ammesso che tu voglia vedere il risultato sempre nelle stesse celle in cui fai comparire i valori finali.
Se invece stai usando la soluzione di Giuseppe, ti basta far riportare l'argomento della funzione INDIRETTO.