Condividi:        

Estrapolare dalle cinquine codice RGB e applicare il colore.

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

Estrapolare dalle cinquine codice RGB e applicare il colore.

Postdi ikwae » 27/10/20 23:33

Ciao a tutti … Ho realizzato due macro una per estrapolare i numeri RGB dalla cinquina e una per applicare il colore RGB dei numeri appena calcolati.

Vorrei aggiungere qualche istruzione in più a ogni macro ma non sono capace e, di conseguenza, chiedo aiuto a tutto il Forum.

Per non scrivere un “tema” le semplici indicazioni della modifica/aggiunta alla 1à sono sul foglio Info.

La 2à macro invece applica il colore e oltre al colore, scrive a dx di ogni cella colorata, una stringa di matrice che è fondamentale.

La modifica che cerco, alla 2à macro, è quella di togliere ogni riferimento al range e farla autonoma di sola selezione.

Con un esempio; se seleziono la cella B2 la macro deve mettere il colore dalla cella B2:B2(end) leggendo alla sua sx i tre numeri
RGB stessa riga e, sulla stessa riga a dx, dovrebbe scrivere la stringa di matrice.

Se seleziono la cella ad esempio la D485 la macro deve applicare il colore dalla D485:D485(end)leggendo i valori RGB sulla sx stessa riga e, sulla stessa riga a dx, dovrebbe scrivere la stringa di matrice.

Se seleziono la cella P12345, ecc.

Questa modifica è necessaria perché ho sviluppato l’integrale dei numeri RGB realizzando, in un unico foglio, 16 blocchi di 4 colonne ciascuno (3 RGB +1 intestazione riga) e ogni colonna ha tutte le righe piene ossia 1.048.576.

A sx di ogni colona con i numeri RGB si deve applicare il colore ma, purtroppo, come si sa gli “Stili” non permettono di colorare l’intera colonna e, neanche la metà, ma solo poche migliaia di celle.

Quindi, per scegliere i colori, io di volta in volta devo solo selezionare la cella e lanciare la 2à macro e, la stessa, deve fare tutto il resto senza dover cambiare di volta in volta i rifermenti del range.

In allegato un file contenente due fogli uno di nome “Info” che da qualche indicazione sui semplici calcoli che la 1à macro deve fare (tre in tutto). Oppure solo i punti 2 e 3 che io posso accodare alla mia “casareccia”.

Uno di nome Fine che è quello che indicativamente si vuole ottenere. Dico indicativamente perché se finiti i calcoli della 1à macro e seleziono la cella M58 e mando in esecuzione la 2à macro dovrebbe iniziare a colorare da M58:M58(end) e, sulla stessa riga a dx, dovrebbe scrivere la stringa di matrice.
Non è escluso che ci possono essere terzine RGB identiche quindi con celle colorare di rosso.
Nel modulo le macro casarecce.
Ringraziando anticipatamente tutti colore che mi possono aiutare 73 ikwae
http://www.filedropper.com/dalle5nergbecolorerete
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Sponsor
 

Re: Estrapolare dalle cinquine codice RGB e applicare il col

Postdi Anthony47 » 28/10/20 21:34

