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

[Excel 2007]-Macro per rilevare colonne particolari II Opzioni
aetio
Inviato: Thursday, January 23, 2014 2:41:44 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
premetto che so perfettamente di annegare in un bicchiere d'acqua, ma nonostante stia lavorando intorno a questa macro
(vista nel 3d http://forum.aiutamici.com/yaf_postst91753_Excel-2007-Macro-per-rilevare-colonne-particolari.aspx)

Sub Vuote12()
ur = Range("a" & Rows.Count).End(xlUp).Row
Ntab = Int(ur / 25)
riga = 5
ctr = False
For n = 1 To Ntab
Set area = Cells(riga, 36).CurrentRegion
colTab = area.Columns.Count + 35
If area.Rows.Count >= 14 Then
For y = 36 To colTab
Utab = Cells(riga + 23, y).End(xlUp).Row
Set areatab = Range(Cells(riga + 1, y), Cells(riga + area.Rows.Count - 2, y))
areatab.Select
For Each cl In areatab
If cl.Value = "" Then
cont = cont + 1
ctr = True
Else
ctr = False
End If
If ctr = True And Utab = riga And cont >= 12 Then
areatab.Interior.ColorIndex = 3
End If
If Not ctr Then
If cont >= 12 Then
Range(Cells(cl.Row - 1, cl.Column), Cells(cl.Row - 1 - (cont - 1), cl.Column)).Interior.ColorIndex = 3
cont = 0
Else: cont = 0
End If
End If
Next cl
cont = 0
Set areatab = Nothing
Next y
End If
riga = riga + 25
Set area = Nothing
Next n
End Sub


non riesco ad adattarla alla mia attuale esigenza, che peraltro è assai più semplice...
e di questo mi vergogno (SIGH!!)

Le specifiche sono (vedi QUESTO esempio):
- deve lavorare in >=9 anziché >=12
- i 2 range (di altezza variabile) da scansionare interessano solo le colonne da X a AB (1^tabellina) e da AH a AL (2^tabellina), partendo da riga 2
- le tabelle sono sempre solo 2 (come nell'esempio, a variare è solo l'altezza e non la larghezza)

Grazie assai, buon pomeriggio
eZio

Sponsor
Inviato: Thursday, January 23, 2014 2:41:44 PM

 
a10n11
Inviato: Friday, January 24, 2014 9:35:55 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
prova con questa:
Sub Vuote9()
ur = Range("a" & Rows.Count).End(xlUp).Row
riga = 2
col = 24
ctr = False
For n = 1 To 2
Set area = Cells(riga, col).CurrentRegion
Set area = area.Offset(1, 1).Resize(area.Rows.Count - 1, area.Columns.Count - 2)
coltab = col + area.Columns.Count - 1
If area.Rows.Count >= 9 Then
For y = col To coltab
Utab = Cells(Rows.Count, y).End(xlUp).Row
Set areatab = Range(Cells(riga, y), Cells(area.Rows.Count + 1, y))
areatab.Select
For Each cl In areatab
If cl.Value = "" Then
cont = cont + 1
ctr = True
Else
ctr = False
End If
If ctr = True And Utab = riga And cont >= 9 Then
areatab.Interior.ColorIndex = 3
End If
If Not ctr Then
If cont >= 9 Then
Range(Cells(cl.Row - 1, cl.Column), Cells(cl.Row - 1 - (cont - 1), cl.Column)).Interior.ColorIndex = 3
cont = 0
Else: cont = 0
End If
End If
Next cl
cont = 0
Set areatab = Nothing
Next y
End If
col = col + 9
Set area = Nothing
Next n
End Sub

saluti
Giap



aetio
Inviato: Friday, January 24, 2014 2:41:24 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
innanzi tutto Grazie per le tue lodevoli rapidità ed attenzione. Da solo, credo che sia evidente confrontando le macro, non ce l'avrei MAI fatta a riscriverla.
Ho provato la Sub che non restituisce errore, ma non colora di rosso la colonna >=9 che NON ha celle colorate.
Usando l'esempio:
-ho una coppia di tabelle in cui in col.Z vi sono 9 celle NON colorate (Z2:Z10), ma non vengono colorate di rosso;
-in un'altra coppia di tabelle (di h.totale 14 righe, da riga 2 a 15) in col.AA vi sono 9 celle NON colorate (AA2:AA10), ma non vengono colorate di rosso.
Non riesco a capirne il motivo (se vi fosse qualche errore dovuto a incongruenze verrebbe segnalato...).
Ho corretto l'istruzione
col = col + 9
prima di Set area = Nothing
peché lavorava solo fino a col.AK anziché AL.
Grazie assai, buon pomeriggio
eZio
a10n11
Inviato: Friday, January 24, 2014 3:21:37 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
aetio ha scritto:
Ciao,
innanzi tutto Grazie per le tue lodevoli rapidità ed attenzione. Da solo, credo che sia evidente confrontando le macro, non ce l'avrei MAI fatta a riscriverla.
Ho provato la Sub che non restituisce errore, ma non colora di rosso la colonna >=9 che NON ha celle colorate.
Usando l'esempio:
-ho una coppia di tabelle in cui in col.Z vi sono 9 celle NON colorate (Z2:Z10), ma non vengono colorate di rosso;
-in un'altra coppia di tabelle (di h.totale 14 righe, da riga 2 a 15) in col.AA vi sono 9 celle NON colorate (AA2:AA10), ma non vengono colorate di rosso.
Non riesco a capirne il motivo (se vi fosse qualche errore dovuto a incongruenze verrebbe segnalato...).
Ho corretto l'istruzione
col = col + 9
prima di Set area = Nothing
peché lavorava solo fino a col.AK anziché AL.
Grazie assai, buon pomeriggio
eZio

salve
noin funziona perchè la macro cerca celle vuote non celle colorate.
Non mi pare di aver lettto di questo diverso particolare.
saluti
Giap

aetio
Inviato: Friday, January 24, 2014 3:31:55 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
a10n11 ha scritto:

noin funziona perchè la macro cerca celle vuote non celle colorate.
Non mi pare di aver lettto di questo diverso particolare.
è corretto, cerca celle in colonna NON colorate (h >=9), se le trova colora la porzione di colonna interessata di rosso. Forse prima mi sono espresso male io: nella coppia di tabelle c'è una colonna di 9 celle vuote (Z2:Z10), ma la macro non le colora. Confermo che la sub lavora fino alla fine, ma non colora.
Grazie assai,
eZio
a10n11
Inviato: Friday, January 24, 2014 3:40:53 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
nelll'immagine che hai postato il range z2:z10 non mi pare vuoto.
forse mi sfugge qualcosa.
saluti
Giap

a10n11
Inviato: Friday, January 24, 2014 3:59:32 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
se il range Z2:Z9 (tutte le righe della colonna della tabella) fosse vuoto, dovrai modificare questa riga:

If ctr = True And Utab = riga And cont >= 9 Then

in

If ctr = True And Utab = riga - 1 And cont >= 9 Then

saluti
Giap

aetio
Inviato: Friday, January 24, 2014 4:16:42 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,

a10n11 ha scritto:

se il range Z2:Z9 (tutte le righe della colonna della tabella) fosse vuoto, dovrai modificare questa riga:
If ctr = True And Utab = riga And cont >= 9 Then
in
If ctr = True And Utab = riga - 1 And cont >= 9 Then

sostituito ;-))
E' una condizione che si può presentare.

