Condividi:        

conta righe

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

conta righe

Postdi miko » 18/05/11 10:40

salve,
sto cercando di realizzare una macro che partendo da una determinata riga, variabile, e che contiene celle colorate, non consecutive, conti quante righe occupate ci sono tra questa colorata e l'ultima riga occupata del foglio.
il problema è che la riga che contiene le celle colorate può variare e le celle colorate non sono consecutive;
anche l'ultima riga piena del foglio varia aggiornando i dati.
forse il problema si può risolvere con una formula?
vi mostro una immagine che forse spiega meglio il risultato che vorrei ottenere
http://img196.imageshack.us/img196/8666/esempiobt.jpg
evidentemente se la riga colorata coincide con l'ultima riga il risultato deve essere 0 (zero).
saluti, grazie
windows 10 - office 2013
miko
Utente Senior
 
Post: 520
Iscritto il: 29/12/09 10:44

Sponsor
 

Re: conta righe

Postdi KITT » 18/05/11 12:59

Ciao, vorrei tentare di darti una mano, mi chiarisci solo in base a cosa viene determinata la variabilita' della prima riga?
ciao
KITT
XP - OFFICE 2003 - ENG
WIN 7 - OFFICE 2010 - ENG
Avatar utente
KITT
Utente Junior
 
Post: 75
Iscritto il: 16/05/11 08:20

Re: conta righe

Postdi ricky53 » 18/05/11 13:31

Ciao Miko,
il colore è sempre "Rosso" oppure le celle "Non Colorate" hanno il colore standard (quello di "default" di excel) ?
Tu utilizzi solo un colore ?
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: conta righe

Postdi KITT » 18/05/11 13:54

Ciao, basandomi solo su quanto hai scritto mi viene da suggerirti questo prendendo ad esempio la colonna B:

1 - determino la lunghezza della colonna tenendo conto che puo’ variare

InizioColonna = ActiveSheet.Cells(1, 2).End(xlDown).Row
FineColonna = ActiveSheet.Cells(65536, 2).End(xlUp).Row
LunghezzaColonna = (FineColonna - InizioColonna) + 1

2 - esamino le celle dal basso verso l'alto e se trovo la cella rossa la seleziono e conto quante celle ci sono tra questa e la fine della colonna

For x = FineColonna To 1 Step -1
If Cells(x, 2).Interior.ColorIndex = 3 Then
Cells(x, 2).Select

CellaDiPartenza = ActiveCell.Row

NumeroCelleTraFineColonnaECellaRossa = FineColonna - CellaDiPartenza

MsgBox “il numero di celle intercorrenti tra ‘lultima cella rossa e l’ultima cella della colonna e’: “ & NumeroCelleTraFineColonnaECellaRossa
Exit Sub
End If
Next x

End Sub

Spero possa esserti utile come spunto oppure fornisci gentilmente piu' dettagli.
Ciao a presto
KITT
XP - OFFICE 2003 - ENG
WIN 7 - OFFICE 2010 - ENG
Avatar utente
KITT
Utente Junior
 
Post: 75
Iscritto il: 16/05/11 08:20

Re: conta righe

Postdi ricky53 » 18/05/11 13:56

Ciao,
prova questo esempio ... sul quale lavorare:
Codice: Seleziona tutto
Option Explicit

Sub Trova_Distanza_Ultima_Riga_da_Ultima_Cella_Colorata()
    Dim UR As Long, UC As Long, Cella As Range, RCol As Long, Distanza As Long
    UR = Range("A" & Rows.Count).End(xlUp).Row
    UC = Range("A1").End(xlToRight).Column
    For Each Cella In Range("A1", Cells(UR, UC))
        If Cella.Interior.ColorIndex <> xlNone And Cella.Interior.ColorIndex <> 34 Then
            RCol = Cella.Row
        End If
    Next Cella
    Distanza = UR - RCol
    MsgBox "LA distanza è: " & Distanza
End Sub


