Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Formula Excel

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

Re: Formula Excel

Postdi Lucio Peruggini » 11/07/11 14:32

Ciao Avatar e buona giornata.

Per quanto riguarda quella postilla di cui ieri ti accennavo, nulla da aggiungere; va bene così.

Ci sono però due inghippi non gravi ma che non sono riuscito a risolvere:

Il primo riguarda gli storici del secondo blocco (6 Numeri per ambo, prima sezione o gruppo) Foglio storici range AU:BP; non marca i ritardi storici sulla ruota di Roma.

Il secondo riguarda il foglio 1 colonna A laddove colora di verde i blocchi processati. Questi, che in un primo momento funzionavano (colorandosi) non funzionano più dal momento in cui ho processato tutti i blocchi insieme. Ma quest'ultimo sarebbe il meno.

Ciao

Allego foto e macro corrette con i nuovi range.

Immagine

Codice: Seleziona tutto
Sub ColATQC_E_Storico()
Application.ScreenUpdating = False
Application.Calculation = xlManual
UR = 302
Col = 18
passo = 68
PassoSt = 46
ColI = 59
ColF = ColI + 54
Worksheets("Foglio1").Select
UC = Range("BV316").End(xlToRight).Column
If UC > 80 Then
MsgBox "Occorrono almeno 5 numeri"
Exit Sub
End If
Range("BG305:QK305").ClearContents ' cambiare se necessario
For ciclo = Range("C307").Value - 4 To Range("E307").Value - 4

  Range(Cells(3, ColI + (ciclo - 1) * passo), Cells(UR, ColF + (ciclo - 1) * passo)).Interior.ColorIndex = xlNone
    SR = 0
    FoB = 2
    riga = UR + 13
    Col = Col + passo
    For CC = 59 + (ciclo - 1) * passo To 113 + (ciclo - 1) * passo Step 5
    FoB = FoB + 2
        SR = SR + 1
        CCS = 1 + PassoSt * (ciclo - 1) + (SR - 1) * 2
        CCS2 = CCS + PassoSt / 2
        riga = riga + 1
        Estratto = 0
        Ambi = 0
        Terni = 0
        Quaterne = 0
        Cinquine = 0
        For RR = 3 To UR
            EV = 0
            ContaA = 0
            For CCR = CC + 0 To CC + 4
                If Val(Cells(RR, CCR)) > 0 Then
                    ContaA = ContaA + 1
                    If ContaA > 1 Then EV = 2
                    If ContaA = 1 Then EV = 1
                End If
                Next CCR
                CI = xlNone
                Select Case ContaA
                Case 1
                Estratto = Estratto + 1
                    Cells(305, CC + 2).Value = UR - RR
                   ' Cells(318 + (ciclo - 1) * 2, FoB).Value = UR - RR
                Case 2
                Ambi = Ambi + 1
                    CI = 15
                    Cells(305, CC + 2).Value = UR - RR
                    Cells(312 + (ciclo - 1) * 2, FoB).Value = UR - RR
                Case 3
                Terni = Terni + 1
                    CI = 4
                      Cells(305, CC + 2).Value = UR - RR
                      Cells(312 + (ciclo - 1) * 2, FoB).Value = UR - RR
                Case 4
                Quaterne = Quaterne + 1
                    CI = 33
                      Cells(305, CC + 2).Value = UR - RR
                      Cells(312 + (ciclo - 1) * 2, FoB).Value = UR - RR
                Case 5
                Cinquine = Cinquine + 1
                    CI = 45
                     Cells(305, CC + 2).Value = UR - RR
                     Cells(312 + (ciclo - 1) * 2, FoB).Value = UR - RR
                Case Else
                    CI = xlNone
                End Select

                Range(Cells(RR, CC), Cells(RR, CC + 4)).Interior.ColorIndex = CI
                If EV > 0 Then
                    Cells(324 + (ciclo - 1) * 2, FoB).Value = UR - RR   '<<< incollare qui (non commentata)
                    Conc = Val(Cells(RR, 1))
                    URS2 = Worksheets("Storici").Cells(Rows.Count, CCS2).End(xlUp).Row
                    ConcSt2 = Val(Worksheets("Storici").Cells(URS2, CCS2))
                    If Conc > ConcSt2 Then
                        Worksheets("Storici").Cells(URS2 + 1, CCS2).Value = Conc
                        Worksheets("Storici").Cells(URS2 + 1, CCS2 + 1).Value = Conc - ConcSt2
                    End If
                    If EV = 2 Then
                        URS = Worksheets("Storici").Cells(Rows.Count, CCS).End(xlUp).Row
                        ConcSt = Val(Worksheets("Storici").Cells(URS, CCS))
                        If Conc > ConcSt Then
                            Worksheets("Storici").Cells(URS + 1, CCS).Value = Conc
                            Worksheets("Storici").Cells(URS + 1, CCS + 1).Value = Conc - ConcSt
                        End If
                    End If
                End If
            Next RR
            Cells(riga, Col).Value = Estratto
            Cells(riga, Col + 1).Value = Ambi
            Cells(riga, Col + 2).Value = Terni
            Cells(riga, Col + 3).Value = Quaterne
            Cells(riga, Col + 4).Value = Cinquine
        Next CC
       

        Range("A" & 312 + (ciclo - 1) * 2).Interior.ColorIndex = 4
        Range("A" & 324 + (ciclo - 1) * 2).Interior.ColorIndex = 4
       
    Next ciclo
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Sub ppp()
UC = Range("BV316").End(xlToRight).Column
MsgBox UC
End Sub


Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Blocco1 = "BW316:CF326"
Blocco2 = "EM316:EV326"
Blocco3 = "HC316:HL326"
Blocco4 = "JS316:KB326"  '<<<<<< inserire il range corretto su excel 2007 per le ottine
Blocco5 = "MI316:MR326"  '<<<<<< inserire il range corretto su excel 2007 per le novine
Blocco6 = "OY316:PH326"  '<<<<<< inserire il range corretto su excel 2007 per le decine