Ho perso mezz'ora a essere certo che la 1à macro fosse la seconda inserita nel progetto (cioe' Sub Somma_RGB_5na_Rete) e invece la 2à fosse la prima (cioe' Sub Colore_RGB_5na_Rete), zompando come un pirla tra il post, il foglio e il modulo vba.
Altra mezz'ora e' bastata a tradurre in linguaggio realistico il significato di cose come "se seleziono la cella B2 la macro deve mettere il colore dalla cella B2:B2(end) leggendo alla sua sx i tre numeri RGB stessa riga e, sulla stessa riga a dx, dovrebbe scrivere la stringa di matrice", cioe' dove vanno presi i tre numeri se seleziono B2. Ho concluso che la selezione sara' fatta sempre sulla colonna Red, e l'area da lavorare e' quella che parte dalla selezione corrente e viene estesa verso il basso.
Pertanto la Sub Colore_RGB_5na_Rete diventerebbe
Codice: Seleziona tutto
Sub Colore_RGB_5na_Rete2()
Dim Zona As Range
Dim ACol() As Long, I As Long
'
Application.Calculation = xlCalculationManual
Set Zona = Range(Selection, Selection.End(xlDown))
Zona.Resize(, 4).Interior.Color = xlNone
ReDim ACol(1 To Zona.Rows.Count)
For I = 1 To Zona.Rows.Count
    r = Zona.Cells(I, 1).Value
    g = Zona.Cells(I, 2).Value
    b = Zona.Cells(I, 3).Value
    ACol(I) = RGB(r, g, b)
    mymatch = Application.Match(ACol(I), ACol, False)
    If mymatch <> I Then
        Zona.Cells(mymatch, 1).Resize(1, 3).Interior.Color = RGB(255, 0, 0)
        Zona.Cells(I, 1).Resize(1, 3).Interior.Color = RGB(255, 0, 0)
    End If
    Zona.Cells(I, 4).Value = "Ruota_" & "(" & conta & ")" & "=RGB " & "(" & r & "," & " " & g & "," & " " & b & ")"
    Zona.Cells(I, 4).Interior.Color = ACol(I)
Next I
Application.Calculation = xlCalculationAutomatic
MsgBox "Completato..."
End Sub


Mentre la Sub Somma_RGB_5na_Rete potrebbe diventare
Codice: Seleziona tutto
Sub Somma_RGB_5na_Rete2()
Dim OArr(), ACol(), I As Long
Dim Zona As Range
'
Application.Calculation = xlCalculationManual
Set Zona = Range(Range("D2"), Range("D2").End(xlDown))
Zona.Offset(0, 6).Resize(, 3).ClearContents
ReDim ACol(1 To Zona.Rows.Count)
ReDim OArr(1 To Zona.Rows.Count, 1 To 3)
   
For I = 1 To Zona.Rows.Count
    r = Application.WorksheetFunction.Sum(Zona.Cells(I, 1).Offset(0, 0).Resize(1, 3))
    g = Application.WorksheetFunction.Sum(Zona.Cells(I, 1).Offset(0, 1).Resize(1, 3))
    b = Application.WorksheetFunction.Sum(Zona.Cells(I, 1).Offset(0, 2).Resize(1, 3))
    OArr(I, 1) = r
    OArr(I, 2) = g
    OArr(I, 3) = b
   
    ACol(I) = RGB(r, g, b)
    mymatch = Application.Match(ACol(I), ACol, False)
    If mymatch <> I Then
        Zona.Cells(mymatch, 7).Resize(1, 3).Interior.Color = RGB(255, 0, 0)
        Zona.Cells(I, 7).Resize(1, 3).Interior.Color = RGB(255, 0, 0)
    End If
'    Zona.Cells(I, 4).Value = "Ruota_" & "(" & conta & ")" & "=RGB " & "(" & r & "," & " " & g & "," & " " & b & ")"
'    Zona.Cells(I, 4).Interior.Color = ACol(I)
Next I
Zona.Cells(1, 7).Resize(Zona.Rows.Count, 3).Value = OArr
Application.Calculation = xlCalculationAutomatic
MsgBox "Completato..."
End Sub


Noterai l'estrema somiglianza tra la prima e la seconda, non so se ha senso tenerle distinte.

Tieni presente che in un file excel mi pare ci sia un limite di max 65mila diverse formattazioni; quindi se pensi di lavorare su dati ben piu' numerosi di quanto in esempio allora avrai sicuramente problemi.

Intanto prova quanto propinatoti; e se intendevi qualcosa di diverso sei costretto a spiegare nuovamente...
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Estrapolare dalle cinquine codice RGB e applicare il col

Postdi ikwae » 29/10/20 12:51

Gentilissimo Anthony… Ieri nel pomeriggio mi “fischiavano le orecchie” e adesso capisco il perché.
Sono molto dispiaciuto per l’evidente errore di battitura della B2:B2(end) perché se selezionando la B2 non
ci possono essere tre celle a sx.

Anche se l’ho letto e riletto più volte non l’ho proprio visto questo errore e, pensando che con due macro ci possa essere confusione, ho allegato, nel modulo, anche le mie macro casarecce ma con il “senno del poi” è facile non sbagliare scusami tanto.

Per quanto mi hai propinato va benissimo anche oltre e aggiungo :) e :) crepi l’avarizia …
Dopo ore e ore di prove e tolto i commenti (‘) della prima macro e modificando come riportato sotto

