Condividi:        

dare un valore "x" a celle colorate

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

dare un valore "x" a celle colorate

Postdi matteocor » 13/09/17 22:11

Buonasera, Parto con il presupposto di essere negato in materia excel, di formule e macro, ma volevo sapere se è possibile assegnare un valore "x" a delle celle colorate, ad esempio:
F6:colore cella giallo testo P ma con questo calcolo:
P(giallo) = 13,30-20,30 quindi devo dare valore a cella Pgiallo di 7
oppure :
L20: M+ = 8-13 feriale; 8-11 festivo quindi 5 nei giorni feriali e 3 nei festivi,

devo per forza fare una macro oppure esiste una formula?
vorrei allegare una foto ma non so come fare sono negato.
grazie in anticipo
matteocor
Utente Junior
 
Post: 10
Iscritto il: 13/09/17 21:51

Sponsor
 

Re: dare un valore "x" a celle colorate

Postdi Anthony47 » 14/09/17 00:35

Purtroppo da quel che dici io non riesco a capire granche'... Prova allegando almeno una immagine; per come fare guarda qui:
viewtopic.php?f=26&t=103893&p=605488#p605488

Ridescrivi la cosa mentre guardi l'immagine e speriamo di capirci subito.

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

Re: dare un valore "x" a celle colorate

Postdi matteocor » 14/09/17 08:39

Anthony47 ha scritto:Purtroppo da quel che dici io non riesco a capire granche'... Prova allegando almeno una immagine; per come fare guarda qui:
viewtopic.php?f=26&t=103893&p=605488#p605488

Ridescrivi la cosa mentre guardi l'immagine e speriamo di capirci subito.

Ciao, ti aspettiamo



Ciao Antony, ok vediamo se mi spiego meglio così,
Immagine
come puoi vedere è un calendario per turni volevo automatizzare il calcolo nelle celle sotto al turno ad esempio se D5 è P* mi deve riportare in D6 6.5, oppure se è P con cella gialla mi deve rendere 7 oppure M+ dal lunedì al venerdi mi deve dare 5 ecc.. in fondo alla tabella c'è una piccola legenda.
il tutto mi serve per vedere singolarmente quante ore mi produce una determinata persona in un mese .
spero di essermi spiegato bene.
grazie
matteocor
Utente Junior
 
Post: 10
Iscritto il: 13/09/17 21:51

Re: dare un valore "x" a celle colorate

Postdi Anthony47 » 15/09/17 01:45

Purtroppo la tabella di equivalenze Contenuto+Colore --> Valore manca.

A questo punto allega anche il file e lavoriamo direttammente su quello.
Per le istruzioni su come allegare un file:
viewtopic.php?f=26&t=103893&p=605487#p605487

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

Re: dare un valore "x" a celle colorate

Postdi matteocor » 15/09/17 01:54

https://mega.nz/#!0mQ3BRya!6ESzdiGzBozI ... JXIAbjcAe0
Eccolo vedi se va bene se no domani lo carico da un'altra parte
matteocor
Utente Junior
 
Post: 10
Iscritto il: 13/09/17 21:51

Re: dare un valore "x" a celle colorate

Postdi Anthony47 » 15/09/17 14:57

Allora facciamo così:
1) nel foglio, creati una tabella di conversione su due colonne, contenenti
- prima colonna: la sigla del turno con lo stesso colore che userai nella tabella Orari
- seconda colonna, il valore a cui quella combinazione di Sigla + Colore deve essere associata
Se hai piu' colori per la stessa sigla, inserirai piu' righe
Il colore deve essere lo stesso applicato nell'area Orari, quindi sara' utile opportuno usare il "pennello" per copiare il formato dall'Orario alla tabella di conversione; anzi il mio suggerimento e' che fai il contrario: togli qualsiasi sfondo alla tabella degli Orari; assegni il colore alla tabella delle conversioni; nella compilazione degli Orari vai a copiare i valori dalla tabella conversione e li incolli (testo, colore e altri formati) nella tabella Orari.
Per prova io ho fatto cosi':
Immagine

Le combinazioni Sigla /Colore non trovate non saranno manipolate nell'area Orari

