decifrare serie in colonna



  • decifrare serie in colonna
    di chris (utente non iscritto) data: 03/03/2015 15:44:21

    Salve a tutti,

    sono un utilizzatore di excel, che finora è riuscito a trovare soluzioni ai problemi che mi si ponevano senza ricorrere a macro.

    Ora ho però un problema che non riesco a risolvere. Magari qualcuno di voi mi può dare un'idea o un colpo di mano.

    Vorrei analizzare e decifrare una colonna che ha una serie lunga di zero e uno, tipo la seguente:

    1
    0
    0
    1
    0
    1
    1
    1
    0
    1
    ecc

    Alla fine mi piacerebbe avere come risultato una tabella che mi dica come si alternano gli zero e gli uno, tipo così

    1=1
    0=2
    1=1
    0=1
    1=3
    0=1
    1=1
    ecc

    o più semplicemente 1 2 1 1 3 1 1, sapendo che la serie inizia con 1.

    Grazie per un aiuto.



  • di Vecchio Frac data: 03/03/2015 18:36:56

    Io non so farlo con le formule.
    Ma il codice proposto può diventare una funzione da inserire nel foglio e richiamabile in cella facendola precedere dal segno di uguale.
    Analizza la sequenza in colonna A (la prima cella è di intestazione) e posta il risultato in cella C2 (in C1 c'è un'intestazione di "risultato"). Tutto molto personalizzabile :o)
     
    Option Explicit
    
    Sub find_sequences()
    Dim regex As Object, item As Object, items As Object
    Dim my_range As Range, compact_range As Variant
    
        Set my_range = Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
        compact_range = Join(WorksheetFunction.Transpose(my_range), "")
       
        Range("C2").ClearContents
    
        Set regex = CreateObject("VBScript.Regexp")
        
        With regex
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = "0+|1+"
        End With
    
        If regex.Test(compact_range) Then
            For Each item In regex.Execute(compact_range)
                Cells(2, "C") = Cells(2, "C") & " " & Len(item)
            Next
        End If
        
        Set regex = Nothing
    End Sub






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

    Grazie mille per l'indicazione che proverò domani. Ti farò sapere



  • di chris (utente non iscritto) data: 04/03/2015 07:32:39

    Scusa, Vecchio Frac, ma ti devo disturbare nuovamente. Ti ringrazio per il codice che funziona egregiamente.

    Stamattina ho provato a modificare il codice in modo che il risultato sia in sequenza nella colonna C (nel senso che il primo dato di analisi sia in C1 il secondo in C2 e così via) ma mi rendo conto che non sono in grado, date le mie scarse conoscenze di programmazione.

    Come si potrebbe procedere?

    Grazie ancora e buona giornata



  • di Vecchio Frac data: 04/03/2015 10:06:24

    Vedi le modifiche, ora cella per cella in colonna C ti scrive la sequenza richiesta.
    Avevo capito che ti bastava la sequenza in un'unica cella.
     
    Option Explicit
    
    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
    
        Set my_range = Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
        compact_range = Join(WorksheetFunction.Transpose(my_range), "")
       
        Range("C: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       '<<< imposto un contatore di riga
        
        If regex.Test(compact_range) Then
            For Each item In regex.Execute(compact_range)
                Cells(j, "C") = Cells(j, "C") & " " & Len(item)     '<<< celle in sequenza di colonna C
                j = j + 1   '<<< aumento il contatore alla prossima riga libera
            Next
        End If
        
        Set regex = Nothing
    End Sub






  • di chris (utente non iscritto) data: 04/03/2015 11:43:11

    Grazie mille, Vecchio Frac, per l'aiuto

    Buona continuazione e cordiali saluti!



  • di Vecchio Frac data: 04/03/2015 13:11:00

    Se pensi che la discussione è chiusa positivamente, ti invito a segnare come risolta la discussione.
    Grazie.





  • di chris (utente non iscritto) data: 05/03/2015 08:19:48

    Certo, grazie. Mi sembrava di aver spuntato già ieri



  • di Vecchio Frac data: 05/03/2015 10:41:53

    cit. "Se pensi che la discussione è chiusa"
    ---> Mamma mia che brutta cosa. E nessuno me lo fa notare? :(
    ---> "Se pensi che la discussione SIA chiusa"




  • OT
    di Mauro data: 05/03/2015 14:01:53

    Non ti preoccupare è solo un po' di "congiuntivite".