'org 'Zona.Cells(I, 4).Value = "Ruota_" & "(" & Conta & ")" & "=RGB " & "(" & r & "," & " " & G & "," & " " & B & ")"
.......Zona.Cells(I, 11).Value = "Ruota_" & "(" & Conta & ")" & "=RGB " & "(" & r & "," & " " & G & "," & " " & B & ")"

'org 'Zona.Cells(I, 4).Interior.Color = ACol(I)
.....Zona.Cells(I, 10).Interior.Color = ACol(I)
altrimenti va a scrivere i colori e la stringa sulle cinquine.

Posso dire che la 1à macro fa tutto ossia somme colore e stringa per la matrice. Per la stringa di matrice ho aggiunto un semplice contatore altrimenti il numero di matrice mancherebbe. Quindi la 2à macro sembrerebbe inutile ma non è così.

Nella 2à macro dopo ore e ore di tentativi sono riuscito a capire come fare semplicissime ma necessarie modifiche ai riferimenti oltre a modifiche per aggiungere il contatore per la stringa della matrice. Ho aggiunto anche una modifica per bloccare il limite massimo a 65.411 che sono le formattazioni(Stili) che il mio pc può elaborare.

Oltre al limite di formattazioni ho aggiunto una “trappola” che interviene quando finiscono i numeri RGB quindi con la trappola la macro si blocca e non va a oltranza, come del resto è stato richiesto da me di continuare a oltranza.

Il senso di tenere divise le due macro, come ho pensato prima di scrivere l’aiuto del post, è stato sia che due macro hanno meno righe di codice di una “unificata” e di conseguenza si presta meglio a capirla e di conseguenza a fare semplici aggiustamenti e sia perché una la impiego per le ricerche dei numeri tramite il colore e l’altra la impiego per la scelta dei colori.

Quindi ricapitolando ho la somma e il colore. Adesso serve una specie di ContaSe per il colore. Attualmente uso una UDF ma non è molto pratica all’utilizzo.

Scriverò qualche cosa tipo una macro “casareccia” e, probabilmente, chiederò aiuto a tutto il Forum per eventuali modifiche o aggiustamenti.

Ringraziandoti mille e mille volte per il tuo prezioso e gradito aiuto. Oltre alla tua Santa Pazienza cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Re: Estrapolare dalle cinquine codice RGB e applicare il col

Postdi Anthony47 » 29/10/20 14:19

Per il "ContaSe" sul colore, calcolati in una colonna libera il CodiceColore, usando la formula =J2+256*K2+256*256*L2
Poi la copi verso il basso e a quel punto sulla colonna adiacente potrai fare un ContaSe che conta quante volte nella colonna del CodiceColore compare quello specifico valore.
Es se il CodiceColore l'hai calcolato in R2 e sottostanti, userai =CONTA.SE(R1:R100000;R2)
Copia poi verso il basso, e usa il Filtro automatico per evidenziare i valori >1

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

Re: Estrapolare dalle cinquine codice RGB e applicare il col

Postdi ikwae » 30/10/20 00:59

Gentilissimo Anthony …
dal tuo post deduco una immensa disponibilità e io, di conseguenza, ho anticipato quello che dovevo postare tra una settima e sono andato a trovare nelle mie ricerche qualche rigo di codice da assemblare. Così facendo ho assemblato una “casareccia” al
100% funzionante. Necessita qualche ritocco ma è proprio quello che cerco ossia sulla stessa riga ho: la cinquina, il codice RGB, il colore, le volte che il colore è presente e la stringa per la matrice.

Quindi, come dico sempre, inserisco tutto nei cicli e, le macro, devono leggere e lavorare per restituire solo i dati che servono senza mai avere interruzioni o aggiunte manuali.

Per lavorare con i colori è un po' laborioso mentre lavorare con i numeri è più semplice e, di conseguenza, ho convertito i colori in numeri e poi ho applicato un semplice ContaSE che è certamente più esperta e idonea a fare conti con i numeri.
La macro finisce applicando solo i valori e cancellando quello superfluo.

