Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Macro al quesito esposto

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

Macro al quesito esposto

Postdi Lucio Peruggini » 02/05/11 01:35

Buona giornata
Gentilmente avrei ancora questo quesito che penso si possa risolvere con una macro.
In questo foglio Excel ho dieci colonne “ A : J “ e circa 1500 righe; nelle colonne “ L : Z “ riga 1 vorrei inserire dei numeri a piacimento che possono variare e riempire o meno tutte le 15 celle. La macro dovrebbe colorare in giallo (unico colore) in colonna “ C : G “ tutti i numeri che corrispondono per l’appunto alla riga uno, sopra menzionata.
Anticipatamente ringrazio


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

Sponsor
 

Re: Macro al quesito esposto

Postdi Avatar3 » 02/05/11 07:30

Prova questa macro

Codice: Seleziona tutto
Sub Colora()
URD = Worksheets("Foglio1").Range("C" & Rows.Count).End(xlUp).Row
Worksheets("Foglio1").Range("C1:G" & URD).Interior.ColorIndex = xlNone
Area = "C1:G" & URD
For CC = 12 To 26
    ValC = Cells(1, CC).Value
    For Each ValCA In Worksheets("Foglio1").Range(Area)
        If ValC = ValCA Then ValCA.Interior.ColorIndex = 6
    Next
Next CC
End Sub


Cambia il nome del "Foglio1" nella macro se differente dal tuo

ciao
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: Macro al quesito esposto

Postdi Lucio Peruggini » 02/05/11 10:05

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

Re: Macro al quesito esposto

Postdi Lucio Peruggini » 02/05/11 13:48

Buona giornata, chiedo:
La macro potrebbe funzionare con le dovute correzioni se anziché avere cinque colonne ne ha solo una con i numeri separati da un punto?

Esempio

72.12.42.57.31 il tutto, quindi, in una sola colonna "C".

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

Re: Macro al quesito esposto

Postdi Avatar3 » 02/05/11 15:26

La macro in questo caso andrebbe modificata e adattata alla nuova esigenza
hai fatto un esempio di numeri con le decine quindi si presentano tutte a due cifre
ma nel caso di unità, cosa hai 1 o 01 ?
es: 72.12.42.01.31 oppure 72.12.42.1.31

inoltre la cella verrà colorata nel caso in cui esista il numero cercato indipendentemente dagli altri numeri che, occupando la stessa cella, avranno il fondo colorato.

Ciao
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: Macro al quesito esposto

Postdi Lucio Peruggini » 02/05/11 17:00

Avatar3 ha scritto:La macro in questo caso andrebbe modificata e adattata alla nuova esigenza
hai fatto un esempio di numeri con le decine quindi si presentano tutte a due cifre
ma nel caso di unità, cosa hai 1 o 01 ?
es: 72.12.42.01.31 oppure 72.12.42.1.31

inoltre la cella verrà colorata nel caso in cui esista il numero cercato indipendentemente dagli altri numeri che, occupando la stessa cella, avranno il fondo colorato.

Ciao


Ciao Avatar, in realtà per ogni numero esistente in una cinquina colorerebbe tutta la cella giusto? L'avevo immaginato; ma andrebbe comunque bene.
Per quanto riguarda i numeri sono tutti a due cifre; quindi "01".
Ciao
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Re: Macro al quesito esposto

Postdi Avatar3 » 02/05/11 21:54

Qualcosa che soddisfa questa esigenza potrebbe essere questa macro

Codice: Seleziona tutto
Sub Colora2()
Worksheets("Foglio2").Select
URC = Worksheets("Foglio2").Range("C" & Rows.Count).End(xlUp).Row
Worksheets("Foglio2").Range("C1:C" & URC).Interior.ColorIndex = xlNone
Dim VettV(5) As Integer
For CC = 12 To 26
    ValC = Cells(1, CC).Value
    For RR = 1 To URC
    VettV(1) = Val(Mid(Range("C" & RR).Text, 1, 2))
    VettV(2) = Val(Mid(Range("C" & RR).Text, 4, 2))
    VettV(3) = Val(Mid(Range("C" & RR).Text, 7, 2))
    VettV(4) = Val(Mid(Range("C" & RR).Text, 10, 2))
    VettV(5) = Val(Mid(Range("C" & RR).Text, 13, 2))
        If ValC = VettV(1) Or ValC = VettV(2) Or ValC = VettV(3) Or ValC = VettV(4) Or ValC = VettV(5) Then Range("C" & RR).Interior.ColorIndex = 6
    Next RR
Next CC
End Sub


ma così facendo non saprai mai se in quella cinquina ci sono più numeri presi a meno che non si utilizzi un'altra colonna (esempio la colonna D) che abbia un contatore dei numeri centrati
in questo caso va modificata ulteriormente la macro

Se occorre posta ancora

ciao
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: Macro al quesito esposto

Postdi Lucio Peruggini » 02/05/11 22:56

Grazie Avatar.

