Condividi:        

Esiste una formula excel per questo?

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

Esiste una formula excel per questo?

Postdi verdemont » 26/05/12 09:22

Salve a tutti sono nuovo del forum.
Avrei bisogno di un aiuto.

esiste una formula per fare questo?
http://i48.tinypic.com/546bli.gif

In pratica vorrei che excel mi restituisse nella colonna C (Eventi) dopo quante volte, partendo da A1, il valore in B2 è stato raggiunto. Nell'esempio, la P ha raggiunto valore 4 dopo 7 eventi (nelle cella A7). Quindi vorrei che excel in C2 mi scrivesse 7 e così via: in C3 deve cominciare a contare 4 eventi P a partire dalla cella successiva a dove si era fermato in precedenza,ossia da A8, e fermarsi dopo che il valore P sia di nuovo 4. (Nell'es si deve fermare di nuovo in A12 e restituirmi in C3 il valore 5 che rappresenta il numero di eventi che ci sono voluti prima che P fosse uscito 4 volte).

E' possibile farlo con una formula?
Grazie in anticipo
Verdemont
verdemont
Utente Junior
 
Post: 40
Iscritto il: 26/05/12 08:16

Sponsor
 

Re: Esiste una formula excel per questo?

Postdi CANAPONE » 26/05/12 10:29

Ciao

prova la formula da confermare con control+maiusc+invio (603)


Codice: Seleziona tutto
=MIN(SE(CONTA.SE(INDIRETTO("A1:A"&RIF.RIGA(A1:A100));"P")=B2;RIF.RIGA(A1:A100)))


Saluti
---------------
Excel 2004 su Mac
Excel 2010 su Windows 8
CANAPONE
Utente Senior
 
Post: 430
Iscritto il: 22/11/10 15:43
Località: Firenze

Re: Esiste una formula excel per questo?

Postdi Flash30005 » 26/05/12 11:46

Ho eliminato il post identico, nel quale avevo risposto che con una macro è più semplice da realizzare (anche perché non credo sia possibile con formule) e domandavo il perché non utilizzare una macro invece della formula (?)

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Esiste una formula excel per questo?

Postdi verdemont » 26/05/12 14:58

Flash30005 ha scritto:Ho eliminato il post identico, nel quale avevo risposto che con una macro è più semplice da realizzare (anche perché non credo sia possibile con formule) e domandavo il perché non utilizzare una macro invece della formula (?)

ciao


Grazie Flash, la macro va bene. Me la puoi postare per favore?
Con la formula ho provato ma mi da valore 0 e non ho capito cosa significa da confermare "con control+maiusc+invio (603)". Non sono esperto di excel.

Grazie ancora per l'aiuto.
Verdemont
verdemont
Utente Junior
 
Post: 40
Iscritto il: 26/05/12 08:16

Re: Esiste una formula excel per questo?

Postdi CANAPONE » 26/05/12 15:24

Ciao,

è una formula matriciale, una volta copiata nella cella, per farla funzionare devi cliccare due volte sulla cella e premendo contemporaneamente i tasti control e maiuscolo premere invio.

La formula se confermata correttamente apparirà nella barra della formula abbracciata da due parentesi graffe.

Allego un piccolo esempio (non fotografico)

http://wikisend.com/download/887728/604.xls


Saluti
---------------
Excel 2004 su Mac
Excel 2010 su Windows 8
CANAPONE
Utente Senior
 
Post: 430
Iscritto il: 22/11/10 15:43
Località: Firenze

Re: Esiste una formula excel per questo?

Postdi Flash30005 » 26/05/12 17:01

Questa, invece, è una macro che dovrebbe assolvere il conpito richiesto
Codice: Seleziona tutto
Sub ContaEv()
UR = Range("A" & Rows.Count).End(xlUp).Row
LE = Range("B1").Value
NE = Range("B2").Value
Conta = 0
RRp = 2
RC = 0
For RR = 1 To UR
    If Range("A" & RR).Value = LE Then
        Conta = Conta + 1
    End If
    If Conta = NE Then
        Range("C" & RRp).Value = RR - RC
        Conta = 0
        RRp = RRp + 1
        RC = RR
    End If
Next RR
End Sub


Tieni presente che in "B1" dovrai mettere solo la lettera "P" (P maiuscola, senza apici e senza altre stringhe)
In B2 il valore 4 (o altro), per il resto, la macro rispecchia lo schema impostato nell'immagine.
Immagine
gif hosting