Commento: per fare elaborazioni o controlli e preferibile fare riferimento a valori presenti in celle piùttosto che a celle colorate.


. . . . . .
EDIT: Opps Kitt ci siamo sovrapposti

HO MODIFICATO il CONTROLLO inserendo il colore "34"

Ciao da Ricky53
. . . . . .
Ultima modifica di ricky53 su 18/05/11 14:05, modificato 3 volte in totale.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: conta righe

Postdi miko » 18/05/11 13:58

ciao, grazie per avermi risposto;
il colore di base di tutte le celle nel range è il turchese, se ricordo il codice è il 34;
per effetto di una macro trova valori, il colore delle celle che contengono tali valori
cambia in rosso;
per cui se su una riga si trovano più valori cercati si avranno, anche non consecutivamente, celle di colore turchese e celle di colore rosso, queste ultime contengono i valori cercati;
la macro trova, evidenzia tutte le celle che contengono i valori cercati, su tutte le righe che contengono quei valori.
quello che mi interessa è stabilire la distanza tra l'ultima riga che contiene celle di colore rosso e l'ultima riga piena del foglio.
grazie
windows 10 - office 2013
miko
Utente Senior
 
Post: 520
Iscritto il: 29/12/09 10:44

Re: conta righe

Postdi Anthony47 » 18/05/11 14:03

Hai gia' una risposta da KITT e una da Ricky; pero' il mio ragionamento e':
-hai gia' una macro che colora di rosso
-allora memorizza in una variabile il numero di riga su cui applichi il rosso
-alla fine della macro fai UltimaRiga-RigaArrossata

Quindi non userai una macro nuova ma una variazione alla macro con cui lavori.

O non e' possibile?

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

Re: conta righe

Postdi miko » 18/05/11 14:09

a riciao,
mentre scrivevo per rispondere ai vostri post, avete inserito i vostri suggerimenti;
ora li provo entrambi e vi faccio sapere;
anche il suggerimento di anthony può essere efficace, ma mi crea il problema di modificare una macro complessa, cosa difficile per le mie conoscenze del vba.
ma provo anche questa soluzione
grazie, saluti
windows 10 - office 2013
miko
Utente Senior
 
Post: 520
Iscritto il: 29/12/09 10:44

Re: conta righe

Postdi miko » 18/05/11 18:15

ciao, ho provato le macro che avete realizzato;
con qualche piccola modifica per adattarle al mio range, funzionano entrambe molto bene;
quella proposta da KITT, anche se funziona, non può essere applicata al mio caso, poichè presuppone che l'ultima cella colorata si trovi sempre in colonna B, mentre nel mio caso la cella colorata si può trovare in una qualunque colonna tra B e K, non necessariamente in colonna B;
se la cella colorata non si trova in colonna B la macro di KITT non fornisce alcun risultato.
ho provato a modificarla ma è stato un disastro.
grazie per il vostro contributo.
saluti
windows 10 - office 2013
miko
Utente Senior
 
Post: 520
Iscritto il: 29/12/09 10:44

Re: conta righe

Postdi miko » 18/05/11 19:27

salve,
vorrei aggiungere che continuando a provare la macro di ricky53 ho notato una lentezza di esecuzione anche quando la distanza tra le righe in questione è molto piccola, poche righe, 4 o 5 righe tra l'ultima colorata e l'ultima riga del foglio.
eseguendo la macro con f8 ho capito come funziona, ma non so come modificarla, se ciò è possibile, per renderla più veloce;
forse bisogna cambiare tutta la macro?
grazie ciao
windows 10 - office 2013
miko
Utente Senior
 
Post: 520
Iscritto il: 29/12/09 10:44

Re: conta righe

Postdi ricky53 » 18/05/11 23:50