Inizio = "C307"
Fine = "E307"

If Not Application.Intersect(Target, Range(Blocco1)) Is Nothing Then
Range("A312").Interior.ColorIndex = xlNone
Range("A324").Interior.ColorIndex = xlNone
End If
If Not Application.Intersect(Target, Range(Blocco2)) Is Nothing Then
Range("A314").Interior.ColorIndex = xlNone
Range("A326").Interior.ColorIndex = xlNone
End If
If Not Application.Intersect(Target, Range(Blocco3)) Is Nothing Then
Range("A316").Interior.ColorIndex = xlNone
Range("A328").Interior.ColorIndex = xlNone
End If
If Not Application.Intersect(Target, Range(Blocco4)) Is Nothing Then
Range("A318").Interior.ColorIndex = xlNone
Range("A330").Interior.ColorIndex = xlNone
End If
If Not Application.Intersect(Target, Range(Blocco5)) Is Nothing Then
Range("A320").Interior.ColorIndex = xlNone
Range("A332").Interior.ColorIndex = xlNone
End If
If Not Application.Intersect(Target, Range(Blocco6)) Is Nothing Then
Range("A322").Interior.ColorIndex = xlNone
Range("A334").Interior.ColorIndex = xlNone
End If

If Not Application.Intersect(Target, Range(Inizio)) Is Nothing Then
If Target > Range("AT310").Value Then
MsgBox "Il Blocco Inizio non può essere maggiore del Blocco Fine"
Range("AT310").Value = Target
End If
End If
If Not Application.Intersect(Target, Range(Fine)) Is Nothing Then
If Target < Range("AR310").Value Then
MsgBox "Il Blocco Fine non può essere Minore del Blocco Inizio"
Range("AR310").Value = Target
End If
End If
End Sub

Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Sponsor
 

Re: Formula Excel