Ciao

EDIT ore 18:30 corretta macro
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Esiste una formula excel per questo?

Postdi CANAPONE » 26/05/12 18:06

Ciao a tutti,

seguo il ragionamento di Flash30005,

Uso - di nuovo - delle formule in forma matrice.

In B2 P
In C2 da copiare in basso

Codice: Seleziona tutto
=se(min(se(conta.se(indiretto("A$1:A"&rif.riga(A$1:A$100));B$1)=B$2*rif.riga(A1);rif.riga(A$1:A$100)))-somma(C$1:C1)<=0;"";min(se(conta.se(indiretto("A$1:A"&rif.riga(A$1:A$100));B$1)=B$2*rif.riga(A1);rif.riga(A$1:A$100)))-somma(C$1:C1))


Sicuramente la macro è soluzione molto più pratica ed elegante

http://wikisend.com/download/597474/604.xls

Saluti
---------------
Excel 2004 su Mac
Excel 2010 su Windows 8
CANAPONE
Utente Senior
 
Post: 430
Iscritto il: 22/11/10 15:43
Località: Firenze

Re: Esiste una formula excel per questo?

Postdi verdemont » 26/05/12 19:25

Grazie ragazzi, siete straordinari!!!!, era quello che mi serviva. Sia la macro sia la formula rappresentano quello che chiedevo. :)

Volevo chiedere però un'ultima modifica se mi è consentito: vorrei aggiungere un'ulteriore variabile.

In pratica se per contare 4 volte la P si supera un certo range che stabilisco io, allora vorrei che excel mi dicesse quante P ci sono in quel range e poi che incominciasse a contare nuovamente 4 volte P dalla cella successiva.

Ad es., io dico ad excell contami 4 P in un range di 11 celle se però all'11ma cella non hai raggiunto 4 allora fermati, dimmi quale valore hai raggiunto e ricomincia a contare 4 dalla cella successiva sempre in un range di 11 celle, e così via.

Grazie ancora per l'aiuto.
Verdemont
verdemont
Utente Junior
 
Post: 40
Iscritto il: 26/05/12 08:16

Re: Esiste una formula excel per questo?

Postdi Flash30005 » 26/05/12 23:07

Con macro puoi fare così
Codice: Seleziona tutto
Sub ContaEv3()
UR = Range("A" & Rows.Count).End(xlUp).Row
Range("C2:C10000").ClearContents
LE = Range("B1").Value
NE = Range("B2").Value
MaxC = Range("B3").Value  '<<<< In "B3" ho inserito la variabile max intervallo
Conta = 0
RRp = 2
RC = 0
For RR = 1 To UR
CMC = CMC + 1
    If Range("A" & RR).Value = LE Then Conta = Conta + 1
    If RR - RC = MaxC Then Range("C" & RRp).Value = Conta  '<<<< Per dare priorità alle righe commentare questa riga
    If Conta = NE Then Range("C" & RRp).Value = RR - RC
    'If RR - RC = MaxC Then Range("C" & RRp).Value = Conta   '<<<< Per dare priorità alle righe togliere questo commento
    If Conta = NE Or RR - RC = MaxC Then
        Conta = 0
        RRp = RRp + 1
        RC = RR
    End If
Next RR
End Sub

C'è solo un dubbio ammettendo che in un range di 7 righe ci siano 4 simboli "P" e hai scelto sia la quantità 4 che max range 7 quale delle due condizioni è prioritaria?
Trovando 4 P dovrebbe trascrivere 7
ma soddisfa anche la condizione con 7 righe quindi dovrebbe trascrivere 4

La macro così impostata dà priorità alla quantita delle P (4 P) quindi scrive 7
Altrimenti commenta la riga evidenziata e togli il commento alla riga commentata

Fai sapere

ciao

EDIT ore 01:00 - modificata macro per dare possibilità di scelta priorità
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Esiste una formula excel per questo?

Postdi verdemont » 27/05/12 14:44

