Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Se la cella contiene la parola.....allora

906 views
Skip to first unread message

Big Skerry

unread,
Dec 6, 2017, 4:44:24 AM12/6/17
to
Ciao a tutti
questo è il mio problema e spero possiate aiutarmi a risolverlo
Dato un range di celle,diciamo colonna A
es:

colonna A ; colonnaB
AZ-Sopravvenienze At ;se contiene "Sopravvenienze metti Varie
causa n.877-2016 ;se contiene "Causa metti Banca
Int. Passivi Trasferiti 2797 a #1;se contiene "Passivi metti Ufficio2
rec. doppio pag. REGIONE TRENTINO;se contiene "Doppio metti Varie

e così via
Sono pronto a formule o vba
Un mio collega mi parlava di select...case ma io sono abbastanza a digiuno di vba

Grazie a tutti in anticipo
Ciao

casanmaner

unread,
Dec 6, 2017, 7:32:32 AM12/6/17
to
A mio parere, per avere la maggiore elasticità possibile per poter associare alle parole chiave la voce desiderata (es. Sopravvenienza=Varie), occorrerebbe creare una tabella dove ad ogni parola chiave associare la voce desiderata.
Se hai Excel2007 o superiori utilizare proprio la funzionalità "Inserisci Tabella" (che tra l'altro con le versioni successive si espande automaticamente man mano che si aggiunge una voce sotto l'altra).
Poi ci si può affidare al VBA per l'assegnazione delle voci in base al testo presente nella cella.
Vedi questo file dove ho un foglio nominato Foglio1 e un altro foglio nominato Chiavi_e_Voci al cui interno è presente una "Tabella" che, una volta creata con l'apposita funzionalità, ho rinominato TabellaChiaviVoci dove ho inserito le varie parole chiave ed associato la voce desiderata per la stessa parola chiave.
https://www.dropbox.com/s/0ecf4v62fkyilie/Se%20la%20cella%20contiene%20la%20parola.....allora.xlsm?dl=0

Poi nel VBA ho scritto una FDU (funzione definita dall'utente) che ha due argomenti.
Il primo argomento StringaTesto rappresenta la stringa di testo all'interno della quale verificare se è presente una delle parole chiave.
Il secondo argomento TabellaChiaviVoci rappresenta l'intervallo (range) dove sono riportate le parole chiave e le voci collegate.
La funzione effettua un ciclo per ogni parola chiave e una di queste viene trovata nella stringa di testo ferma il ciclo e assegna alla funzione il valore rappresentato dalla voce collegato alla parola chiave.

Nel file la funzione è utilizzata, in colonna B del Foglio1, direttamente nella cella (come una qualsiasi funzione di excel) .
Ma, considerato che alla lunga e in presenza di molte parole chiave da ricercare, il ricalcolo si appesantirebbe nulla vieterebbe di implementare una procedura VBA che, individuato l'intervallo delle stringhe da lavorare, inserisca il valore restituito dalla funzion via VBA.

Questa è la FDU presente nel modulo1:
Function AssegnaVoci(StringaTesto As String, TabellaChiaviVoci As Range) As String
Dim arrChiaviVoci As Variant
Dim i As Long
arrChiaviVoci = TabellaChiaviVoci.Value
For i = 1 To UBound(arrChiaviVoci, 1)
If arrChiaviVoci(i, 1) <> "" Then
If InStr(1, StringaTesto, arrChiaviVoci(i, 1), vbTextCompare) > 0 Then
AssegnaVoci = arrChiaviVoci(i, 2)
Exit For
End If
End If
Next i
End Function

Big Skerry

unread,
Dec 6, 2017, 7:50:16 AM12/6/17
to
Grazie
da una prima prova direi che è perfetta
solo un piccola(mia) dimenticanza e cioè
se la cella NON contiene nessuna di quelle parole devo mettere "in attesa"
come devo aggiornare la tabella??

p.s. mi hai risolto un grosso problema ti sn debitore

casanmaner

unread,
Dec 6, 2017, 8:14:00 AM12/6/17
to
Va modificata la funzione in modo che se non viene trovata nessuna occorrenza restituisca la voce "in attesa" come residuale.
Ad es.

Function AssegnaVoci(StringaTesto As String, TabellaChiaviVoci As Range) As String
Dim arrChiaviVoci As Variant
Dim i As Long
Dim str As String
arrChiaviVoci = TabellaChiaviVoci.Value
For i = 1 To UBound(arrChiaviVoci, 1)
If arrChiaviVoci(i, 1) <> "" Then
If InStr(1, StringaTesto, arrChiaviVoci(i, 1), vbTextCompare) > 0 Then
str = arrChiaviVoci(i, 2)
Exit For
End If
End If
Next i
If str = "" Then str = "In attesa"
AssegnaVoci = str
End Function

Big Skerry

unread,
Dec 6, 2017, 8:22:45 AM12/6/17
to
Miticoooo
Grazie è perfetta
Ciauuuu

Big Skerry

unread,
Dec 6, 2017, 8:55:41 AM12/6/17
to
SCUSA
riconosco di essere un ROMPISCATOLE ma protesti aiutarmi in una ulteriore chicca
nelle celle che contengono il testo completo si può evidenziare (chessò in grassetto e in rosso) "la parola" trovata ??
Grazie

casanmaner

unread,
Dec 6, 2017, 9:29:43 AM12/6/17
to
Premesso che se viene utilizzata come funzione non effettua una modifica della cella, non ho ben capito cosa intenda con "testo completo".
Comunque probabilmente quello che tu vorresti si potrebbe realizzare con una formattazione condizionale.

Big Skerry

unread,
Dec 6, 2017, 9:34:10 AM12/6/17
to
Nel nostro caso intendevo nella colonna A
ho provato con la formatt.cond(cercando esempi quà e là) ma mi sono solo incasinato
Ciao

casanmaner

unread,
Dec 6, 2017, 10:03:24 AM12/6/17
to
Credo che non si possa che creare una regola di formattazione per ciascuna singola "parola chiave".
Quello che si potrebbe fare con il VBA è impostare in automatico tali regole.
Vedi il file di esempio di prima dove ho aggiunto tre regole condizionali.

Big Skerry

unread,
Dec 6, 2017, 10:16:56 AM12/6/17
to
Grazieee
0 new messages