Postdi Lucio Peruggini » 11/07/11 14:49

Immagine

Dimenticavo l'immagine del Foglio 1
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Re: Formula Excel

Postdi Avatar3 » 11/07/11 15:13

Devi sostituire nel vba foglio le relative celle di convalida
Codice: Seleziona tutto
If Not Application.Intersect(Target, Range(Inizio)) Is Nothing Then
If Target > Range("AT310").Value Then
MsgBox "Il Blocco Inizio non può essere maggiore del Blocco Fine"
Range("AT310").Value = Target
End If
End If
If Not Application.Intersect(Target, Range(Fine)) Is Nothing Then
If Target < Range("AR310").Value Then
MsgBox "Il Blocco Fine non può essere Minore del Blocco Inizio"
Range("AR310").Value = Target
End If
End If

Al posto di AR310 devi mettere C307
al posto di AT310 mettere E307
in pratica 4 sostituzione (2 per cella)
questo in effetti fornisce un mesaggio di errore nel caso che inizio è maggiore di fine.

Le celle rimangono verdi anche se non processate perché non hai modificato nessuno dei numeri in tabella di ricerca
quindi è come se le avessi processate
prova a modificare un numero delle ottine e vedi se il colore di fondo sparisce
per tornare quando le processerai.

Mi sembra strano che una macro funzionante per 11 ruote di 6 gruppi ne sbagli uno solo... :roll:

mi hai mandato un'immagine ma come posso verificare quell'errore?
Abbiamo lo stesso archivio (dal punto di vista di aggiornamento)?
abbiamo gli stessi numeri di ricerca nella tabella dei sei numeri?

intanto guardo
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Formula Excel

Postdi Avatar3 » 11/07/11 15:53

Trovato l'inghippo

Devi ripulire la colonna della ruota di Roma nelle righe oltre 300 Foglio Storici
ci sono dati rimasti da qualche test precedente

Inoltre non influenza nulla ma per correttezza del codice questa riga deve essere 109 e non 113
(anche se lasciando 113 non succede nulla per via dello step = 5 la colonna 113 non sarà mai scansionata se non dal ciclo
for next con variabile CCR = CC + 0 To CC + 4 )

Codice: Seleziona tutto
    For CC = 59 + (Ciclo - 1) * passo To 109 + (Ciclo - 1) * passo Step 5
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Formula Excel

Postdi Lucio Peruggini » 11/07/11 19:03

Risolto. Non mi era venuto proprio in mente di verificare la colonna cosa che peraltro mi era già capitata prima.

Per le celle della colonna "A"che si colorano, non hai guardato? Però, come già dicevo non è importante.

ciao
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Re: Formula Excel

Postdi Lucio Peruggini » 11/07/11 19:09

Risolto anche la questione del colore.

Quando si scansiona un blocco e prima di farne un altro, bisogna togliere dalla colonna "A" il coloro alle celle precedentemente scansionate.

Quindi, funziona tutto perfettamente!!!!! Grazie
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Re: Formula Excel

Postdi Avatar3 » 11/07/11 19:29

Per il colore delle celle la logica da me usata è stata questa

metto 5 numeri nella tabelle cinquine (tutte le ruote)
6 nuneri nella tabella sestine (tutte le ruote)
etc

il colore nelle celle in colonna A non ci sarà più
fino a quando non scansiono
se scansiono solo le cinquine si colorano solo le cinquine
se scansiono tutti i blocchi si coloreranno tutti i blocchi
e rimarranno così fino a che non si cambiano i numeri in tabella
basta cambiarne anche uno solo, la cella corrispondente a quel gruppo non sarà colorata.

Ti ricordo, inoltre, di inserire i corretti range nel Vba del foglio1
Codice: Seleziona tutto
Blocco4 = "HC316:HL326"  '<<<<<< inserire il range corretto su excel 2007 per le ottine
Blocco5 = "HC316:HL326"  '<<<<<< inserire il range corretto su excel 2007 per le novine
Blocco6 = "HC316:HL326"  '<<<<<< inserire il range corretto su excel 2007 per le decine