Flash30005 ha scritto:Con macro puoi fare così
Codice: Seleziona tutto
Sub ContaEv3()
UR = Range("A" & Rows.Count).End(xlUp).Row
Range("C2:C10000").ClearContents
LE = Range("B1").Value
NE = Range("B2").Value
MaxC = Range("B3").Value  '<<<< In "B3" ho inserito la variabile max intervallo
Conta = 0
RRp = 2
RC = 0
For RR = 1 To UR
CMC = CMC + 1
    If Range("A" & RR).Value = LE Then Conta = Conta + 1
    If RR - RC = MaxC Then Range("C" & RRp).Value = Conta  '<<<< Per dare priorità alle righe commentare questa riga
    If Conta = NE Then Range("C" & RRp).Value = RR - RC
    'If RR - RC = MaxC Then Range("C" & RRp).Value = Conta   '<<<< Per dare priorità alle righe togliere questo commento
    If Conta = NE Or RR - RC = MaxC Then
        Conta = 0
        RRp = RRp + 1
        RC = RR
    End If
Next RR
End Sub

C'è solo un dubbio ammettendo che in un range di 7 righe ci siano 4 simboli "P" e hai scelto sia la quantità 4 che max range 7 quale delle due condizioni è prioritaria?
Trovando 4 P dovrebbe trascrivere 7
ma soddisfa anche la condizione con 7 righe quindi dovrebbe trascrivere 4

La macro così impostata dà priorità alla quantita delle P (4 P) quindi scrive 7
Altrimenti commenta la riga evidenziata e togli il commento alla riga commentata

Fai sapere

ciao

EDIT ore 01:00 - modificata macro per dare possibilità di scelta priorità

Grazie infinite Flash, va bene così, ossia dare la priorità alle q.tà delle P.
Ho impostato il tutto anche con delle formule in modo tale che excel mi dia evidenza anche da quale a quale riga il valore richiesto (nel ns. esempio 4) è stato raggiunto.
Tuttavia vorrei chiederti un'ultimissima cortesia se posso. Vorrei modificare la macro in modo tale che mi dia evidenza anche della situazione eventi non ancora conclusi. Mi spiego:
date le variabili 4 eventi e range 11, excel mi dice che si sono verificati:
4 eventi su 7 dalla riga 1 alla riga 7
4 eventi su 5 dalla riga 8 alla riga 12
Tuttavia dalla riga 13 alla 18, benchè il range sia inferiore a 11, comunque si sono verificati degli eventi. Vorrei pertanto che excel comunque mi dicesse quanti eventi P si sono verificati (nell'es. gli eventi sono 2 su 6) benchè il range sia inferiore a 11. Quindi fermo restando range 11 sull'intervallo A:A, vorrei analizzare anche il residuo:
Immagine
verdemont
Utente Junior
 
Post: 40
Iscritto il: 26/05/12 08:16

Re: Esiste una formula excel per questo?

Postdi Flash30005 » 27/05/12 18:34

Tutto qui?

Sostituisci la macro precedente con questa: trascrive il "residuo" e eviti di mettere formule in D e E) ;)
Codice: Seleziona tutto
Sub ContaEv3()
UR = Range("A" & Rows.Count).End(xlUp).Row
Range("C2:C10000").ClearContents
LE = Range("B1").Value
NE = Range("B2").Value
MaxC = Range("B3").Value  '<<<< In "B3" ho inserito la variabile max intervallo
Conta = 0
RIni = 1
RRp = 2
RC = 0
For RR = 1 To UR
CMC = CMC + 1
    If Range("A" & RR).Value = LE Then Conta = Conta + 1
    If RR - RC = MaxC Then Range("C" & RRp).Value = Conta
    If Conta = NE Then Range("C" & RRp).Value = RR - RC
    If Conta = NE Or RR - RC = MaxC Then
    Range("D" & RRp).Value = RIni
    Range("E" & RRp).Value = RR
        Conta = 0
        RRp = RRp + 1
        RC = RR
        RIni = RC + 1
    End If
Next RR
Range("C" & RRp).Value = Conta
Range("D" & RRp).Value = RIni
Range("E" & RRp).Value = RR - 1
End Sub

Le colonne F e H mi sembrano inutili in quanto in F hai la quantità (4) e in H hai gli eventi che sono già in colonna C

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Esiste una formula excel per questo?

Postdi verdemont » 27/05/12 23:45

Flash30005 ha scritto:Tutto qui?