L’unico neo è che non si riesce a fare un’unica macro lavora solo una mezza parte. Quindi l’ho divisa e neanche accodando
il richiamo alla macro(Call Poi) la richiama solo con il Goto 20 altrimenti non va neanche a “spingerla” a mano.
Se la puoi mettere a posto mi faresti un grande piacere così chiudo il discorso colori e inizio a scatenare tutte le mie
macro casarecce per “raccogliere” frutti.

Per verificare i dati, che sono giusti, ho usato una stringa all’interno della Funzione Concatena e sono giusti. Per una eventuale super certezza utilizzerò l’indicazione dell’ultimo tuo post.

La macro l’ho mandata in esecuzione copiando le prime 180 righe dal foglio in allegato al primo post e copiate in un foglio a parte.

Ringraziandoti ulteriormente per l’ulteriore disponibilità. Cordialmente ilwae


Codice: Seleziona tutto
Sub Quanti_Colori_5na_Identici_Rete()
Dim Zona, aPalet As Range       
Set Zona = Range(Range("M2"), Range("M2").End(xlDown)) ' colonna con già presente il colore 
     
    For Each aPalet In Zona
     If aPalet = "" And aPalet.Offset(0, -1) = "" Then GoTo 20 'Exit Sub
       aPalet.Offset(0, 2).Value = aPalet.Interior.Color
    Next aPalet
20
Call poi
End Sub

Sub poi() ‘QUESTA MACRO TUTTA CON IL REGISTRORE DI MACRO.
 Range("N2").Select
    Activecell.FormulaR1C1 = "=COUNTIF(C[1],RC[1])"
    Range("N2").Select
    Selection.AutoFill Destination:=Range("N2:N181") 'Da sistemare <<<<<<<<
    Range("N2:N181").Select
    Columns("N:N").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    'Range("O1").Select
    Columns("O:O"). Selection.ClearContents
   Range("O1").Select
End Sub
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Re: Estrapolare dalle cinquine codice RGB e applicare il col

Postdi Anthony47 » 30/10/20 20:05

Secondo me la tua Sub Quanti_Colori_5na_Identici_Rete e' inutile, fa solo perdere temo; perche' la precedente Sub Colore_RGB_5na_Rete2 gia' ha calcolato quale colore va applicato in ogni cella, non ha senso andarlo a leggere successivamente come ".interior.color".
Insomma dovrebbe essere sufficiente aggiungere in quella sub questa riga:
Codice: Seleziona tutto
    Zona.Cells(I, 4).Interior.Color = ACol(I)
    Cells(Zona.Cells(I, 4).Row, "O").Value = ACol(I)    '+++ Aggiunta (mette codice colore in colonna O)
Next I


Quanto alla Sub Poi, e' ovvio che se nella ipotetica "chiamante" Sub Quanti_Colori_5na_Identici_Rete esegui una Exit Sub allora l'istruzione Call poi non verra' mai eseguita.

Quanto agli aggiustamenti alla Sub, che credo consistano nel copiare la formula fino alla fine dell'elenco (svincolandola dalla riga 181), credo che cosi' dovrebbe funzionare:
Codice: Seleziona tutto
Sub PoiMo()
Dim LastL As Long
'
LastL = Cells(Rows.Count, "L").End(xlUp).Row
Range("N2:N" & LastL).FormulaR1C1 = "=COUNTIF(C[1],RC[1])"
Range("N2:N" & LastL).Copy
Range("N2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Application.CutCopyMode = False
''Columns("O:O").Selection.ClearContents  '***Vedi TESTO
Range("O1").Select
End Sub
Quanto all'istruzione marcata *** suggerisco di "scommentarla" (e quindi renderla attiva) solo dopo aver fatto il controllo che la macro calcola correttamente i riisultati.

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

Re: Estrapolare dalle cinquine codice RGB e applicare il col

Postdi ikwae » 30/10/20 23:24

Gentilissimo Anthony … :) Effettivamente con il tuo ultimo post posso chiudere definitivamente le procedure del colore.
Ringraziandoti mille e mille volte per il tuo gradito e apprezzato lavoro, Santa Pazienze e immensa Disponibilità.
Cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14


Torna a Applicazioni Office Windows


Topic correlati a "Estrapolare dalle cinquine codice RGB e applicare il colore.":


Chi c’è in linea

Visitano il forum: Nessuno e 78 ospiti