Aiutamici Forum
Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

[Excel 2007]-Macro per selezionare celle in tabella filtrata Opzioni
aetio
Inviato: Friday, December 27, 2013 10:31:13 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
in una tabella filtrata come QUESTA devo selezionare (Ctrl+sin.mouse) SOLO le celle visibili bordate di rosso, per poi applicare una macro.
La tabella ha un'altezza variabile, le celle contengono dei codici che però non sono oggetto di questo problema (nella tabella dell'esempio li ho cancellati per non appesantire il file), le colonne interessate dalla tabella sono da col.A a col.AH, da riga 3 a fine tabella (non vi sono righe vuote).
Ora svolgo il lavoro manualmente, ma sicuramente è possibile fare eseguire questo compito da una macro.
Grazie assai, buona giornata
eZio
Sponsor
Inviato: Friday, December 27, 2013 10:31:13 AM

 
a10n11
Inviato: Wednesday, January 08, 2014 3:54:28 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
una soluzione che ritengo molto casalinga potrebbe essere questa:

Sub prova()
Dim cl As Range
Uriga = Cells(Rows.Count, 1).End(xlUp).Row
Set area = Range("H2", Range("AG" & Uriga)).SpecialCells(xlCellTypeVisible)
For Each cl In area
If cl.Borders.Weight = 4 Then
If cl.Borders.LineStyle = 1 Then
If cl.Borders.Color = 255 Then
Set rngsel = cl
rngsel.Select
Exit For
End If
End If
End If
Next
For Each cl In area
If cl.Borders.Weight = 4 Then
If cl.Borders.LineStyle = 1 Then
If cl.Borders.Color = 255 Then
Set rngsel = Application.Union(rngsel, cl)
End If
End If
End If
Next cl
rngsel.Select
Set rngsel = Nothing
End Sub

saluti
Giap

aetio
Inviato: Thursday, January 09, 2014 9:28:35 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
la tua soluzione "molto casalinga" funziona alla perfezione...!!
Se hai voglia e tempo, mi dai una sintetica spiegazione del significato dei numeri nelle istruzioni
If cl.Borders.Weight = 4 Then
If cl.Borders.LineStyle = 1 Then
If cl.Borders.Color = 255 Then

E il codice
Set rngsel = Application.Union(rngsel, cl)
che non ho mai visto?
Grazie assai, buona giornata
eZio
a10n11
Inviato: Thursday, January 09, 2014 10:01:11 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
aetio ha scritto:
Ciao,
la tua soluzione "molto casalinga" funziona alla perfezione...!!
Se hai voglia e tempo, mi dai una sintetica spiegazione del significato dei numeri nelle istruzioni
If cl.Borders.Weight = 4 Then
If cl.Borders.LineStyle = 1 Then
If cl.Borders.Color = 255 Then

E il codice
Set rngsel = Application.Union(rngsel, cl)
che non ho mai visto?
Grazie assai, buona giornata
eZio


salve
con le istruzioni che seguono, si controlla il tipo di bordo, lo spessore del bordo ed il colore:

If cl.Borders.Weight = 4 Then equivale ad un bordo Xlmedium
si poteva scrivere If cl.Borders.Weight = Xlmedium Then

If cl.Borders.LineStyle = 1 Then equivale ad un bordo linea continua
si poteva scrivere If cl.Borders.LineStyle =xlContinuous Then


If cl.Borders.Color = 255 Then il colore 255 è quello che ho estratto dal tuo file

L'istruzione che segue, serve ad aggregare alla variabile Rngsel tutte le celle bordate di rosso
che trova nella scansione della tabella. Il metodo Union unisce in una unica variabile intervalli di range
Set rngsel = Application.Union(rngsel, cl)

saluti
Giap


aetio
Inviato: Thursday, January 09, 2014 3:01:10 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
Grazie, come sempre chiaro e sintetico.
Di questa
Commenta:
If cl.Borders.Color = 255 Then il colore 255 è quello che ho estratto dal tuo file

ne avevo intuito il compito, ma temevo di dire una fesseria dato che Color = 255 non l'ho trovato scritto in alcun sito web.
E' forse un modo diverso di scrivere questo gruppo di istruzioni:
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 10079487
.TintAndShade = 0
.PatternTintAndShade = 0
End With
??
Dove posso trovare un elenco di codici dei colori Excel di tipo Color (quindi non ColorIndex)?
(forse in una pagina specifica della Guida di Excel)
Qual'è la procedura per "estrarre" da Excel tali codici di colore?
Grazie assai, buon pomeriggio
eZio
a10n11
Inviato: Thursday, January 09, 2014 8:14:01 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
aetio ha scritto:
Ciao,
Grazie, come sempre chiaro e sintetico.
Di questa
Commenta:
If cl.Borders.Color = 255 Then il colore 255 è quello che ho estratto dal tuo file

ne avevo intuito il compito, ma temevo di dire una fesseria dato che Color = 255 non l'ho trovato scritto in alcun sito web.
E' forse un modo diverso di scrivere questo gruppo di istruzioni:
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 10079487
.TintAndShade = 0
.PatternTintAndShade = 0
End With
??
Dove posso trovare un elenco di codici dei colori Excel di tipo Color (quindi non ColorIndex)?
(forse in una pagina specifica della Guida di Excel)
Qual'è la procedura per "estrarre" da Excel tali codici di colore?
Grazie assai, buon pomeriggio
eZio


Salve
la premessa è questa:
Colorindex utilizza l'indice (da 1 a 56) della paletta dei colori standard di excel
Color Utilizza la gamma RGB dei colori
nel caso sopra : il valore 255 della proprità Color è equivalante a 3 della proprietà colorindex.

se fai girare la macro che segue (mutuata in rete con una m ia piccola modifica) avrai la lista dei Colorindex con l'equivalente
del valore Color


Sub ShowColors()
'Based on fact that
'RGB(R, G, B) = 65536 * B + 256 * G + R
Dim i As Long, C As Long

Dim R As Long, G As Long, B As Long
Range("A1").Value = "Index"
Range("B1").Value = "Color"
Range("C1").Value = "R"
Range("D1").Value = "G"
Range("E1").Value = "B"
Range("F1").Value = "Check"
Range("G1").Value = "Color"
For i = 1 To 56
Range("A1").Offset(i, 0).Value = i
Range("B1").Offset(i, 0).Interior.ColorIndex = i
C = Range("B1").Offset(i, 0).Interior.Color
Range("G1").Offset(i, 0) = C
R = C Mod 256
G = ((C - R) Mod 65536) / 256
B = (C - 256 * G - R) / 65536
Range("C1").Offset(i, 0).Value = R
Range("D1").Offset(i, 0).Value = G
Range("E1").Offset(i, 0).Value = B
Range("F1").Offset(i, 0).Interior.Color = RGB(R, G, B)
Next i
End Sub

saluti
Giap





aetio
Inviato: Thursday, January 09, 2014 10:13:31 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
Eccezionale...!!

Grazie assai, buona serata
eZio
Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.