Sostituisci la macro precedente con questa: trascrive il "residuo" e eviti di mettere formule in D e E) ;)
Codice: Seleziona tutto
Sub ContaEv3()
UR = Range("A" & Rows.Count).End(xlUp).Row
Range("C2:C10000").ClearContents
LE = Range("B1").Value
NE = Range("B2").Value
MaxC = Range("B3").Value  '<<<< In "B3" ho inserito la variabile max intervallo
Conta = 0
RIni = 1
RRp = 2
RC = 0
For RR = 1 To UR
CMC = CMC + 1
    If Range("A" & RR).Value = LE Then Conta = Conta + 1
    If RR - RC = MaxC Then Range("C" & RRp).Value = Conta
    If Conta = NE Then Range("C" & RRp).Value = RR - RC
    If Conta = NE Or RR - RC = MaxC Then
    Range("D" & RRp).Value = RIni
    Range("E" & RRp).Value = RR
        Conta = 0
        RRp = RRp + 1
        RC = RR
        RIni = RC + 1
    End If
Next RR
Range("C" & RRp).Value = Conta
Range("D" & RRp).Value = RIni
Range("E" & RRp).Value = RR - 1
End Sub

Le colonne F e H mi sembrano inutili in quanto in F hai la quantità (4) e in H hai gli eventi che sono già in colonna C

Ciao


sei un grande Flash!!!!!, non so proprio come ringraziarti. Era quello che cercavo. ;)
Proverò a studiarmi la macro per capirne la struttura, mi piacerebbe provare a fare da solo magari usando altre ipotesi simili a questa che hai trattato.

Grazie
Verdemont
verdemont
Utente Junior
 
Post: 40
Iscritto il: 26/05/12 08:16

Re: Esiste una formula excel per questo?

Postdi Flash30005 » 28/05/12 05:31

Dovresti soltanto modificare o cambiare la riga che pulisce le colonne C, D e E (attualmente pulisce solo la colonna C )
Codice: Seleziona tutto
Range("C2:E10000").ClearContents


Per quanto riguarda la comprensione del codice, così realizzato, penso sia abbastanza elementare ;)

Cerco di spiegarlo con i commenti direttamente nella macro

Codice: Seleziona tutto
Sub ContaEv3()
'  Parte 1 - assegnazioni valori e azzeramento contatori
UR = Range("A" & Rows.Count).End(xlUp).Row   'conta le righe con dati nella colonna A
Range("C2:E10000").ClearContents  ' pulisce le colonne C. D e E a senza eliminare la testata in riga 1
LE = Range("B1").Value  '<<<<< il dato da ricercare
NE = Range("B2").Value '<<<< Numero presenze da cercare
MaxC = Range("B3").Value  '<<<< In "B3" ho inserito la variabile max intervallo
Conta = 0  ' il contatore delle presenze
RIni = 1   ' questa è la riga iniziale
RRp = 2   ' riga dove scriverà i dati
RC = 0   ' Azzeramento contatore per conteggio differenza righe
'<<<<<<<<<<  fine parte 1
For RR = 1 To UR   'ciclo for next da 1 alla fine delle righe esistenti
'CMC = CMC + 1  '  refuso che puoi cancellare
    If Range("A" & RR).Value = LE Then Conta = Conta + 1  'condizione: se valore in cella A riga RR = al valore ricercato LE il contatore Conta aumenta di 1
    If RR - RC = MaxC Then Range("C" & RRp).Value = Conta  'Se la differenza riga attuale - RC = MaxC allora scrive in colonna C riga RRp il valore di Conta
    If Conta = NE Then Range("C" & RRp).Value = RR - RC ' condizione: se conta = NE scrive in colonna C riga RRp il valore della differenza riga attuale e RC
    If Conta = NE Or RR - RC = MaxC Then 'in tutte e due le condizioni esegue il contenuto di questa If
    Range("D" & RRp).Value = RIni  ' scrive in D il valore di RIni
    Range("E" & RRp).Value = RR   ' in E il valore della riga attuale
        Conta = 0  'azzera il contatore Conta
        RRp = RRp + 1  'aggiunge 1 alla variabile RRp per scrivere nella riga successiva
        RC = RR   ' RC assume il valore di RR
        RIni = RC + 1  ' RINi assume il valore di RR + 1
    End If  'Fine condizione
Next RR  ' va alla riga successiva
' qui il ciclo For next è finito
Range("C" & RRp).Value = Conta  ' scrive il residuo Conta
Range("D" & RRp).Value = RIni  ' Riga Iniziale
Range("E" & RRp).Value = RR - 1  'Riga finale è stato detratto 1 perché RR assume sempre un valore maggiore di quello stabilito alla fine del ciclo For Next
End Sub


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Esiste una formula excel per questo?