2) Inserisci questa macro in un modulo standard del vba:
Codice: Seleziona tutto
Sub Trascol()
Dim myTab As String, myC As Range, myEq As String
Dim WArr(), myVL
'
myTab = "B5:AF36"           '<<< L'area della tabella Orari
myEq = "AK2:AL40"           '<<< L'area della tabella di conversione
'
ActiveSheet.Copy After:=ActiveSheet   
ReDim WArr(1 To Range(myEq).Rows.Count, 1 To 2)
For i = 1 To Range(myEq).Rows.Count
    If Range(myEq).Cells(i, 1).Value <> "" Then
        WArr(i, 1) = Range(myEq).Cells(i, 1) & " _" & Range(myEq).Cells(i, 1).Interior.ColorIndex
        WArr(i, 2) = Range(myEq).Cells(i, 2)
    End If
Next i
For Each myC In Range(myTab)
    If myC <> "" Then
        myVL = Application.VLookup(myC.Value & " _" & myC.Interior.ColorIndex, WArr, 2, False)
        If Not IsError(myVL) Then
            myC.Offset(1, 0) = myVL
            myC.Offset(1, 0).Interior.ColorIndex = 36           '**1 Vedi Testo
        Else
            myC.Offset(1, 0).Interior.ColorIndex = xlNone       '**2 Vedi testo
        End If
    End If
Next myC
'
MsgBox ("Completato...")
End Sub
Operativamente, partendo da Excel:
-premi Alt-F11 per aprire l'editor delle macro
-Menu /Inserisci /Modulo
-Copia il codice e incollalo nel frame dx del modulo appena creato
-Personalizza le righe marcate <<< come da commenti.
A questo punto il file deve essere salvato nel formato .xlsm (macro enabled).

Poi torna su Excel e compila il contenuto dell'area Orari; quando sei pronto lancia la Sub Trascol:
-premi Alt-F8
-seleziona Trascol dall'elenco di macro disponibili
-premi Esegui

Nota**: al momento, per uso Debug, la macro colora in giallino gli orari che vengono inseriti (vedi riga marcata **1), mentre alle celle non toccate viene tolto l'eventuale colore (vedi riga marcata **2).
Per evitare sorprese quindi la macro crea all'inizio una copia del foglio di partenza e manipola contenuti di questo foglio, lasciando il foglio di partenza non alterato.

Si potra' rivedere tutto questo ultimo discorso quando il risultato sara' soddisfacente.

Prova e fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: dare un valore "x" a celle colorate

Postdi matteocor » 21/09/17 01:06

Anthony47 ha scritto:Allora facciamo così:
1) nel foglio, creati una tabella di conversione su due colonne, contenenti
- prima colonna: la sigla del turno con lo stesso colore che userai nella tabella Orari
- seconda colonna, il valore a cui quella combinazione di Sigla + Colore deve essere associata
Se hai piu' colori per la stessa sigla, inserirai piu' righe
Il colore deve essere lo stesso applicato nell'area Orari, quindi sara' utile opportuno usare il "pennello" per copiare il formato dall'Orario alla tabella di conversione; anzi il mio suggerimento e' che fai il contrario: togli qualsiasi sfondo alla tabella degli Orari; assegni il colore alla tabella delle conversioni; nella compilazione degli Orari vai a copiare i valori dalla tabella conversione e li incolli (testo, colore e altri formati) nella tabella Orari.
Per prova io ho fatto cosi':
Immagine

Le combinazioni Sigla /Colore non trovate non saranno manipolate nell'area Orari

2) Inserisci questa macro in un modulo standard del vba:
Codice: Seleziona tutto
Sub Trascol()
Dim myTab As String, myC As Range, myEq As String
Dim WArr(), myVL
'
myTab = "B5:AF36"           '<<< L'area della tabella Orari
myEq = "AK2:AL40"           '<<< L'area della tabella di conversione
'
ActiveSheet.Copy After:=ActiveSheet   
ReDim WArr(1 To Range(myEq).Rows.Count, 1 To 2)
For i = 1 To Range(myEq).Rows.Count
    If Range(myEq).Cells(i, 1).Value <> "" Then
        WArr(i, 1) = Range(myEq).Cells(i, 1) & " _" & Range(myEq).Cells(i, 1).Interior.ColorIndex
        WArr(i, 2) = Range(myEq).Cells(i, 2)
    End If
Next i
For Each myC In Range(myTab)
    If myC <> "" Then
        myVL = Application.VLookup(myC.Value & " _" & myC.Interior.ColorIndex, WArr, 2, False)
        If Not IsError(myVL) Then
            myC.Offset(1, 0) = myVL
            myC.Offset(1, 0).Interior.ColorIndex = 36           '**1 Vedi Testo
        Else
            myC.Offset(1, 0).Interior.ColorIndex = xlNone       '**2 Vedi testo
        End If
    End If