Altrimenti le celle relative non cambiareanno colore come voluto
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Formula Excel

Postdi Lucio Peruggini » 11/07/11 19:47

Ok, ho capito.

I range dei blocchi 4,5,6 li avevo già sistemati. Grazie
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Re: Formula Excel

Postdi Avatar3 » 11/07/11 20:00

Comunque ho notato che non c'è alcuna influenza se aggiungi righe archivio e quindi rimangono verdi come se fossero processate
a tale scopo inserisci queste due righe di codice nel VBA del foglio1
Codice: Seleziona tutto
Blocco6 = "HC316:HL326"  '<<<<<< esistente tuo range

UR = Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row  '<<<<<aggiungere
If UR <> 302 Then Range("A310:A340").Interior.ColorIndex = xlNone '<<<<<aggiungere

Inizio = "C307" '<<< esistente
Fine = "E307" '<<< esistente
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Formula Excel

Postdi Lucio Peruggini » 11/07/11 21:59

Inserendo le due stringhe le celle si colorano di verde quando si processano i blocchi singolarmente.

Quando il processo riguarda tutti i blocchi o parte di essi, ad esempio: 5 - 7; oppure 7 - 10 rimane colorato solamente l'ultimo blocco. Era questo l'intento?

Peraltro le stringhe dei blocchi aggiunti sono queste:

Blocco4 = "JS316:KB326" '<<<<<< inserire il range corretto su excel 2007 per le ottine
Blocco5 = "MI316:MR326" '<<<<<< inserire il range corretto su excel 2007 per le novine
Blocco6 = "OY316:PH326" '<<<<<< inserire il range corretto su excel 2007 per le decine

qui sotto ho aggiunto quanto mi hai proposto.
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Re: Formula Excel

Postdi Avatar3 » 12/07/11 02:11

Insomma da una cosa che funzionava alla fine sono riuscito a non farla funzionare più
allora quando processi i blocchi le corrispondenti celle in A diventano verdi

inizialmente tornavano senza colore ad ogni modifica delle tabelle valori di ricerca
ma aggiornando l'archivio rimanevano verdi

Una delle due righe aggiunte è errata perché UR non sarà mai 302 in quanto le celle occupate sono fino alla riga 334
pertanto ad ogni fine ciclo toglieva il colore al ciclo appena processato pertanto devi solo modificare la riga indicata
nel Vba del foglio1
Codice: Seleziona tutto
UR = Worksheets("Foglio1").Cells(308, 1).End(xlUp).Row  '<<<< modificare così
If UR <> 302 Then Range("A310:A340").Interior.ColorIndex = xlNone
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Formula Excel

Postdi Lucio Peruggini » 12/07/11 09:15

Ciao Avatar, ascolta: non fasciamoci la testa per una sciocchezza di questo tipo anche se capisco che per te diventa una questione di principio.
Ho fatto la modifica ed è ritornato al punto precedente, cioè:

Nesun colore iniziale

Inserisco 5 - 5 per testare il blocco unico e colora in "A" le celle omonime.
Nella modifica precedente quando camiavo il blocco si azzerava il colore, ora non lo fa.
Inserisco 5 - 7 e colora celle omonime ma se inserisco 7 - 10 non cancella le precedenti.

Direi: poichè mi basta togliere il colore alla colonna "A", lasciamolo così; cosa ne dici?

Buona giornata
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Re: Formula Excel

Postdi Avatar3 » 12/07/11 12:43

Guarda Lucio
che così deve funzionare

se tu modifichi una tabella di ricerca (i 5 o 6 o 7 o 8 o 9 o i 10 numeri)
il colore sparisce in funzione della tabella modificata (è chiaro perché significa non processata)
le due righe aggiunte (con ultima modifica) sul vba del foglio1 fanno sì di togliere il colore verde a tutte le celle in colonna A, perché significa che hai variato l'archivio di ricerca e pertanto devi effettuare l'aggiornamento su tutti i blocchi.

