Operazioni intervalli variabili



  • 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