Si! E' necessario un contatore che individui i numeri centrati. In questo caso, la colonna da utilizzare è la "G".

Scusa se ti chiedo ancora una cortesia:

In sintesi, ho quattro fogli di cui:

Il primo contiene la colonna "C" con due numeri separati dal punto

"C"
01.02

Il secondo foglio
01.02.03

Il terzo foglio
01.02.03.04

Il quarto foglio
01.02.03.04.05

Ovviamente, ognuno di essi ha bisogno del contatore come giustamente mi hai fatto rilevare e la colonna di destinazione per esso, penso possa rimanere per tutti la "G"; poiché per tutti i fogli ho sei colonne.

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

Re: Macro al quesito esposto

Postdi Anthony47 » 02/05/11 22:58

Il mio suggerimento pero' e' di fare inizialmente un "Testo in colonna" su col C usando il separatore "." e poi usare la macro precedentemente suggerita da Avatar. O c' e' qualcosa che lo impedisce?

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro al quesito esposto

Postdi Lucio Peruggini » 02/05/11 23:15

Ciao Anthony,
No, non ci sarebbero impedimenti nell'utilizzare il separatore per eliminare i punti in questione; solamente un po più di lavoro per farlo.

Ma c'è un fattore importante di visibilità nell'insiemistica e nel controllo. Peraltro, poichè questi file vanno cambiati frequentemente è più agevole lavorarci senza dover utilizzare il separatore.

Dimenticavo: cosa intendi per "testo in colonna?"
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Re: Macro al quesito esposto

Postdi Anthony47 » 02/05/11 23:25

Selezioni i dati di col C; Menu /Dati /Testo in colonna, scegli "Delimitato", Avanti; come Delimitatore spunti Altro e accanto inserisci il "punto"; Fine

In questo modo 1.2.3.4.5 sara' trasformato in 1 - 2 - 3 - 4 - 5 in col C D E F G; su questi dati fai girare la prima macro.

Magari e' meglio se prima di Testo-in-colonna pulisci le colonne adiacenti che saranno uate per contenere il risultato.

Puoi anche registrare una macro mentre esegui sia la pulizia che il Testo-in-colonna, cosi' ti bastera' inserire il codice prodotto in testa alla macro di Avatar per avere la nuova macro.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro al quesito esposto

Postdi Lucio Peruggini » 02/05/11 23:46

Se non ho capito male ma è proprio ciò che volevo evitare; è quello di avere cinque colonne anziché una sola.
Grazie per la spiegazione
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Re: Macro al quesito esposto

Postdi Anthony47 » 02/05/11 23:53

Il mio processo riporta i dati al layout che avevi descritto nel primo post, potendo cosi' usare la prima macro che (avevo capito) funzionava bene.
Se invece il layout preferito e' quello in una sola colonna con i "punti" tra i numeri allora va bene la seconda macro di Avatar.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro al quesito esposto

Postdi Avatar3 » 03/05/11 00:16

Il consiglio di Anthony è sicuramente quello più razionale per avere un archivio da analizzare anche per future statistiche
Mi "stona" anche la disposizione che vorresti avere:
due numeri su un foglio, poi 3 in un altro etc etc
in quanto un ambo non è formato dai primi due numeri ma anche dal primo con il terzo o quarto o quinto etc
comunque modificando la macro precedente ora potrai ottenere il conteggio, dei numeri centrati, nella colonna G
Codice: Seleziona tutto
Sub Colora2()
Worksheets("Foglio2").Select
URC = Worksheets("Foglio2").Range("C" & Rows.Count).End(xlUp).Row
Worksheets("Foglio2").Range("C1:C" & URC).Interior.ColorIndex = xlNone
Worksheets("Foglio2").Range("G1:G" & URC).ClearContents
Dim VettV(5) As Integer
    For RR = 1 To URC
        Contatore = 0
        VettV(1) = Val(Mid(Range("C" & RR).Text, 1, 2))
        VettV(2) = Val(Mid(Range("C" & RR).Text, 4, 2))
        VettV(3) = Val(Mid(Range("C" & RR).Text, 7, 2))
        VettV(4) = Val(Mid(Range("C" & RR).Text, 10, 2))
        VettV(5) = Val(Mid(Range("C" & RR).Text, 13, 2))
        For CC = 12 To 26
            ValC = Cells(1, CC).Value
            If ValC = VettV(1) Then Contatore = Contatore + 1
            If ValC = VettV(2) Then Contatore = Contatore + 1
            If ValC = VettV(3) Then Contatore = Contatore + 1
            If ValC = VettV(4) Then Contatore = Contatore + 1
            If ValC = VettV(5) Then Contatore = Contatore + 1
            If Contatore > 0 Then Range("C" & RR).Interior.ColorIndex = 6
            Range("G" & RR).Value = Contatore
        Next CC
    Next RR
End Sub


E' per una stringa di 5 numeri ma funziona anche con 2, 3, 4 numeri
quindi la puoi far girare per ogni foglio
facendo una routine e scansionando i quattro fogli (sostituendo il nome Foglio2 con la variabile foglio della routine)

