Condividi:        

[Excel] Colorare sfondo cella a condizione

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Excel] Colorare sfondo cella a condizione

Postdi patrini » 04/06/06 16:50

Ciao e buona giornata da patrini.
Ho un file xls di 40.000 righe ordinato per i valori di CODICE.
Ogni valore di CODICE sottende da1 a 10 righe

Mi piacerebbe colorare automaticamente , in modo alternato lo sfondo delle righe aventi lo stesso valore di CODICE.

ES:
le 3 righe con CODICE = 001 assumono sfondo di colore giallo
le 5 righe con CODICE = 002 assumono sfondo di colore bianco
le 8 righe con CODICE = 003 assumono sfondo di colore giallo
e' cosi via

grazie per qualsiasi aiuto
ciao da patrini
patrini
Newbie
 
Post: 6
Iscritto il: 04/06/06 16:45

Sponsor
 

Postdi Alexsandra » 04/06/06 19:27

Il foglio che contiene i dati lo hai ordinato per codice,per cui avrai tutti i codici 001 uno di seguito all'altro disposto sulle righe fino ad un massimo di 10 righe per cui hai circa 4000 codici,diventa un'impresa colorare le righe con 4000 colori.
Esponi meglio il problema,una soluzione sarebbe di usare 2 colori per evidenziare il cambiamento di codice es. giallo per tutti i 001 e poi quando il codice assume 002 diventa blu al codice 003 diventa ancora giallo, se i dati sono ordinati in decrescente o crescente ,comunque ordinati e contigui per valore di codice.
Correggimi se la mia interpretazione del tuo problema è errata
- Il primo fondamento della sicurezza non e' la tecnologia, ma l'attitudine mentale.

Win7 + Office 2003 Ita
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi patrini » 04/06/06 20:23

Grazie molte Alexandra per il contributo.
Mi sono accorto che la mia illustrazione era un po approssimativa, ma la tua interpretazione e' corretta.
Infatti i colori che voglio mettere in gioco sono solo due : es: bianco e giallo. I gruppi di di righe saranno colorate in modo alternato con questi due colori (effetto pigiama) in modo da rendere + facile la lettura dei dati.

Nella "scatola codice" inserisco un esempio con cui cerco di spiegare meglio la mia necessità.

Ogni volta che si cambia CODICE le righe cambiano colore: da
giallo si passa a bianco o da bianco si passa a giallo.

Finche" il numero delle righe è piccolo allora e' possibile colorare
le righe "a mano libera", pero" nel mio caso, con 40.000 righe...
risulta necessario trovare un modo per la colorazione "automatica"

ESEMPIO

--le 3 righe con codice 001 sono colorate di giallo
--il successivo codice e' 002 e le 2 righe con questa codice
saranno colorate di bianco
--le 3 righe con codice 003 saranno gialle
-- la sola riga con codice 004 sara' colorata di bianco
-- e cosi" via......

Codice: Seleziona tutto
001 a       giallo
001 b       giallo
001 c       giallo

002 x       bianco
002 y       bianco

003 aaa   giallo
003 bbb   giallo
003 ccc    giallo

004 ugo   bianco

007 mario giallo
007 mork  giallo
007 muro  giallo

099 zorro giallo


grazie ad Alexandra e a tutti i forumer che mi invieranno qualche aiuto -- ciao da patrini
patrini
Newbie
 
Post: 6
Iscritto il: 04/06/06 16:45

Postdi Alexsandra » 05/06/06 00:21

Prova questo codice. Premi ALT+F11 ed entri nell'editor di VBA clicca sul menu "Inserisci" e scegli "Modulo" poi fai doppio click sul modulo che ti sarà comparso nella finestra di Sx (Modulo 1) e copia nella finestra di Dx questo codice
Codice: Seleziona tutto
Sub Colora()
Application.ScreenUpdating = False  'impediamo il saltellamento a schermo
Set zona = ActiveSheet.Range([A1], [A1].End(xlDown))
contarighe = zona.Rows.Count
For N = 2 To contarighe
If Left(Cells(N, 6).Value, 1) = "1" Then
Cells(N, 6).EntireRow.Select
Selection.Interior.ColorIndex = 6
ElseIf Left(Cells(N, 6).Value, 1) = "2" Then
Cells(N, 6).EntireRow.Select
Selection.Interior.ColorIndex = 2
End If
Next
Range("A1").Select
End Sub
cosa devi cambiare per il tuo foglio.
Codice: Seleziona tutto
If Left(Cells(N, 6).Value, 1) = "1" Then
cambi il valore 6 col N° di colonna che contiene il valore da cercare (se 001 lo hai nella colonna A metti 1)
Codice: Seleziona tutto
For N = 2 To contarighe
quì parto dalla riga 2 perchè nella riga 1 ho messo le etichette delle varie colonne se tu non hai etichette metti 1 al posto di 2.
Poi crea un pulsante sul foglio e associalo alla macro,quando clicchi sopra al pulsante ti colora tutte le celle.