Postdi verdemont » 28/05/12 18:07

Flash30005 ha scritto:Dovresti soltanto modificare o cambiare la riga che pulisce le colonne C, D e E (attualmente pulisce solo la colonna C )
Codice: Seleziona tutto
Range("C2:E10000").ClearContents


Per quanto riguarda la comprensione del codice, così realizzato, penso sia abbastanza elementare ;)

Cerco di spiegarlo con i commenti direttamente nella macro

Codice: Seleziona tutto
Sub ContaEv3()
'  Parte 1 - assegnazioni valori e azzeramento contatori
UR = Range("A" & Rows.Count).End(xlUp).Row   'conta le righe con dati nella colonna A
Range("C2:E10000").ClearContents  ' pulisce le colonne C. D e E a senza eliminare la testata in riga 1
LE = Range("B1").Value  '<<<<< il dato da ricercare
NE = Range("B2").Value '<<<< Numero presenze da cercare
MaxC = Range("B3").Value  '<<<< In "B3" ho inserito la variabile max intervallo
Conta = 0  ' il contatore delle presenze
RIni = 1   ' questa è la riga iniziale
RRp = 2   ' riga dove scriverà i dati
RC = 0   ' Azzeramento contatore per conteggio differenza righe
'<<<<<<<<<<  fine parte 1
For RR = 1 To UR   'ciclo for next da 1 alla fine delle righe esistenti
'CMC = CMC + 1  '  refuso che puoi cancellare
    If Range("A" & RR).Value = LE Then Conta = Conta + 1  'condizione: se valore in cella A riga RR = al valore ricercato LE il contatore Conta aumenta di 1
    If RR - RC = MaxC Then Range("C" & RRp).Value = Conta  'Se la differenza riga attuale - RC = MaxC allora scrive in colonna C riga RRp il valore di Conta
    If Conta = NE Then Range("C" & RRp).Value = RR - RC ' condizione: se conta = NE scrive in colonna C riga RRp il valore della differenza riga attuale e RC
    If Conta = NE Or RR - RC = MaxC Then 'in tutte e due le condizioni esegue il contenuto di questa If
    Range("D" & RRp).Value = RIni  ' scrive in D il valore di RIni
    Range("E" & RRp).Value = RR   ' in E il valore della riga attuale
        Conta = 0  'azzera il contatore Conta
        RRp = RRp + 1  'aggiunge 1 alla variabile RRp per scrivere nella riga successiva
        RC = RR   ' RC assume il valore di RR
        RIni = RC + 1  ' RINi assume il valore di RR + 1
    End If  'Fine condizione
Next RR  ' va alla riga successiva
' qui il ciclo For next è finito
Range("C" & RRp).Value = Conta  ' scrive il residuo Conta
Range("D" & RRp).Value = RIni  ' Riga Iniziale
Range("E" & RRp).Value = RR - 1  'Riga finale è stato detratto 1 perché RR assume sempre un valore maggiore di quello stabilito alla fine del ciclo For Next
End Sub


Ciao

grazie infinite Flash, adesso mi è tutto un po' più chiaro. Ho provato riuscendoci ad adattare il tutto a questa formattazione. Non sono però riuscito ad inserire un'ulteriore variabile, ossia in H2 indicare ad excel da quale riga della colonna G partire per esaminare gli eventi secondo le variabili I2, J2, K2:

Immagine