Ciao,
strano perchè sul mio PC (che non è proprio dell'ultima generazione ma ha tre Gb di ram) con 1000 righe e 30 colonne impiega da meno di 2 a meno di 3 secondi.
Tu quanta ram hai ?

Quante righe e colonne hai ?

Si può fare qualcosa (lavorare in memoria con una array oppure se la cella colorata è spesso verso la fine dei dati si può invertire il senso di scorrimento delle celle: ossia partire dal basso verso l'alto, cosa che volevo fare ma ... "for each" è veloce)
... prima prova questa versione che ti dice il tempo impiegato ad elaborare le celle
Codice: Seleziona tutto
Option Explicit

Sub Trova_Distanza_Ultima_Riga_da_Ultima_Cella_Colorata()
    Dim Inizio As Double, Fine As Double
    Dim UR As Long, UC As Long, Cella As Range, RCol As Long, Distanza As Long
   
    Inizio = Timer
   
    UR = Range("A" & Rows.Count).End(xlUp).Row
    UC = Range("A1").End(xlToRight).Column

    For Each Cella In Range("A1", Cells(UR, UC))
        If Cella.Interior.ColorIndex <> xlNone And Cella.Interior.ColorIndex <> 34 Then
            RCol = Cella.Row
        End If
    Next Cella
   
    Distanza = UR - RCol
    Fine = Timer
   
    MsgBox "La distanza è: " & Distanza & vbCrLf & vbCrLf & _
    "Il tempo di elaborazione è di  " & Format(Fine - Inizio, "0.000") & " Secondi"
End Sub
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: conta righe

Postdi ricky53 » 19/05/11 00:18

Ciao,
prova questa nuova versione che scorre le celle, dal basso, ed esce dal ciclo appena trova una cella colorata con colore diverso da "34"
Codice: Seleziona tutto
Option Explicit

Sub Trova_Distanza_Ultima_Riga_da_Ultima_Cella_Colorata_New()
    Dim Inizio As Double, Fine As Double, I As Long, Range1 As Range
    Dim UR As Long, UC As Long, Cella As Range, RCol As Long, Distanza As Long
   
    Inizio = Timer
   
    UR = Range("A" & Rows.Count).End(xlUp).Row
    UC = Range("A1").End(xlToRight).Column


    For I = UR To 1 Step -1
        Set Range1 = Range("A" & I, Cells(I, UC))
        For Each Cella In Range1
            If Cella.Interior.ColorIndex <> xlNone And Cella.Interior.ColorIndex <> 34 Then
                RCol = Cella.Row
                GoTo Fine
            End If
        Next Cella
    Next I

Fine:
    Distanza = UR - RCol
    Fine = Timer
   
    MsgBox "La distanza è: " & Distanza & vbCrLf & vbCrLf & _
    "Il tempo di elaborazione è di  " & Format(Fine - Inizio, "0.0000") & " Secondi"
End Sub
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: conta righe

Postdi miko » 21/05/11 11:54

salve,
ho provato le tue ultime macro, entrambe valide;
la penultima impiega qualche secondo, ma l'ultima è velocissima, qualche decimo di secondo.
grazie ricky53
saluti
windows 10 - office 2013
miko
Utente Senior
 
Post: 520
Iscritto il: 29/12/09 10:44

Re: conta righe

Postdi miko » 21/05/11 11:56

hops, ho dimenticato di ringraziare anche KITT
ciao
windows 10 - office 2013
miko
Utente Senior
 
Post: 520
Iscritto il: 29/12/09 10:44

Re: conta righe

Postdi ricky53 » 21/05/11 20:39

Ciao,
grazie a te per il riscontro.

Buon proseguimento.

Alla prossima e ... noi siamo QUI.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: conta righe

Postdi KITT » 22/05/11 19:50

Grazie a te Miko, ho imparato molto anche io dal tuo post.

Ciao
KITT
XP - OFFICE 2003 - ENG
WIN 7 - OFFICE 2010 - ENG
Avatar utente
KITT
Utente Junior
 
Post: 75
Iscritto il: 16/05/11 08:20


Torna a Applicazioni Office Windows


Topic correlati a "conta righe":


Chi c’è in linea

Visitano il forum: Nessuno e 84 ospiti