PS.per creare un pulsante fai click col Dx sulla barra degli strumenti e nel menu che ti compare scegli "Moduli" e nella finestra che ti appare scegli il pulsante vai sul foglio e tenendo premuto il tasto di Sx del mouse trascini fino ad avere le dimensioni volute del pulsante,appena rilasci il mouse ti appare la finestra di associazione delle macro,seleziona la macro e clicca su Ok.
Finito
- Il primo fondamento della sicurezza non e' la tecnologia, ma l'attitudine mentale.

Win7 + Office 2003 Ita
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi patrini » 07/06/06 09:31

Ciao Alexandra e molte grazie ho utilizzato il tuo suggerimento ed ho risolto il mio problema.Molto bene. Segna un caffe.

Allego la versione finale del codice della macro Colora. Ancora grazie e ciao da patrini
Codice: Seleziona tutto
Sub Colora()
Application.ScreenUpdating = False  'impediamo il saltellamento a schermo
Set zona = ActiveSheet.Range([A1], [A1].End(xlDown))
contarighe = zona.Rows.Count
colore_2 = 2
colore_36 = 36
conta = 0
Cells(2, 1).EntireRow.Select
Selection.Interior.ColorIndex = colore_2

For N = 3 To 20
If Cells(N, 1).Value <> Cells(N - 1, 1).Value Then
   conta = conta + 1
   If conta Mod 2 = 0 Then
        colore = colore_2
    Else:
        colore = colore_36
  End If
End If

Cells(N, 1).EntireRow.Select
Selection.Interior.ColorIndex = colore
 
Next
Range("A1").Select
End Sub
patrini
Newbie
 
Post: 6
Iscritto il: 04/06/06 16:45

Postdi Alexsandra » 07/06/06 13:02

Hai un problema alle righe 3 e 4
- Il primo fondamento della sicurezza non e' la tecnologia, ma l'attitudine mentale.

Win7 + Office 2003 Ita
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi archimede » 08/06/06 09:20

Se il valore di CODICE è progressivo (senza salti), puoi usare anche la Formattazione Condizionale e lasciar perdere VBA.

Alessandro
archimede
Moderatore
 
Post: 2851
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi patrini » 09/06/06 19:11

ciao da patrini.

Domanda per Alexandra : qual e' il problema che ho alle righe 3 e 4 ?

Commento per Archimede : NO purtroppo sono previsti dei salti

se volete fare un semplice test provate ad usare il file in cui
e' impostata solo la colonna 1 e con questi valori
1 blank
2 c
3 c
4 d
5 e
6 e

ciao da patrini
patrini
Newbie
 
Post: 6
Iscritto il: 04/06/06 16:45

Postdi archimede » 10/06/06 09:10

patrini ha scritto:Commento per Archimede : NO purtroppo sono previsti dei salti
Io aggiungerei una colonna (magari nascosta): supponendo che A sia la nuova colonna e B1 sia la cella che contiene il primo CODICE, in A1 metti 1, mentre nelle successive inserisci la formula =SE(B2<>B1;1-A1;A1). A questo punto usare la formattazione condizionale per colorare le righe è un gioco da ragazzi.

HTH.

Alessandro
archimede
Moderatore
 
Post: 2851
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi Anthony47 » 10/06/06 12:19

Se con la macro funziona, suggerirei di rimanere sulla macro; anche perche’ penso che le 40000 righe siano generate periodicamente da un altro programma, e comunque mettere le formule di formattazione condizionale (su quante colonne?) man mano che si aggiungono nuovi codici non credo sia proprio il massimo.

Per patrini:
non vedo che uso fai della variabile “contarighe”, credo che tu la usi nella istruzione For ( For N = 3 to Contarighe) per definire il contesto in cui eseguire la verifica + colorazione; pertanto, se nel tuo elenco CI SONO DELLE RIGHE VUOTE, suggerisco di calcolare contarighe nel seguente modo

Codice: Seleziona tutto
Set zona = ActiveSheet.Range([A1], [A65536].End(xlUp))
contarighe = zona.Rows.Count


o piu’ direttamente
Codice: Seleziona tutto
contarighe = [A65536].End(xlUp).row


Infatti con la formulazione [A1].End(xlDown), verrebbe restituita la posizione subito prima di una cella vuota, mentre con [A65536].End(xlUp) viene restituita l’ ultima cella occupata della colonna A.

Nel codice si potrebbe fare qualche ottimizzazione, ma vale sempre il motto "il meglio e' nemico del bene".

Ciao,
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi archimede » 10/06/06 13:03

Anthony47 ha scritto:comunque mettere le formule di formattazione condizionale (su quante colonne?) man mano che si aggiungono nuovi codici non credo sia proprio il massimo.
La formula (il plurale serve se si vogliono gestire anche le righe con CODICE vuoto) la metti una volta per tutte le righe e colonne che vuoi: non mi pare un gran problema.

Alessandro
archimede
Moderatore
 
Post: 2851
Iscritto il: 07/11/02 12:41
Località: Genova


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Colorare sfondo cella a condizione":


Chi c’è in linea

Visitano il forum: Nessuno e 34 ospiti