Next myC
'
MsgBox ("Completato...")
End Sub
Operativamente, partendo da Excel:
-premi Alt-F11 per aprire l'editor delle macro
-Menu /Inserisci /Modulo
-Copia il codice e incollalo nel frame dx del modulo appena creato
-Personalizza le righe marcate <<< come da commenti.
A questo punto il file deve essere salvato nel formato .xlsm (macro enabled).

Poi torna su Excel e compila il contenuto dell'area Orari; quando sei pronto lancia la Sub Trascol:
-premi Alt-F8
-seleziona Trascol dall'elenco di macro disponibili
-premi Esegui

Nota**: al momento, per uso Debug, la macro colora in giallino gli orari che vengono inseriti (vedi riga marcata **1), mentre alle celle non toccate viene tolto l'eventuale colore (vedi riga marcata **2).
Per evitare sorprese quindi la macro crea all'inizio una copia del foglio di partenza e manipola contenuti di questo foglio, lasciando il foglio di partenza non alterato.

Si potra' rivedere tutto questo ultimo discorso quando il risultato sara' soddisfacente.

Prova e fai sapere...


Ciao Antony,
scusa se non ti ho risposto prima, in questo momento sono in ferie dovrei rientrare a lavoro a metà della prossima settimana,
appena mi è possibile gli dò un' occhiata
per il momento ti ringrazio.
ti faccio sapere se funziona
grazie
matteocor
Utente Junior
 
Post: 10
Iscritto il: 13/09/17 21:51

Re: dare un valore "x" a celle colorate

Postdi matteocor » 25/09/17 17:02

Buonasera Anthony47,
allora ho provato la macro è quasi perfetta,
non capisco però come posso assegnare i decimali ,ovvero al P* dovrei assegnare un valore di 6,5 ma lo arrotonda a 7quindi alla fine il conteggio delle ore mi risulta maggiore di quello che è.
oltre a questo come faccio ad assegnare a M+ un valore di 5 nei giorni feriali e di 3 nei festivi?
devo aggiungere un calendario?
grazie della disponibilità
matteocor
Utente Junior
 
Post: 10
Iscritto il: 13/09/17 21:51

Re: dare un valore "x" a celle colorate

Postdi Anthony47 » 26/09/17 01:55

La macro non fa nessun arrotondamento, prende il valore che trova in tabella e lo mette nella cella; controlla che non sia solo un fatto di decimali mancanti nella formattazione della cella.

Quanto ad assegnare un valore diverso alla stessa sigla/colore, direi che il suggerimento piu' facile da attuare e' inventare sigle diverse che hanno valori diversi e che userai in posti diversi.
Oppure la tabella invece di avere 2 colonne la fai a 3; nella seconda inserisci il valore per i Feriali e nella terza il valore per i festivi.

Poi pubblica il file con questa tabella e provo a modificare la macro di conseguenza.

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

Re: dare un valore "x" a celle colorate

Postdi matteocor » 26/09/17 16:28

Anthony47 ha scritto:La macro non fa nessun arrotondamento, prende il valore che trova in tabella e lo mette nella cella; controlla che non sia solo un fatto di decimali mancanti nella formattazione della cella.

ho copiato un nuovo foglio e lo ho rifatto da capo risolto il problema,
per quanto riguarda il fatto del festivo we feriale ho risolto come da tuo consiglio dando un nuovocolore alle celle interessate e aggiungendole alla tabella di conversione,
grazie.
inoltre, lo so che rompo ma volevo sapere se è possibile eliminare il giallo di sfondo assegnato dalla macro alle celle mi servirebbe neutro è fattibile?
grazie dell'aiuto
matteocor
Utente Junior
 
Post: 10
Iscritto il: 13/09/17 21:51

Re: dare un valore "x" a celle colorate

Postdi Anthony47 » 26/09/17 23:18

Il giallino serviva per controllare a colpo d'occhio che tutte le sostituzioni fossro state fatte. Per eliminarlo sostituisci, nella riga marcata "**1 Vedi Testo" il valore 36 col valore xlNone

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


Torna a Applicazioni Office Windows


Topic correlati a "dare un valore "x" a celle colorate":

BTp Valore
Autore: MarioLombardi
Forum: Forum off-topic
Risposte: 2

Chi c’è in linea

Visitano il forum: Nessuno e 48 ospiti