ecco il listato della macro:
Codice: Seleziona tutto
Sub ContaEv3()
'  Parte 1 - assegnazioni valori e azzeramento contatori
UR = Range("G" & Rows.Count).End(xlUp).Row   'conta le righe con dati nella colonna A
Range("L2:N10000").ClearContents  ' pulisce le colonne C. D e E a senza eliminare la testata in riga 1
LE = Range("I2").Value  '<<<<< il dato da ricercare
NE = Range("J2").Value '<<<< Numero presenze da cercare
MaxC = Range("K2").Value  '<<<< In "J2" ho inserito la variabile max intervallo
Conta = 0  ' il contatore delle presenze
RIni = 2   ' questa è la riga iniziale
RRp = 2   ' riga dove scriverà i dati
RC = 1   ' Azzeramento contatore per conteggio differenza righe
'<<<<<<<<<<  fine parte 1
For RR = 2 To UR   'ciclo for next da 1 alla fine delle righe esistenti
'CMC = CMC + 1  '  refuso che puoi cancellare
    If Range("G" & RR).Value = LE Then Conta = Conta + 1  'condizione: se valore in cella G riga RR = al valore ricercato LE il contatore Conta aumenta di 1
    If RR - RC = MaxC Then Range("L" & RRp).Value = Conta  'Se la differenza riga attuale - RC = MaxC allora scrive in colonna C riga RRp il valore di Conta
    If Conta = NE Then Range("L" & RRp).Value = RR - RC ' condizione: se conta = NE scrive in colonna C riga RRp il valore della differenza riga attuale e RC
    If Conta = NE Or RR - RC = MaxC Then 'in tutte e due le condizioni esegue il contenuto di questa If
    Range("M" & RRp).Value = RIni  ' scrive in D il valore di RIni
    Range("N" & RRp).Value = RR   ' in E il valore della riga attuale
        Conta = 0  'azzera il contatore Conta
        RRp = RRp + 1  'aggiunge 1 alla variabile RRp per scrivere nella riga successiva
        RC = RR   ' RC assume il valore di RR
        RIni = RC + 1  ' RINi assume il valore di RR + 1
    End If  'Fine condizione
Next RR  ' va alla riga successiva
' qui il ciclo For next è finito
Range("L" & RRp).Value = Conta  ' scrive il residuo Conta
Range("M" & RRp).Value = RIni  ' Riga Iniziale
Range("N" & RRp).Value = RR - 1  'Riga finale è stato detratto 1 perché RR assume sempre un valore maggiore di quello stabilito alla fine del ciclo For Next
End Sub
verdemont
Utente Junior
 
Post: 40
Iscritto il: 26/05/12 08:16

Re: Esiste una formula excel per questo?

Postdi Flash30005 » 28/05/12 22:56

Beh non sarebbe complicato (poi vediamo come fare in caso di...)
In H2 inserisci il valore 2 (riga iniziale)
e comifica il cilco For next così
Codice: Seleziona tutto
For RR = [H2] To UR   'ciclo for next da "n" alla fine delle righe esistenti


L'unico problema, ora si pone se vuoi che il conteggio della prima ricorrenza sia relativa o assoluta
Per relativa si intende rispetto alla riga iniziale (2, 7, 10) oppure assoluta rispetto alla riga 2 del foglio excel (come lo è ora).
Se vuoi ottenere la prima ricorrenza relativa devi inserire il valore H2 alla variabile RIni e cambiare anche RC in questa maniera
Codice: Seleziona tutto
RIni = [H2]   ' questa è la riga iniziale

RC = [H2] - 1   ' Azzeramento contatore per conteggio differenza righe



Ciao

P.s. a pensarci bene, si potrebbe eliminare una variabile... Vediamo se ci riesci da solo :)
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Esiste una formula excel per questo?

Postdi verdemont » 29/05/12 00:35

preferisco che la riga sia quella assoluta di excel per cui ho messo
Codice: Seleziona tutto
RIni = [H2]   ' questa è la riga iniziale


e poi
Codice: Seleziona tutto
For RR = [H2] To UR   'ciclo for next da H2 alla fine delle righe esistenti


Tuttavia ho riscontrato un errore. In pratica non rispetta il range solo sul primo gruppo da esaminare.
Ad es. se gli do range 90 e gi dico di partire dalla riga 4 lui parte dalla riga 4 ma si ferma alla riga 91 analizzandomi 88 righe e non 90, poi dopo riparte ad analizzare range 90:

Immagine

Per la variabile da eliminare onestamente non ci arrivo, sarà l'ora tarda....domani ci penso a mente fresca :)
Grazie
Verdemont
verdemont
Utente Junior
 
Post: 40
Iscritto il: 26/05/12 08:16

Re: Esiste una formula excel per questo?

Postdi verdemont » 29/05/12 07:12

verdemont ha scritto:preferisco che la riga sia quella assoluta di excel per cui ho messo
Codice: Seleziona tutto
RIni = [H2]   ' questa è la riga iniziale


e poi
Codice: Seleziona tutto
For RR = [H2] To UR   'ciclo for next da H2 alla fine delle righe esistenti


Tuttavia ho riscontrato un errore. In pratica non rispetta il range solo sul primo gruppo da esaminare.
Ad es. se gli do range 90 e gi dico di partire dalla riga 4 lui parte dalla riga 4 ma si ferma alla riga 91 analizzandomi 88 righe e non 90, poi dopo riparte ad analizzare range 90:

