etichettare stringhe di testo



  • etichettare stringhe di testo senza vba
    di patel data: 06/03/2016 17:32:41

    in un estratto conto vorrei etichettare le varie descrizioni verificando se nel testo è compresa una parola presa da una lista e lo vorrei fare senza macro o UDF. Allego il file col risultato desiderato





  • di Marius44 data: 06/03/2016 19:03:36

    Ciao Andrea
    Premesso che la CONAD dovrebbe stare nella riga 7 e non nella 8, l'unica cosa che mi viene in mente è creare un elenco (magari in altro foglio) delle sigle che ti interessano e poi far cercare all'interno della stringa se c'è una corrispondenza, con STRINGA.ESTRAI oppure TROVA, ecc.

    Ciao,
    Mario




  • di patel data: 06/03/2016 19:23:14

    non sono molto ferrato con le formule, ci ho provato ma senza risultato.





  • di Marius44 data: 06/03/2016 21:51:36

    con questa formula si estrae dalla stringa in col.A il nome in G2

    =STRINGA.ESTRAI(A2;TROVA(G2;A2;LUNGHEZZA(G2));LUNGHEZZA(G2))

    Bisogna riuscire a "far leggere" tutti i nomi che ci sono nell'intervallo G2:G5 e, poichè anch'io non vado molto d'accordo con le formule, qui mi sono arenato.

    Spero che qualche amico che "mastica" formule ci dia un'imbeccata.

    Ciao,
    Mario



  • di patel data: 07/03/2016 11:05:02

    io ho provato con una serie di SE annidati e con RICERCA, ma senza risultato.
    Con una UDF è banale, nessuno ci riesce con le formule ?
     
    Function Ric(Cella, Lista) ' assegnare il nome elenco al range con le etichette
     For i = 1 To Ubound(Lista)
       if Instr(Cella, Lista(i,1)) > 0 Then 
          Ric = Lista(i,1)
          exit Function    
       Else  
          Ric = ""
       End if  
     Next i
    End Function






  • di Marius44 data: 07/03/2016 16:07:12

    Ciao Andrea
    ma avevi detto "senza" macro o UDF
    Se vuoi, adattando una macro di scossa (che saluto e dal quale ho attinto molto) potresti usare quanto sotto riportato (per comodità allego anche il file).
    E' impostato per le righe A2:A20 e H2:H5 - non mancherà a te adattarle.

    Ciao a fai sapere,
    Mario 
     
    Public Sub etichetta()
    Dim rCell As Range, rng As Range, nAt As Long
    On Error GoTo Evidence_Error
    Set rng = ActiveSheet.Range("A2:A20")
    For i = 2 To 5
        parola = Range("H" & i).Text
        For j = 1 To 20
            For Each rCell In rng(j, 1)
                With rCell
                    nAt = InStr(.Text, parola)
                    If nAt > 0 Then
                        .Offset(0, 1) = parola
                    End If
                End With
            Next
        Next j
        On Error GoTo 0
    Next i
    Exit Sub
    Evidence_Error:
      If Err.Number <> 0 Then
        MsgBox Err.Description, vbCritical, "ERRORE"
      End If
    End Sub
    
    Public Sub cancella()
        Columns(2).ClearContents
    End Sub
    



  • di patel data: 07/03/2016 16:12:25

    l'ho detto perché col vba l'avevo già risolto, la sfida è quella delle formule. Ho aggiunto la soluzione con UDF per non far apparire il problema come insolubile ai meno esperti.





  • di Raffaele53 data: 08/03/2016 04:54:09

    Ciao a tutti

    >>>vorrei etichettare le varie descrizioni
    Se sono descritte in colonna B
    In C2 =SE(B2="";"manca il dato in B";SE(RICERCA(B2;A2;1)>0;VERO;FALSO))

    Fosse in altro range, bisogna usare anche INDICE, mà qui mi arrendo. Proverò



  • di scossa data: 08/03/2016 08:42:04

    Ciao Mario,

    l'istruzione Exit Sub è "un pugno nell'occhio" (ovviamente opinione personale) e, se guardi bene il flusso del codice, non serve a nulla ....


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)



  • di scossa data: 08/03/2016 09:07:43

    cit.: "Con una UDF è banale, nessuno ci riesce con le formule ?"

    questa, scritta al volo, può essere uno spunto:
    =INDICE($H$2:$H$5;CONFRONTA(1;SE.ERRORE(TROVA($H$2:$H$5;A8)^0;0);0))
    Matriciale da confermare con ctrl+maiusc+invio

    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)




  • di scossa data: 08/03/2016 12:01:54

    @patel: hai provato la formula sopra?



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)



  • di patel data: 08/03/2016 12:08:56

    grazie scossa, l'ho provata e funziona, ora il bello sarebbe riuscire a capirla, ce l'hai la pazienza ?





  • di Albatros54 data: 08/03/2016 15:33:53

    @ Patel
    Non voglio sostituirmi al Guru scossa(che saluto), ma il cuore della formula è qua <TROVA($H$2:$H$5;A8)^0;0)>.
    Scossa ha applicato una proprieta matematica delle potenze che dice < qualsiasi numero reale elevato a zero da sempre uno> quindi la funzione < trova >non fa altro che trovare la posizione della stringa cercata, mi restituisce un numero, lo elevo a potenza di zero <^0> e mi ritorna il valore uno, che significa che ho trovato una corrispondenza esatta con la stringa cercata.
    Spero di non essermi sbagliato
    Ciao
    albatros54





  • di patel data: 08/03/2016 15:43:06

    perché è necessario ottenere 1 ? vale come VERO ?





  • di Albatros54 data: 08/03/2016 15:44:45

    Si, perche il valore uno sta per vero mentre zero sta per falso, difatti il confronto lo fa con uno





  • di patel data: 08/03/2016 15:59:08

    visto che sei così disponibile approvitto, puoi spiegarmi il resto ? io sono negato per le formule.





  • di Albatros54 data: 08/03/2016 16:50:04

    CONFRONTA(1;SE.ERRORE(TROVA($H$2:$H$5;A8)^0;0);0), non fa altro che confrontare il valore 1 con il valore 1 trovato nella matrice , e ci restituisce la posizione che occupa nella matrice(nel nostro caso , se cerchiamo unicredit avremo =confronta(1;{1|0|0|0};0)) ,perchè nella matrice (h2:h5) unicredit si trova sulla prima riga)quindi ci ritornera il valore 1, che con la funzione indice, ci ritornera la stringa che occupa la prima riga della matrice
    ciao





  • di Marius44 data: 08/03/2016 17:18:36

    Un saluto a tutta la combriccola.
    Per farmi "perdonare" da scossa per quell' "Exit Sub" che mi è scappato mi permetto un'aggiunta alla sua formula per evitare che appaia #N/D quando non trova corrispondenza.

    Ciao,
    Mario
     
    =SE.ERRORE(INDICE($H$2:$H$5;CONFRONTA(1;SE.ERRORE(TROVA($H$2:$H$5;A2)^0;0);0));"")



  • di alfrimpa data: 08/03/2016 17:29:01

    In effetti sulla torta mancava la ciliegina

    Alfredo





  • di patel data: 08/03/2016 17:35:52

    Ottimo e abbondante, grazie a tutti





  • di scossa data: 08/03/2016 19:16:44

    Ciao,

    vedo che ti hanno già risposto, quindi mi limito a questo chiarimento:
    cit. patel: "perché è necessario ottenere 1 ? vale come VERO ?"

    ll motivo è che TROVA($H$2:$H$5;A7) restituisce la posizione in cui viene trovata l'etichetta (per "CONAD" {#VALORE!.60.#VALORE!.#VALORE!}), quindi un numero non prevedibile; poiché alla funzione CONFRONTA() dobbiamo passare un valore fisso come primo argomento da cercare nella matrice passata come secondo argomento affinché restituisca un valore corretto, con TROVA($H$2:$H$5;A7)^0 trasformiamo il risultato in {#VALORE!.1.#VALORE!.#VALORE!} che "corretto" con SE.ERRORE() ci da {0.1.0.0} ottimo da dare in pasto a CONFRONTA(1;{0.1.0.0};0) la quale ci restituisce 2 cioè la posizione di "CONAD" all'interno della lista in H2:H5.



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)