Ciao
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: Macro al quesito esposto

Postdi Lucio Peruggini » 03/05/11 15:34

Grazie Avatar per quanto hai fatto.

Ci sono molte cose incomprensibili in questo gioco e ognuno di noi lo può vedere sotto moltissimi aspetti.
La ricerca, infatti, non per tutti assume le medesime caratteristiche.

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

Re: Macro al quesito esposto

Postdi Avatar3 » 03/05/11 16:13

Visto che la tua esigenza è quella di avere 4 fogli (con due numeri sul primo, 3 sul secondo etc)
ti invio la macro che scansiona i fogli (4) mettendo in ognuno i risultati ed evidenziando le celle con almeno un numero centrato

Codice: Seleziona tutto
Sub Colora3()
For I = 1 To 4
Sheets(I).Select
URC = Range("C" & Rows.Count).End(xlUp).Row
Range("C1:C" & URC).Interior.ColorIndex = xlNone
Range("G1:G" & URC).ClearContents
Dim VettV(5) As Integer
    For RR = 1 To URC
        Contatore = 0
        VettV(1) = Val(Mid(Range("C" & RR).Text, 1, 2))
        VettV(2) = Val(Mid(Range("C" & RR).Text, 4, 2))
        VettV(3) = Val(Mid(Range("C" & RR).Text, 7, 2))
        VettV(4) = Val(Mid(Range("C" & RR).Text, 10, 2))
        VettV(5) = Val(Mid(Range("C" & RR).Text, 13, 2))
        For CC = 12 To 26
            ValC = Cells(1, CC).Value
            For VV = 1 To 5
            If ValC = VettV(VV) Then Contatore = Contatore + 1
            Next VV
            If Contatore > 0 Then Range("C" & RR).Interior.ColorIndex = 6
            Range("G" & RR).Value = Contatore
        Next CC
    Next RR
Next I
End Sub


Ciao
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: Macro al quesito esposto

Postdi Lucio Peruggini » 03/05/11 16:19

Questa unione è ottima la provo e ti farò sapere.

Suppongo la si debba inserire nel foglio uno, vero?
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Re: Macro al quesito esposto

Postdi Lucio Peruggini » 03/05/11 19:49

http://screenshotuploader.com/s/Sy8ga1FMoVG

http://screenshotuploader.com/s/EfzTr14so74


La seconda macro che hai inserito non funziona sui quattro fogli e nemmeno col foglio ultimo che ha la cinquina inserita.

La prima invece, funziona solo sulla cinquina e non con gli altri fogli che contengono gli ambi, le terzine, e le quartine. Come vedi dai due screenshot mi colora tutta la colonna "C" e in "G", mi crea un medesimo numero. Il secondo screenshot è quello della macro corretta con Foglio2.

Probabilmente commetto qualche errore, non so dove!
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Re: Macro al quesito esposto

Postdi Avatar3 » 04/05/11 00:44

L'errore sta nel fatto che non tutte le celle dei numeri di ricerca sono piene (da L1 a Z1)
quindi ho fatto una modifica adattando la macro a questa condizione

Codice: Seleziona tutto
Sub Colora3()
For I = 1 To 4
Sheets(I).Select
URC = Range("C" & Rows.Count).End(xlUp).Row
Range("C1:C" & URC).Interior.ColorIndex = xlNone
Range("G1:G" & URC).ClearContents
Dim VettV(5) As Integer
    For RR = 1 To URC
        Contatore = 0
        VettV(1) = Val(Mid(Range("C" & RR).Text, 1, 2))
        VettV(2) = Val(Mid(Range("C" & RR).Text, 4, 2))
        VettV(3) = Val(Mid(Range("C" & RR).Text, 7, 2))
        VettV(4) = Val(Mid(Range("C" & RR).Text, 10, 2))
        VettV(5) = Val(Mid(Range("C" & RR).Text, 13, 2))
        For CC = 12 To 26
        If Cells(1, CC).Value <> 0 Then
            ValC = Cells(1, CC).Value
            For VV = 1 To 5
            If ValC = VettV(VV) Then Contatore = Contatore + 1
            Next VV
            If Contatore > 0 Then Range("C" & RR).Interior.ColorIndex = 6
            Range("G" & RR).Value = Contatore
        End If
        Next CC
    Next RR
Next I
End Sub



ti invio anche il file

https://rapidshare.com/files/460483293/ColoraCelle3.xls

Avvia l'unica macro

Ciao
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: Macro al quesito esposto

Postdi Lucio Peruggini » 04/05/11 12:35

Grazie Avatar è perfetto!
Avrei solo bisogno di avere una riga vuota sopra laddove applicare i filtri e altre indicizazioni.
Ci ho provato ma non ci riesco!
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 890
Iscritto il: 24/01/11 16:23

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Macro al quesito esposto":


Chi c’è in linea

Visitano il forum: patel, Zer0Kelvin e 28 ospiti