In questo ESEMPIO il foglio dopo il lavoro della macro:
in col.Z ci sono 9 celle bianche (Z2:Z10), ma non sono state evidenziate di rosso.
Grazie assai,
eZio
a10n11
Inviato: Friday, January 24, 2014 6:38:54 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
aetio ha scritto:
Ciao,

a10n11 ha scritto:

se il range Z2:Z9 (tutte le righe della colonna della tabella) fosse vuoto, dovrai modificare questa riga:
If ctr = True And Utab = riga And cont >= 9 Then
in
If ctr = True And Utab = riga - 1 And cont >= 9 Then

sostituito ;-))
E' una condizione che si può presentare.

In questo ESEMPIO il foglio dopo il lavoro della macro:
in col.Z ci sono 9 celle bianche (Z2:Z10), ma non sono state evidenziate di rosso.
Grazie assai,
eZio


Salve
il problema è di interpretazione.
Per me celle vuote si intendeva celle senza alcun valore, tu intendevi celle senza colore.

questa dovrebbe essere la macro salvo ulteriori fraintendimenti.

Sub NonColorate9()
riga = 2
col = 24
ctr = False
For n = 1 To 2
Set area = Cells(riga, col).CurrentRegion
Set area = area.Offset(1, 1).Resize(area.Rows.Count - 1, area.Columns.Count - 2)
coltab = col + area.Columns.Count - 1
If area.Rows.Count >= 9 Then
For y = col To coltab
Utab = Cells(Rows.Count, y).End(xlUp).Row
Set areatab = Range(Cells(riga, y), Cells(area.Rows.Count + 1, y))
For Each cl In areatab
If cl.Interior.ColorIndex = xlNone Then
cont = cont + 1
ctr = True
Else
ctr = False
End If
If ctr = True And cl.Row = Utab And cont >= 9 Then
Range(Cells(cl.Row, cl.Column), Cells(cl.Row - (cont - 1), cl.Column)).Interior.ColorIndex = 3
End If
If ctr = True And Utab = riga - 1 And cont >= 9 Then
areatab.Interior.ColorIndex = 3
End If
If Not ctr Then
If cont >= 9 Then
Range(Cells(cl.Row - 1, cl.Column), Cells(cl.Row - 1 - (cont - 1), cl.Column)).Interior.ColorIndex = 3
cont = 0
Else: cont = 0
End If
End If
Next cl
cont = 0
Set areatab = Nothing
Next y
End If
col = col + 10
Set area = Nothing
Next n
End Sub

