Operazioni intervalli variabili
Hai un problema con Excel? 
Operazioni in intervalli varia
di Mario (utente non iscritto) data: 13/02/2009
Sono nuovo del gruppo e vorrei che qualcuno mi aiutasse a strutturare una soluzione al seguente mio problema.
nelle colonne a e b ho una sequenza di valori costituiti da due soli
numeri 0 e 1. nelle due colonne ogni cella con valore 1 deve avere
come celle contigue, in alto e in basso, solo valori pari a 0. la
sequenza di celle consecutive con valore 0 va da uno a enne, con enne
variabile, ma limitato.
i valori delle due colonne sono uguali per riga. in altri termini, se
in a1 ho il valore 0, allora anche in b1 ho il valore 0, se in a2=1
allora anche in b2=1.
ci sono delle eccezioni per le quali, alcune volte, se nella cella
della colonna a compare 1 (per lo 0 non accade) allora nella stessa
riga della colonna b non compare 1, ma 0.
nella colonna b si vengono a formare degli intervalli variabili. la
lunghezza di questi intervalli è individuata meglio tramite l’esempio del file di excel allegato dal nome lilla.
1° intervallo: b6:b28, non prosegue fino a b39 perché nonostante che in a39 ci sia nella cella 1 tale valore 1 non compare in b39.
2° intervallo: b61:b94, non prosegue fino a b105 perché nonostante che in a105 ci sia nella cella 1 tale valore 1 non compare in b105.
3° intervallo: b116:b127, ecc.
ho bisogno di calcolare nella colonna c, per i singoli intervalli cosi
individuati nella colonna b, la somma delle celle in cui compare il
valore 1.
nell’esempio la soluzione dovrà mostrare
c28=3
c94=4
c127=2 ecc.
grazie per l’attenzione
mario
di Ricky53 data: 14/02/2009
Ciao,
puoi dare delle condizioni più chiare per capire come applicare un algoritmo alla sequenza di valori.
ossia come si fa a sapere quando smettere di sommare gli "1".
ciao da ricky53
di Mario (utente non iscritto) data: 14/02/2009
Ciao ricky53,
la condizione si verifica quando non appare 1 nella colonna b, mentre appare 1 nella stessa riga nella colonna a.
il mancato evento, registrato dall'assenza di 1 nella colonna b quando 1 è presente nella stessa riga nella colonna a, interrompe la lunghezza dell'intervallo nella colonna b.
nel caso dell'esempio inserito nel file, la lunghezza del primo intervallo si forma con questa logica:
a6=1 allora mi chiedo se anche in b6=1. se il quesito ha una risposta positiva allora è l'inizio della lunghezza del primo intervallo.
proseguo a cercare nella colonna a la successiva cella in cui ho 1.
è la a17. mi chiedo se anche nella cella b17 ho 1. la risposta è positiva. la lunghezza del mio intervallo cresce. ora è diventato b6:b17.
proseguo a ricercare la successiva cella nella colonna a in cui ho 1 e la trova nella cella a18, immediatamente attigua alla cella a17.
questo caso è una particolarità per la quale non applico il test di cui prima. la lunghezza del mio intervallo è ora b6:b18.
proseguo nella ricerca nella colonna a della successiva cella in cui ho il valore1. È al cella b28. applico il test per verificare se la cella nella stessa riga della colonna b ha valore 1. risposta affermativa perché b28=1. la lunghezza dell'intervallo è ora b6:b28.
il passo successivo mi porta a trovare un altro singolarità come sopra definita. non applico il test e l'intervallo e ora b6:b29.
proseguo e trovo che il successivo 1 nella colonna a è nella cella b39.
applico il test e questa volta non trovo 1 nella cella b39. questo evento mi comporta l'interruzione dell'intervallo e mi individua la sua lunghezza in cui dovrò fare un'operazione algebrica. l'intervallo finale diventa b6:b28.
in questo intervallo faccio l'operazione somma delle celle che mi da il valore 3. questo valore lo metto nella cella c28.
con questa logica riprendo ad individuare l'inizio del successivo intervallo.
salto i test i a39 e a50 perchè in b39 e b50 non ho il valore 1.
il nuovo intervallo si forma a partire dalla riga 61 in quanto sia in a61 che in b61 trovo il valore di 1.
spero di avere rappresentato la logica sottostante al problema.
grazie in ogni caso della tua attenzione.
ciao
mario
di Ricky53 data: 15/02/2009
Ciao,
forse ho capito.
adesso viene il bello tradurre in codice quanto da te descritto.
fammi pensare a qualcosa.
ci risentiamo.
ciao da ricky53
di Mario (utente non iscritto) data: 19/02/2009
Ciao ricky
nel frattempo ho preparato questo codice che dà una soluzione al mio problema.
la soluzione l’ho trovata portando ogni sequenza 11 che compare nella colonna a a 10.
mario
Sub Cerca()
Dim cont, n, valore as Integer
Range("C:C").ClearContents
cont = 0
For n = 4 To 4766
Valore = Cells(n, 1)
If Valore = 1 Then
If Cells(n, 2) = 1 Then
cont = cont + 1
Else
Cells(n, 3) = cont
cont = 0
End If
End If
Next
End Sub
|
Vuoi Approfondire?