Funzione Trova a ritroso



  • Funzione Trova a ritroso
    di alfrimpa data: 07/08/2015 12:26:06

    Piccola domandina facile facile

    Come tutti sappiamo la funzione Trova restituisce la posizione di una stringa a partire dalla sinistra;

    Esempio se in A1 ho la stringa aaa.bbb.ccc e scrivo

    =TROVA(".";A1;1) viene restituito 4

    Se volessi estrapolare le lettere dopo l'ultimo punto come si dovrebbe fare senza VBA?

    Ho scritto la sottostante Function che lo fa ma mi piacerebbe sapere se esiste una possibilità "nativa" in Excel e possibilmente senza una "megaformula".

    Grazie

    Alfredo
     
    Function miotrova(a)
    Dim i As Integer
    For i = Len(a) To 1 Step -1
        If Mid(a, i, 1) = "." Then
                Exit Function
            Else
                miotrova = miotrova & Mid(a, i, 1)
        End If
    Next i
    End Function
    






  • di Marius44 data: 07/08/2015 12:45:20

    Ciao Alfredo
    se il tuo scritto è un B2, nella cella D2 scrivi
    =DESTRA(B2;RICERCA(".";B2;1)-1)

    Prova e fammi sapere. Ciao,ùMario



  • di Vecchio Frac data: 07/08/2015 13:15:10

    cit. "Ho scritto la sottostante Function che lo fa ma mi piacerebbe sapere se esiste una possibilità "nativa" in Excel"
    ---> Senza reinventare l'acqua calda, l'istruzione VBA che cerchi è "InStrRev()":
    debug.print Mid(stringa, InStrRev(stringa, ".") + 1) ---> se "stringa" vale "aaa.bbb.ccc.ddd" il risultato è 12

    In formula non credo che esista il corrispondente, ma la soluzione di Marius mi sembra corretta.





  • di Vecchio Frac data: 07/08/2015 13:21:47

    La tua Function non fa quello che dici, perchè restituisce quanto trova dopo un eventuale punto, ma inverte tutte le lettere. Inoltre consuma tutto il ciclo For anche dopo aver trovato l'eventuale punto.
    Vedi versione corretta.
     
    Function miotrova(a) As String
    Dim i As Integer
        For i = Len(a) To 1 Step -1
            If Mid(a, i, 1) = "." Then
                miotrova = Mid(a, i + 1)
                Exit Function
            End If
        Next i
        miotrova = a
    End Function






  • di alfrimpa data: 07/08/2015 13:31:22

    Ciao Mario e VF

    la formula di Mario non funziona perché

    se la stringa è aaaa.bbbb.cccc restituisce correttamente cccc

    ma se è aaaa.bbbb.cc restituisce b.cc e

    se è aaaa.bbbb.c restituisce bb.c

    La function di VF funziona perfettamente.

    Grazie ad entrambi

    Alfredo






  • di Luca73 data: 07/08/2015 13:57:07

    Ciao
    prova un po' questa (pura formula) la parola è in E7, la formula è matriciale

    =DESTRA(E7;LUNGHEZZA(E7)-MAX(SE.ERRORE(TROVA(".";E7;RIF.RIGA(SCARTO($A$1;0;0;LUNGHEZZA(E7)-1)));0)))

    Ciao
    Luca





  • di alfrimpa data: 07/08/2015 14:03:56

    Grazie anche a te Luca.

    Quello che mi chiedevo è come mai se la ricerca deve essere fatta da sinistra verso destra c'è la semplicissima funzione Trova.

    Se invece la ricerca va fatta al contrario bisogna "inventarsi" degli arzigogoli più o meno complessi.

    Non potevano mettere in Excel "un altro Trova" che lo faceva?

    Questa è una mancanza che mi perplime.

    Alfredo





  • di Marius44 data: 07/08/2015 14:33:22

    Ciao Alfredo
    Non per essere pignolo ma ho detto "se il TUO SCRITTO" e mi riferivo alle lettere da te postate. Ma, comunque, credo che la formula di Luca sia la più adatta.

    Hai ragione. I soloni di Richmond poteva inserire qualcosa "a ritroso".
    Ciao,
    Mario



  • di alfrimpa data: 07/08/2015 14:36:41

    Si Mario io ho copiato la tua formula e, poichè la mia stringa era in A1, ho sostituito nella formula B2 con A1 (forse avrò sbagliato qualcosa?).

    Si effettivamente è una mancanza incomprensibile.

    Grazie ancora Mario.

    Alfredo





  • di gdito data: 07/08/2015 14:39:10

    Ciao,
    ti do anche la mia soluzione che uso ogni volta che devo estrarre l'ultima parola di una stringa. Sostituisci il "." con il simbolo che vuoi :)

    =STRINGA.ESTRAI(A2;RICERCA(CODICE.CARATT(254);SOSTITUISCI(A2;".";CODICE.CARATT(254);LUNGHEZZA(A2)-LUNGHEZZA(SOSTITUISCI(A2;".";""))))+1;LUNGHEZZA(A2))

    Se vuoi ti posto link all'articolo che ho scritto proprio per questo motivo (se si possono inviare link sul forum, si può? )

    Gianfranco



  • di Vecchio Frac data: 07/08/2015 14:50:16

    Posta pure il link ma ometti il protocollo oppure interponi degli spazi (ad esempio h t t p, w w w ) altrimenti il parser del forum non lo permette (come misura antispam).





  • di alfrimpa data: 07/08/2015 14:54:02

    Rimane la mia perplessità che da sinistra hai Trova, da destra devi scrivere una formula chilometrica o una UDF

    Alfredo





  • di gdito data: 07/08/2015 14:54:21

    Grazie per l'info vecchio frac

    Se vi interessa il link è h t t p://w w w.tuttoexcel.it/2015/07/31/estrarre-lultima-parola-da-una-cella/ ovviamente senza spazi



  • di Vecchio Frac data: 07/08/2015 14:56:58

    E se vogliamo giocare ho trovato questa (@gdito la tua soluzione fallisce se non si trova il delimitatore, il punto nel tuo caso).

    =ANNULLA.SPAZI(DESTRA(SOSTITUISCI(A1; " "; RIPETI(" "; 100)); 100))

    edit
    Aggiungo che naturalmente basta sostituire il primo spazio con il simbolo che fa da delimitatore. Nel caso del punto diventa:
    =ANNULLA.SPAZI(DESTRA(SOSTITUISCI(A1; "."; RIPETI(" "; 100)); 100))





  • di Vecchio Frac data: 07/08/2015 14:58:47

    @alfredo
    Apriamo un ticket a Microsoft? ^_^





  • di Vecchio Frac data: 07/08/2015 15:02:43

    @gdito
    Carino il tuo sito... ti manca una sezione "Chi sono" per presentarti e magari un Guestbook per ricevere le impressioni dei visitatori. Mettici anche un bel contatore visite e buon proseguimento di attività ;)





  • di gdito data: 07/08/2015 15:06:17

    @Vecchio frac
    Grazie!!!... il "Chi sono" al momento lo si può leggere cliccando sul mio nome in qualunque articolo ma accetto il consiglio di metterlo sul menu, idem per il guestbook, è già in cantiere. Prima però devo cambiare tema, ne voglio uno che sia più leggibile da dispositivi mobili, ci sto lavorando



  • di alfrimpa data: 07/08/2015 15:07:03

    Cit. VF "Apriamo un ticket a Microsoft? ^_^"

    Si così ci mandano a "Vancouver"

    Alfredo





  • di Luca73 data: 07/08/2015 15:09:50

    @ VF bella formula diverso modo di affrontare il problema. io l'ho affrontato in maniera diretta questa formula lo affronta invece cercando di "fregare" excel. nel caso io ho cercato il numero di caratteri dopo il punto invece questa formula sfrutta che non avrai mai parole coì lunghe e eprtanto se cerco gli ultimi 100 caratteri di cui quasi tutti sono spazi.....fallirebbe nel caso avessi uno spazio subito dopo il punto....





  • di Vecchio Frac data: 07/08/2015 15:11:10

    @gdito
    Ora che hai rotto il ghiaccio ti aspettiamo qui: Esercizio 13
    ^_^





  • di Vecchio Frac data: 07/08/2015 15:12:42

    @Luca
    E' Ninai quello che gode a fregare Excel ^_^
    Io come sai sono una foca con le formule e perciò scopiazzo dalla rete :P (invece su VBA sono più serio e mi impegno di mio, infatti sbaglio di più!!)





  • di gdito data: 07/08/2015 15:13:22

    @Vecchio Frac
    hai ragione per quanto riguarda l'errore nella mia formula ma davo per scontato che ci fosse sempre il delimitatore. Basta poco per evitare errori, se il delimitatore non c'è si metter la stringa intera

    =SE.ERRORE(STRINGA.ESTRAI(A2;RICERCA(CODICE.CARATT(254);SOSTITUISCI(A2;".";CODICE.CARATT(254);LUNGHEZZA(A2)-LUNGHEZZA(SOSTITUISCI(A2;".";""))))+1;LUNGHEZZA(A2));A2)

    Ed il gioco è fatto

    Grazie per la segnalazione



  • di Vecchio Frac data: 07/08/2015 15:15:04

    @alfrimpa
    cit. "Si così ci mandano a "Vancouver"
    ---> E noi andiamo a Chicago :)





  • di Raffaele_53 data: 07/08/2015 15:22:40

    Dato che i punti sono due =STRINGA.ESTRAI(A1;RICERCA("@";SOSTITUISCI(A1;".";"@";2))+1;4)
    oppure cambiare il 2