Immagine

Per la variabile da eliminare onestamente non ci arrivo, sarà l'ora tarda....domani ci penso a mente fresca :)
Grazie
Verdemont


Flash scusami, ho scritto una stupidata, ignora quello che ho scritto ieri sera, funziona tutto!!!! :D era l'ora tarda.
Rimane solo il discorso della variabile da eliminare. Le variabili sono 4:

H2 'riga da cui far iniziare la ricerca
I2 'cosa cercare
J2 'numero presenze da cercare
K2 'range su cui effettuare la ricerca

Dal mio punto di vista sono tutte necessarie. Forse K2 potrebbe essere eliminata. Però così facendo, se gli dico di cercare J2, lui si fermerà fino a quando non avrà trovato J2. Il mio scopo è quello di fermarsi al range che gli do e di dirmi quante presenze J2 si sono verificate.
verdemont
Utente Junior
 
Post: 40
Iscritto il: 26/05/12 08:16

Re: Esiste una formula excel per questo?

Postdi Flash30005 » 29/05/12 12:08

Quelli elencati da te sono dati
La variabile superflua è "RIni" che non è altro uguale a RC+1 pertanto
Codice: Seleziona tutto
Sub ContaEv5()
'  Parte 1 - assegnazioni valori e azzeramento contatori
UR = Range("G" & Rows.Count).End(xlUp).Row   'conta le righe con dati nella colonna A
Range("L2:N10000").ClearContents  ' pulisce le colonne C. D e E a senza eliminare la testata in riga 1
LE = Range("I2").Value  '<<<<< il dato da ricercare
NE = Range("J2").Value '<<<< Numero presenze da cercare
MaxC = Range("K2").Value  '<<<< In "J2" ho inserito la variabile max intervallo
Conta = 0  ' il contatore delle presenze
RRp = 2   ' riga dove scriverà i dati
RC = [H2] - 1   ' Azzeramento contatore per conteggio differenza righe
'<<<<<<<<<<  fine parte 1
For RR = [H2] To UR   'ciclo for next da 1 alla fine delle righe esistenti
    If Range("G" & RR).Value = LE Then Conta = Conta + 1  'condizione: se valore in cella G riga RR = al valore ricercato LE il contatore Conta aumenta di 1
    If RR - RC = MaxC Then Range("L" & RRp).Value = Conta  'Se la differenza riga attuale - RC = MaxC allora scrive in colonna C riga RRp il valore di Conta
    If Conta = NE Then Range("L" & RRp).Value = RR - RC ' condizione: se conta = NE scrive in colonna C riga RRp il valore della differenza riga attuale e RC
    If Conta = NE Or RR - RC = MaxC Then 'in tutte e due le condizioni esegue il contenuto di questa If
    Range("M" & RRp).Value = RC + 1  'riga inizio range
    Range("N" & RRp).Value = RR   ' in E il valore della riga attuale
        Conta = 0  'azzera il contatore Conta
        RRp = RRp + 1  'aggiunge 1 alla variabile RRp per scrivere nella riga successiva
        RC = RR   ' RC assume il valore di RR
    End If  'Fine condizione
Next RR  ' va alla riga successiva
' qui il ciclo For next è finito
Range("L" & RRp).Value = Conta  ' scrive il residuo Conta
Range("M" & RRp).Value = RC + 1  ' Riga Iniziale
Range("N" & RRp).Value = RR - 1  'Riga finale è stato detratto 1 perché RR assume sempre un valore maggiore di quello stabilito alla fine del ciclo For Next
End Sub

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Esiste una formula excel per questo?

Postdi verdemont » 29/05/12 16:47

Grazie Flash, non ci sarei arrivato.
Ho imparato molto da questa discussione e vorrei iniziare ad avvicinarmi a questo tipo di programmazione.

Hai qualche sito o documento da potermi consigliare su cui iniziare a studiare? Ovviamente devo incominciare dalle basi ;)

Ciao
Verdemont
verdemont
Utente Junior
 
Post: 40
Iscritto il: 26/05/12 08:16

Re: Esiste una formula excel per questo?

Postdi Flash30005 » 29/05/12 16:56

Come sito questo ;)

L'Help in linea di excel è un ottimo "documento" per capire funzioni, codici, formule

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Esiste una formula excel per questo?":


Chi c’è in linea

Visitano il forum: Nessuno e 61 ospiti