› Excel e gli applicativi Microsoft Office › Formula per Formattazione Condizionale
-
AutoreArticoli
-
Cari amici del Forum, buongiorno.
Chiedo il Vs. prezioso aiuto per la mia seguente necessità lavorativa.
Ho bisogno di una formula da inserire nella Formattazione Condizionale (oppure una routin da utilizzare come macro, per me è indifferente) che mi consenta di colorare di rosso la cella dei cognomi se in una o più celle facenti parte della stessa riga sia contenuta una determinata stringa.
Esempio:
A B C D
ROSSI pippo paperino aaa PLUTO bbb
VERDI topolino PLUTO ddd xxx pippo
BIANCHI topolino pippo paperino
Se la mia stringa di ricerca è, per esempio, PLUTO, la macro (o formattazione condizionale) deve colorarmi di rosso le celle della colonna "A" che contengono i nomi ROSSI e VERDI
La difficoltà nasce dal fatto che la stringa di ricerca (nella fattispecie "PLUTO") potrebbe non essere l'unica parola della cella, come volutamente esposto nell'esempio.
Grazie anticipatamente a chi vorrà aiutarmi
Pinil
Pinil wrote:potrebbe non essere l'unica parola della cella
Altrimenti detto: la stringa di ricerca può essere parzialmente contenuta nella cella di destinazione.
Io farei una piccola routine in VBA che unisce le celle delle righe del range, con InStr cerca la corrispondenza, se la trova, bingo.
Ciao
Cos' su due piedi pensando a poche colonne
avrei pensato a qualcosa del genere
=SE.ERRORE(RICERCA($E$1;CONCATENA(B3;"$%&%$";C3;"$%&%$";D3;"$%&%$";E3;"$%&%$";F3);1);0)
Per Colorare la cella A3 con la parola contenuta in E1 e analizzando le colonne B,C,D,E,ed F.
Nel Concatena avevo pensato tra ve varie celle di inserire una stringa strana ($%&%$, ma potrebbe essere un punto e virgola) per evitare che per esempio se cerchi "PLUTO" e la cella D3 finisce con PLU e quella successiva comincia con TO allora la formula trovava un riscontro.
Ricerca non fa differenza tra maiuscole e minuscole, se invece ti interessa anche quello bisogna usare trova.
Sicuramente non vale la pena se bisogna concatenare più di 5 o 6 celle....
Ciao
Luca
La mia proposta prevede una piccola function UDF da inserire nell'ultima colonna a destra del range da esaminare (magari si può poi nascondere), tirandola giù per tutte le righe interessate restituisce vero o falso, poi una semplice formattazione condizionale in prima cella con test su tale cella nascosta risolve il problema.
Option Explicit Function search_instr(r As Range, search As String) Dim v As Variant, i As Long v = Join(Application.Transpose(Application.Transpose(r))) v = LCase(v) search = LCase(search) i = Len(Replace(v, search, search & vbNullChar)) - Len(v) search_instr = (i > 0) End FunctionVedi esempio allegato.
Allegati:
You must be logged in to view attached files.Nel mio quesito iniziale non ho specificato (e mi scuso) che il foglio potrebbe contenere anche svariate decine di colonne, motivo per cui non sarebbe praticabile la soluzione prospettata da Luca, circa il concatenamento delle celle. Viepiù, il numero delle colonne non è mai fisso, ma varia in funzione della quantità di informazioni che il programma originario esporta in Excel.
Detto questo, l'idea di "Vecchio Frac", mi sembra la più consona alla soluzione del problema.
Infatti l'ho testata su un report di prova di 20 colonne e 50 righe, e funziona. Proverò a farla girare sui report effettivi del lavoro, ma non ho dubbi circa la perfetta riuscita.
Ad ogni buon conto, grazie a Voi, considero risolto il mio quesito
Ho tanto da imparare da Voi esperti
Grazie tante e a presto
Pinil
-
AutoreArticoli
