| | Post: 1 | Registrato il: 25/10/2021
| Età: 38 | Utente Junior | 2016 | | OFFLINE | |
|
25/10/2021 12:38 | |
Buongiorno a tutti,
mi trovo davanti ad un problema forse banale ma che non riesco a risolvere da solo.
In pratica h la necessità di colorare delle celle sulla base del testo contenuto in altre celle; provo a fare un esempio pratico:
voglio che la cella A1 si colori come segue:
- blu se contiene una parola presente nelle celle b1:b10
- giallo se contiene una parola presente nelle celle C1:C10
- rosso se contiene una parola presente nelle celle d1:d10
e così via....
Inoltre ho bisogno che la corrispondenza tra le celle sia parziale, ovvero se la parola che fa cambiare colore fosse LATTE, deve far cambiare colore alle celle contenenti LATTE INTERO, LATTE SCREMATO o PANINO AL LATTE.
Fino ad ora non sono riuscito a trovare una regola, o formula da inserire nella formattazione condizionale che permetta di soddisfare tutte le condizioni.
Mi affido a voi.
Buona Giornata.
Simone. |
|
| | Post: 3.233 | Registrato il: 06/04/2013
| Utente Master | 2010 | | OFFLINE |
|
25/10/2021 13:36 | |
ciao
ti faccio un esempio solo per la col. B
nella FC:
=CONTA.SE($B$1:$B$10;"*"&$A$1&"*")>0 e dai colore blu
saluti
edit: l'unico problema è se trova "latte" in più colonne....verrà applicata l'ultima FC
[Modificato da dodo47 25/10/2021 13:41] Domenico
Win 10 - Excel 2016 |
| | Post: 1 | Registrato il: 25/10/2021
| Età: 38 | Utente Junior | 2016 | | OFFLINE | |
|
25/10/2021 14:03 | |
Ciao,
innanzitutto ti ringrazio per la risposta celerissima.
Ho provato la formula che mi hai dato adattandola alle celle reali, ma in pratica mi colora tutta la selezione cui applico la FC, come da screen di seguito:
Sicuramente sbaglio qualcosa, o magari ho spiegato male prima.
Comunque sia l'obiettivo è che siano colorate solo le celle contenenti latte e latte intero.
Fammi sapere. |
| | Post: 948 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Senior | Excel2019 | | OFFLINE |
|
25/10/2021 15:27 | |
Salve a tutti
Ma non mi sembra che la formula da te inserita sia quella suggerita da @Dodo47 (ciao Domenico)
Fra l'altro ti veniva precisato che il suggerimento era solo per la colonna B ("ti faccio un esempio solo per la col. B")
Vorrei sbagliarmi ma credo che ci voglia VBA (con la FC ci sono troppe condizioni)
Ciao,
Mario |
| | Post: 2.472 | Registrato il: 10/10/2013
| Città: VICENZA | Età: 69 | Utente Veteran | 365 | | OFFLINE |
|
25/10/2021 15:57 | |
ciao
prova questa
=E($A1<>"";SOMMA(SE.ERRORE(RICERCA($A1;$X$1:$AK$1);0))>0)
|
| | Post: 2 | Registrato il: 25/10/2021
| Età: 38 | Utente Junior | 2016 | | OFFLINE | |
|
25/10/2021 16:15 | |
Grazie mille,
questa seconda formula funziona, solo che necessità della corrispondenza totale del testo nella cella condizionata.
Ciò significa che se scrivo LATTE si colora, ma se scrivo LATTE SCREMATO no. Lo stesso se scrivo FORMAGGIO funziona, ma con FORMAGGIO GRATTUGGIATO no.
E' possibile risolvere anche questo problema oppure devo fare un elenco preciso con ogni possibile combinazione esistente?
Il problema è che l'elenco diventerebbe molto complesso ed anche un singolare o plurale o una digitazione imperfetta farebbe si che la FC non vada più.
Comunque sia è già un enorme passo avanti.
|
| | Post: 2.473 | Registrato il: 10/10/2013
| Città: VICENZA | Età: 69 | Utente Veteran | 365 | | OFFLINE |
|
25/10/2021 16:21 | |
ciao
=E($A1<>"";SOMMA(SE.ERRORE(RICERCA("*"&$A1&"*";$X$1:$AK$1);0))>0)
bastava leggere le due formule eh!😏 |
| | Post: 3 | Registrato il: 25/10/2021
| Età: 38 | Utente Junior | 2016 | | OFFLINE | |
|
25/10/2021 16:48 | |
scusa l'ignoranza,
ma anche così la corrispondenza continua ad essere completa, e non parziale.
Allego un file prova per capire cosa sbaglio.
Grazie ancora.
|
| | Post: 2.474 | Registrato il: 10/10/2013
| Città: VICENZA | Età: 69 | Utente Veteran | 365 | | OFFLINE |
|
25/10/2021 18:34 | |
ciao
è chiaro che latte
lo trova sia in
LATTE
che in
LATTE SCREMATO
ma se scrivi latte scremato
excel cerca tutte le parole non latte.
cosa vuoi scorporare le parole e cercarle tutte e due?
prova questa
utilizza la prima parola
=E($A1<>"";SOMMA(SE.ERRORE(RICERCA("*"&SE.ERRORE(SINISTRA($A1;TROVA(" ";$A1));$A1)&"*";$X$1:$AK$1);0))>0) [Modificato da federico460 25/10/2021 19:05] |
| | Post: 3.234 | Registrato il: 06/04/2013
| Utente Master | 2010 | | OFFLINE |
|
25/10/2021 19:20 | |
Simone (3ilV211025), 25/10/2021 12:38:
voglio che la cella A1 si colori come segue:
- blu se contiene una parola presente nelle celle b1:b10
- giallo se contiene una parola presente nelle celle C1:C10
- rosso se contiene una parola presente nelle celle d1:d10
ciao
io ho risposto alla tua domanda...se poi tu cambi le carte in tavola è un altro paio di maniche
saluti
Domenico
Win 10 - Excel 2016 |
| | Post: 4 | Registrato il: 25/10/2021
| Età: 38 | Utente Junior | 2016 | | OFFLINE | |
|
26/10/2021 09:05 | |
Scusate tutti,
io non ho cambiato carte in tavola e non mi lamento certo di soluzioni che fin qui non sono andate bene, anzi ringrazio tutti per il tempo dedicato.
Mi piace utilizzare excel ma purtroppo ne ho una conoscenza abbastanza limitata appena usciamo dalle classiche formule, e per questo mi rivolgo a voi, sperando di imparare anche qualcosa.
Siccome l'argomento è un po complesso probabilmente avrò esposto male la mia necessità. Cerco di riassumerla in maniera più chiara possibile rimandando anche il file per chiarezza:
- la parola LATTE (contenuta in un elenco di "parole chiave") deve far colorare le celle contenenti LATTE in ogni sua combinazione (es. LATTE, LATTE SCREMATO e CREMA di LATTE)
Questo perchè le combinazioni che utilizzano la parole LATTE nei vari fogli di lavoro che andranno generati, sono innumerevoli ed al momento non completamente prevedibili.
Allo stato dei fatti la situazione è la seguente:
- la formula =E($A1<>"";SOMMA(SE.ERRORE(RICERCA($A1;$X$1:$AK$1);0))>0)
funziona solo nel caso di corrispondenza completa tra parola chiave e cella con FC
- la formula =E($A1<>"";SOMMA(SE.ERRORE(RICERCA("*"&SE.ERRORE(SINISTRA($A1;TROVA(" ";$A1));$A1)&"*";$X$1:$AK$1);0))>0)
funziona anche con per le celle che iniziano per LATTE (es. LATTE in POLVERE) ma non che la contengono in altri punti (es. CREMA di LATTE)
Questo sarebbe un problema marginale perchè i casi non coperti sarebbero pochi.
Il problema più grosso è che non riesco a fare funzionare questa seconda formula nel foglio di lavoro reale perchè l'elenco delle "parole chiave" sta nel foglio2, mentre le celle con FC nel foglio1.
Se qualcuno avesse voglia di fare quest'ultimo passaggio, in allegato trova il file che andrò ad utilizzare.
Dopo di ciò prometto che non vi disturberò più😅. Promesso. |
| | Post: 949 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Senior | Excel2019 | | OFFLINE |
|
26/10/2021 10:15 | |
Ciao a tutti
Ribadisco che, forse, bisogna ricorrere al VBA.
Ecco una macro che (ne tuo "Foglio prova" fa quello che chiedi.
Inserisci la macro in un Modulo standard e associala ad un pulsante sul Foglio.
Elimina la FC altrimenti le parole vengono colorate in blu (io ho messo un verde)
Option Explicit
Option Compare Text
Sub TrovaParola()
Dim rng As Range, testo As String, parola() As String
Dim rCell As Range, n As Long, i As Long, j As Long, ur As Long
Columns(1).Interior.ColorIndex = xlNone
Columns(1).Font.ColorIndex = 1
Set rng = Range("X1:AE1")
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
testo = Cells(i, 1).Value
parola = Split(testo, " ")
For j = 0 To UBound(parola)
For Each rCell In rng
With rCell
n = InStr(.Text, parola(j))
If n > 0 Then
Cells(i, 1).Interior.ColorIndex = 4
End If
End With
Next
Next j
Next i
Set rng = Nothing
End Sub
Fai sapere. Ciao,
Mario [Modificato da Marius44 26/10/2021 10:16] |
| | Post: 2.475 | Registrato il: 10/10/2013
| Città: VICENZA | Età: 69 | Utente Veteran | 365 | | OFFLINE |
|
26/10/2021 11:50 | |
ciao
ma tu vuoi colorare gli allergeni
della colonna A della distinta?
cosa devi colorare che non si capisce
secondo me stiamo lavorando al contrario
la ricerca va fatta diversamente
a questo punto
usa il vba
[Modificato da federico460 26/10/2021 11:53] |
| | Post: 5 | Registrato il: 25/10/2021
| Età: 38 | Utente Junior | 2016 | | OFFLINE | |
|
26/10/2021 11:55 | |
Si esattamente,
devo colorare gli ingredienti della colonna A del foglio distinta se contengono gli allergeni elencati nelle varie colonne del foglio "allergeni".
Ciao e grazie |
| | Post: 2.476 | Registrato il: 10/10/2013
| Città: VICENZA | Età: 69 | Utente Veteran | 365 | | OFFLINE |
|
26/10/2021 15:11 | |
ciao
se metti tutti gli elementi
sugli allergeni
puoi usare
=MAX(SE(Allergeni!$B$2:$I$20=$A16;RIF.COLONNA(Allergeni!$B$2:$I$20)))>0
ma così come è scritto come fai a sapere se il pecorino è latte?
CREMA di LATTE perchè non è nella lista allergeni
excel non può sapere che il pecorino è fatto con il latte di pecora
[Modificato da federico460 26/10/2021 15:14] |
| | Post: 6 | Registrato il: 25/10/2021
| Età: 38 | Utente Junior | 2016 | | OFFLINE | |
|
26/10/2021 15:34 | |
La parola pecorino è inserita nella lista allergeni "LATTE", quindi lo intercetta facilmente. Il problema si presenterebbe se scrivessi Pecorino Romano o Pecorino siciliano o grattuggiato, o Dop, o tutta una serie di qualificazioni che mi viene complicato prevedere, il tutto moltiplicato per ogni ingrediente utilizzato. Era questo il problema principale evidentemente non risolvibile con formule ma solo con VBA.
Infatti la macro di Marius sul foglio prova funziona, solo che andrebbe adattata al foglio reale ed io non ci sono riuscito.
Ma non voglio più rompere quindi vedrò di crearmi un elenco ingredienti quanto più completo possibile.
Vi ringrazio tutti e alla prossima!!! |
| | Post: 950 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Senior | Excel2019 | | OFFLINE |
|
26/10/2021 15:58 | |
Ciao
La macro che ti ho suggerito è stata concepita per il "Foglio Prova" ma può benissimo essere adattata al Foglio con gli allergeni e "leggere" tutte le righe di ogni colonna. Devi solo perderci un po' di tempo per costruire i cicli necessari.
Non arrenderti! Prova e se non riesci .... chiedi aiuto.
Ciao,
Mario |
| | Post: 7 | Registrato il: 25/10/2021
| Età: 38 | Utente Junior | 2016 | | OFFLINE | |
|
26/10/2021 17:14 | |
Grazie della fiducia Mario,
ma mio malgrado non ho basi di linguaggio VBA. Quindi quello che riesco ad adattare lo devo solo all'intuizione😂.
Vediamo se in questa occasione riesco a farmi un po di cultura, approfittando della tua disponibilità:
PROBLEMA 1: la macro andrà applicata al Foglio1 denominato "Distinta" anzichè al foglio prova. Va specificato, o lui in automatico applica la regola a tutti i fogli attivi?
PROBLEMA 2: rispetto alla prova, nel caso reale le colonne su cui applicare la macro e le "parole chiave" stanno su 2 fogli diversi (Distinta, Allergeni). Come si identificano nella macro? Ho visto che nella tua specifichi solo il range senza foglio di provenienza.
Come vedi sono proprio cose base dovute alla mancata conoscenza dello strumento. |
| | Post: 951 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Senior | Excel2019 | | OFFLINE |
|
26/10/2021 17:30 | |
Ciao
Ti allego il file con la macro inserita nel modulo del Foglio("Distinta")
Ogni dato scritto nella Distinta fa scattare il colore (uguale a quello della colonna dove lo ha trovato)
questo il codice
Option Explicit
Option Compare Text
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sh1 As Worksheet, sh2 As Worksheet
Dim ur As Long, uc As Long, j As Long, k As Integer, n As Integer
Dim rng As Range, rCell As Range
Dim parola() As String
Set sh1 = Worksheets("Distinta")
Set sh2 = Worksheets("Allergeni")
uc = sh2.Cells(1, Columns.Count).End(xlToLeft).Column
If Not Intersect(Target, Sheets("Distinta").Range("A:A")) Is Nothing Then
If Target.Cells.Rows.Count > 1 Then
Stop 'occorre gestire la selezione multipla
'e anche il caso di cancellazione di dato
End If
For j = 2 To uc
ur = sh2.Cells(Rows.Count, j).End(xlUp).Row
Set rng = sh2.Range(sh2.Cells(2, j), sh2.Cells(ur, j))
parola = Split(Target, " ")
For k = 0 To UBound(parola)
For Each rCell In rng
With rCell
n = InStr(.Text, parola(k))
If n > 0 Then
Target.Interior.ColorIndex = sh2.Cells(1, j).Interior.ColorIndex
GoTo xit
End If
End With
Next
Next k
Next j
End If
xit:
Set sh1 = Nothing
Set sh2 = Nothing
End Sub
Ci sarà da gestire eventuali errori di digitazione ma anche la cattura di errori (per esempio se cancelli un dato va in debug, come pure se non trova il dato fra quanto scritto nel Foglio("Allergeni"). Ma questo può venire dopo, magari studiando un po' come hai detto.
Fai sapere. Ciao,
Mario |
| | Post: 8 | Registrato il: 25/10/2021
| Età: 38 | Utente Junior | 2016 | | OFFLINE | |
|
26/10/2021 18:01 | |
Sei un grande!!!
Hai ragione i debug ci sono e andranno gestiti.
Magari un giorno ci riuscirò.
Grazie di tutto. |
|
|