decifrare serie in colonna evoluzione



  • decifrare serie in colonna: evoluzione
    di chris (utente non iscritto) data: 06/03/2015 08:16:56

    Buongiorno a tutti, ritorno al forum e in particolare da Vecchio Frac, considerato che la volta scorsa ho dialogato con te, per un evoluzione della discussione sul decifrare serie di 0 e 1 in colonna.

    Ieri ho lavorato con il database che mi sta occupando in questo momento e con il codice che mi hai consigliato. L'ho modificato leggermente, visto che ho un'intestazione, alla mia maniera per iniziare la lettura da A2 e la compilazione della sequenza da C2, vedi sotto (magari esiste un modo più elegante).

    Ora ho però un'altra esigenza che non riesco a sviluppare. Ho provato a modificare il codice per arrivare a "fermare" il contatore ad una linea precisa (p.es. 5) con For i = ... To ... Step ... ma non sono riuscito.

    Posso ancora chiedere il tuo aiuto?

    Grazie mille e buona giornata.
     
    Sub find_sequences()
    Dim regex As Object, item As Object, items As Object
    Dim my_range As Range, compact_range As Variant, j As Long, h As Long
    
        Set my_range = Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
        compact_range = Join(WorksheetFunction.Transpose(my_range), "")
       
        Range("C2:C").ClearContents
    
        Set regex = CreateObject("VBScript.Regexp")
        
        With regex
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = "0+|1+"
        End With
    
        j = Range("C" & Rows.Count).End(xlUp).Row
        
        h = j + 1
        
        If regex.Test(compact_range) Then
            For Each item In regex.Execute(compact_range)
                Cells(h, "C") = Cells(h, "C") & " " & Len(item)
                h = h + 1
            Next
        End If
        
        Set regex = Nothing
    End Sub
    



  • di Vecchio Frac data: 06/03/2015 13:44:09

    Se vuoi fermare l'elaborazione dopo un certo numero di conteggi, tienine conto separatamente ad ogni passaggio. Cioè "h" usala non al posto di "j" ma come contatore dei singoli passaggi, arrivato a 5 ti fermi.
    Se vuoi fermare l'elaborazione ad una riga specifica, per come è costruita adesso è più difficile realizzarla perchè in pratica ho spostato tutta la colonna in memoria e non mi riferisco più alle singole celle.





  • di chris (utente non iscritto) data: 06/03/2015 16:07:19

    Grazie, Vecchio Frac, per la risposta.

    Mi rendo conto che con le mie scarse conoscenze di programmazione riesco solo ad intuire come dovrei modificare il tuo codice per far stoppare la conta alla linea che desidero oppure, se ho capito bene, crearne uno nuovo che si riferisca alle singole celle. Per me è troppo complicato. Adeguerò la costruzione del mio file excel al tuo codice. Ed è perfetto così

    Ancora grazie e buon weekend a tutti.



  • di Vecchio Frac data: 06/03/2015 18:27:55

    Ma sei riuscito a fare la modifica come la vuoi tu? cioè che si fermi dopo cinque conteggi?
    O volevi che si fermasse alla quinta riga? --> e allora bisogna capire qual è questa quinta riga.





  • di chris (utente non iscritto) data: 06/03/2015 21:21:08

    ....se non è troppo complicato, a me interessa che in una colonna con zero e uno in serie possa decidere a che linea stoppare il conteggio. P.es. se la serie è composta da 1200 termini (elencati in una colonna) nel codice dovrebbe esserci una variabile che posso modificare in questo senso, stoppando il conteggio p.es. dopo 850 termini. Ho riprovato dopo le tue indicazioni ma non riesco a capire fino in fondo che parte del codice fa cosa, in modo da implementare questa modifica. Comunque anche la versione che mi hai proposto va già bene. Sto proprio facendo delle prove sul pc di casa...



  • di Vecchio Frac data: 06/03/2015 21:37:46

    Non lo so se ho capito bene, ma il codice aggiustato si ferma dopo aver proposto 850 sequenze.
    Naturalmente puoi variare tu questo limite: troverai facilmente il numero 850 nel codice.
     
    Sub find_sequences()
    Dim regex As Object, item As Object, items As Object
    Dim my_range As Range, compact_range As Variant, j As Long, h As Long
    
        Set my_range = Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
        compact_range = Join(WorksheetFunction.Transpose(my_range), "")
       
        Range("C2:C").ClearContents
    
        Set regex = CreateObject("VBScript.Regexp")
        
        With regex
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = "0+|1+"
        End With
    
        j = Range("C" & Rows.Count).End(xlUp).Row
        h = 0
            
        If regex.Test(compact_range) Then
            For Each item In regex.Execute(compact_range)
                Cells(j, "C") = Cells(j, "C") & " " & Len(item)
                j= j + 1
                h = h + 1
                If h >= 850 Then Exit For
            Next
        End If
        
        Set regex = Nothing
    End Sub