saluti
Giap

aetio
Inviato: Friday, January 24, 2014 6:59:04 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
ora funziona ;-))

Precisazione, doverosa anche se evidente: i tuoi "fraintendimenti" sono, in realtà, nella loro totalità mie "inesattezze", dovute principalmente al fatto che l'universo in cui sono immerso è assai complesso, spesso rasente alla singolarità, quindi difficilmente comprensibile. Il fatto che nonostante queste caratteristiche tu riesca sempre a risolvere i miei problemi la dice assai più lunga di qualsiasi esposizione... In effetti c'è stato un passaggio che, nonostante gli esempi visivi, ha dato origine all'equivoco. Me ne scuso e chiedo venia. Sei il migliore in assoluto.
Grazie infinite, buona serata
eZio

aetio
Inviato: Tuesday, January 28, 2014 10:35:05 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
sto "cercando di studiare" la bellissima macro, che per comodità di lettura riporto

Sub NonColorate9()
riga = 2
col = 24
ctr = False
For n = 1 To 2
Set area = Cells(riga, col).CurrentRegion
Set area = area.Offset(1, 1).Resize(area.Rows.Count - 1, area.Columns.Count - 2)
coltab = col + area.Columns.Count - 1
If area.Rows.Count >= 9 Then
For y = col To coltab
Utab = Cells(Rows.Count, y).End(xlUp).Row
Set areatab = Range(Cells(riga, y), Cells(area.Rows.Count + 1, y))
For Each cl In areatab
If cl.Interior.ColorIndex = xlNone Then
cont = cont + 1
ctr = True
Else
ctr = False
End If
If ctr = True And cl.Row = Utab And cont >= 9 Then
Range(Cells(cl.Row, cl.Column), Cells(cl.Row - (cont - 1), cl.Column)).Interior.ColorIndex = 3
End If
If ctr = True And Utab = riga - 1 And cont >= 9 Then
areatab.Interior.ColorIndex = 3
End If
If Not ctr Then
If cont >= 9 Then
Range(Cells(cl.Row - 1, cl.Column), Cells(cl.Row - 1 - (cont - 1), cl.Column)).Interior.ColorIndex = 3
cont = 0
Else: cont = 0
End If
End If
Next cl
cont = 0
Set areatab = Nothing
Next y
End If
col = col + 10
Set area = Nothing
Next n
End Sub

Supponendo di dovere dare un range definito in altezza (numero di righe, es.da riga 2 a 21), quali variazioni dovrei apportare alle istruzioni della macro? Si riuscirebbe a mantenere quell'impianto compositivo oppure la macro andrebbe riscritta in toto?
A intuito credo che il "centro di massa" del lavoro della macro siano le righe
Set area = Cells(riga, col).CurrentRegion
Set area = area.Offset(1, 1).Resize(area.Rows.Count - 1, area.Columns.Count - 2)
Set areatab = Range(Cells(riga, y), Cells(area.Rows.Count + 1, y))

ma non so proprio come anbrebbero riscritte in modo esatto (il VBa non ammette ragionamenti a spanne)

Grazie assai, buona giornata
eZio
a10n11
Inviato: Tuesday, January 28, 2014 12:29:34 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
Salve
Avendo un range definito le cose si semplificano.
vedi come viene modificata la macro.

Sub NonColorate9Mod()
riga = 2
col = 24
ctr = False
For n = 1 To 2
Set area = Range(Cells(riga, col), Cells(21, col + 4))

For y = col To col + 4
Set areatab = Range(Cells(riga, y), Cells(21, y))

For Each cl In areatab
If cl.Interior.ColorIndex = xlNone Then
cont = cont + 1
ctr = True
Else
ctr = False
End If
If ctr = True And cont >= 9 Then
Range(Cells(cl.Row, cl.Column), Cells(cl.Row - (cont - 1), cl.Column)).Interior.ColorIndex = 3
End If
If Not ctr Then
If cont >= 9 Then
Range(Cells(cl.Row - 1, cl.Column), Cells(cl.Row - 1 - (cont - 1), cl.Column)).Interior.ColorIndex = 3
cont = 0
Else: cont = 0
End If
End If
Next cl
cont = 0
Set areatab = Nothing
Next y

col = col + 10
Set area = Nothing
Next n
End Sub


saluti
Giap

aetio
Inviato: Tuesday, January 28, 2014 2:41:59 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
confrontando passo-passo le due macro ora mi è chiaro. Quanto è bello il VBa!!
Grazie infinite, buon pomeriggio
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.