etichettare stringhe di testo
Hai un problema con Excel? 
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) |
Vuoi Approfondire?