A questo punto se processi due blocchi ad esempio 5 e 6
avrai colorate solo le celle a loro corrispondenti
poi se fai altri due blocchi 7 e 8
si coloreranno anche loro (e avrai 5, 6, 7, 8 verdi)
le celle del blocco 5 e 6 non devono rimanere senza colore in quanto le hai processate precedentemente e non hai fatto nessuna modifica di quelle previste (tabella e archivio)
quindi secondo me così è corretto

Non capisco ora perché se dopo aver processato i blocchi 5 e 6 vorresti togliere il colore quando processi altri blocchi :roll:
ripeto se non cambi tabella di ricerca o archivio i blocchi precedentemente processati devono figurare colorati.

O sbaglio?
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Formula Excel

Postdi Lucio Peruggini » 12/07/11 12:55

Hai ragione, ma ero convinto che analizando blocchi successivi comparissero escusivamente i blocchi che al momento si analizzavano. Ok, ci siamo capiti.
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Re: Formula Excel

Postdi Avatar3 » 12/07/11 15:09

Lasciandoli colorati faranno da "promemoria" che già sono stati processati
purché non venga cambiato nulla nel blocco o nell'archivio. :)
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Formula Excel

Postdi Lucio Peruggini » 12/07/11 18:59

OK!!!

Intanto chiedo questa formula per formattazione condizionale. In verità le celle lo ho già formattate seguendo la procedura semplice, unendo le colonne, selezionandole e oi dandogli il colore; per poi rimetterle in posizione.

Vorrei però, poter inserire la formula:

=SE(D312:X334;0 COLORA ALTRIMENTI NIENTE; MA NON CI RIESCO.

Immagine

CIAO
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Re: Formula Excel

Postdi Avatar3 » 12/07/11 20:41

Non devi selezionare l'intera area
ma solo la cella D312
in Formato -> Formattazione Condizionale inserisci la condizione
Il valore della cella è (default)
selezione la condizione "Uguale"
nel box successivo inserisci il valore 0 (zero)
inserisci Formato Motivo verde
premi ok e ok
poi selezioni la cella D312 e copi il formato (con l'apposita icona Pennello)
selezioni l'intera area D312:X334
avrai un grosso riquadro verde anche dove non hai nulla
per eliminare il formato in quelle zone senza valore
avvia questa macro
Codice: Seleziona tutto
Sub CancellaFormattazioneCelleVuote()
For CC = 5 To 25 Step 2
For RR = 312 To 334
If RR Mod 2 = 0 Then
    Cells(RR, CC).Clear
    Else
    Range(Cells(RR, 4), Cells(RR, 25)).Clear
    End If
    Next RR
    Next CC
   
End Sub

Rimarranno formattate solo le celle che hanno valori e se con valore 0 (zero) saranno di colore verde
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Formula Excel

Postdi Lucio Peruggini » 12/07/11 21:16

Pensavo a un procedimento un pochino più sbrigativo anche perchè volevo utilizzarlo in altre occasioni; non è così! Tanto vale lasciarle così come poichè già formattate secondo condizione. Grazie ugualmente per le dritte e la piccola macro.
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Re: Formula Excel

Postdi Avatar3 » 12/07/11 22:46

Sarebbe stato più sbrigativo se non avessi lasciato colonne e righe con dati intercalate da colonne e righe senza dati
a volte non capisco certe formattazioni di tabelle :roll:
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Formula Excel

Postdi Lucio Peruggini » 12/07/11 23:03

Non hai tutti i torti! L'ho impostato in quel modo altrimente con i numeri troppo vicini si finisce per confondersi e sforzo ancor più la vista.
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

PrecedenteProssimo

Torna a Applicazioni Office Windows


Topic correlati a "Formula Excel":


Chi c’è in linea

Visitano il forum: Nessuno e 25 ospiti