Numerazione progressiva



  • Numerazione progressiva
    di Anonino (utente non iscritto) data: 15/11/2014 12:53:12

    Ciao a tutti,
    non sono pratico di vba e vi chiedo se gentilmente potete aiutarmi: Devo compilare un foglio excel rispondendo Si o No da B2 in giu', quindi B3 B4 ect e ho la necessita di avere una numerazione progressiva in base nelle celle C2 C3 C4 ect, in base alla risposta Si quindi 1 2 3 ect e no -1 -2 -3 ect..... Chi puo' aiutarmi gentilmente?
    Grazie e saluti.



  • di Mister_x (utente non iscritto) data: 15/11/2014 13:29:22

    ciao

    in questo caso possiamo utilizzare due colonne di appoggio per fare questo lavoro
    vedi file che ti ho postato e in colonna C iniziando da C2 mettiamo la formula seguente

    C2=SE(B2="Si";MATR.SOMMA.PRODOTTO((B$2:B2=B2)*(H$2:H2));MATR.SOMMA.PRODOTTO((B$2:B2=B2)*(I$2:I2)))

    se hai problemi ad applicare tale risultato posta un tuo file che lo sistemiamo

    ciao
     
    Si	1
    Si	2
    No	-1
    Si	3
    No	-2
    No	-3
    Si	4
    No	-4
    No	-5
    Si	5
    Si	6
    Si	7
    No	-6
    Si	8
    No	-7
    No	-8
    Si	9
    





  • Numerazione progressiva
    di Anonino (utente non iscritto) data: 15/11/2014 13:52:57

    Ciao Mister X
    grazie per la pronta risposta: quello che hai fatto va bene, ma mi sono dimenticato di dire, che quando cambia risposta la numerazione deve ripartire non continuare, ti faccio un esempio

    Si 1
    Si 2
    No -1
    Si 1
    No -1
    No -2
    Si 1
    No -1
    No -2
    Si 1
    Si 2
    Si 3
    No -1
    Si 1
    No -1
    No -2
    Si 1

    Poi se posso chiederti di farlo con un codice in vba perche il file che sto creando ha altre funzioni che devo integrare. Fammi sapere.
    Grazie e saluti.



  • di Mister_x (utente non iscritto) data: 15/11/2014 14:42:21

    ciao

    quindi la sub da inserire nel foglio pressapoco e la seguente

    Si ---- 1
    Si ---- 2
    No ---- -1
    Si ---- 1
    No ---- -1
    No ---- -2
    Si ---- 1
    No ---- -1
    No ---- -2
    Si ---- 1
    Si ---- 2
    Si ---- 3
    No ---- -1
    Si ---- 1
    No ---- -1
    No ---- -2
    Si ---- 1

    ciao
     
    Option Explicit
    Sub Valuta_Si_No()
    Dim Si, No As Long
    Dim i As Long
    For i = 2 To Cells(Rows.Count, "B").End(xlUp).Row
      If Cells(i, "B") = "Si" Then
      Si = Si + 1
        Cells(i, "C") = Si
        No = 0
      Else
        No = No - 1
      Cells(i, "C") = No
        Si = 0
      End If
    Next i
    End Sub





  • Numerazione progressiva
    di Anonino (utente non iscritto) data: 15/11/2014 14:54:36

    Ciao Mister X,
    si funziona e realizza quello di cui ho bisogno: riusciresti anche a far in modo che non devo eseguire la Macro per avere i risultati ma quando premo invio dopo aver digitato Si o no in automatico mi da il risultato?
    Grazie e saluti.


  • Numerazione progressiva
    di Anonino (utente non iscritto) data: 15/11/2014 15:01:04

    Ciao Mister X,
    sono riuscito a farlo da solo......... che soddisfazione..........

    Potresti gentilmente dirmi come posso aggiungere magari anche di farlo per la colonna D e risultati in E?

    Grazie e saluti
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Si, No As Long
    Dim i As Long
    For i = 2 To Cells(Rows.Count, "B").End(xlUp).Row
      If Cells(i, "B") = "Si" Then
      Si = Si + 1
        Cells(i, "C") = Si
        No = 0
      Else
        No = No - 1
      Cells(i, "C") = No
        Si = 0
      End If
    Next i
    End Sub



  • di Mister_x (utente non iscritto) data: 15/11/2014 17:23:00

    riciao

    modifica alla tua sub() postata

    ciao
     
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Si, No As Long
    Dim i As Long
    Dim Colonna As Long
    On Error Resume Next
    If Intersect(Target, Range("B2:B1000,D2:D1000")) Is Nothing Then Exit Sub
    Colonna = Target.Column
    For i = 2 To Cells(Rows.Count, Colonna).End(xlUp).Row
      If UCase(Cells(i, Colonna)) = "SI" Then
        Si = Si + 1
        Cells(i, Colonna + 1) = Si
        No = 0
      Else
        No = No - 1
      Cells(i, Colonna + 1) = No
        Si = 0
      End If
    Next i
    End Sub
    





  • Numerazione progressiva
    di Anonino (utente non iscritto) data: 15/11/2014 18:19:11

    Ciao Mister X,
    ovviamnete funziona, ora pero lo devo sviluppare ancora. Magari ti disturbo ancora se non ti scoccia.
    Grazie ancora e saluti.


  • Numerazione progressiva
    di Anonino (utente non iscritto) data: 16/11/2014 11:02:54

    Ciao Mister X,
    ho inserito il tuo codice in un altro e funziona: pero mi serve che il tuo codice non vale solo "B2:B1000,D2:D1000" ma per tutte le colonne che si chiamano che hanno come prima cella la condizione "pippo".
    Riesci a fare questa modifica.
    Grazie e saluti.
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim rArea As Range
    Dim Cella As Range
    Dim uArea As Long
    Dim nCol As Long
    
    nCol = Target.Column
    
    If Me.Cells(1, nCol).Value = "pippo" Then 'CONDIZIONE
        
        uArea = Me.Cells(Rows.Count, nCol).End(xlUp).Row
        Set rArea = Me.Range(Me.Cells(2, nCol), Me.Cells(uArea, nCol))
        
        For Each Cella In rArea
            Select Case Cella
                
            Case ""
                Cella.Interior.ColorIndex = xlNone 'bianco/vuoto
            Case "Si"
                Cella.Interior.ColorIndex = 4 'verde
            Case "No"
                Cella.Interior.ColorIndex = 3 'rosso
            
            End Select
        Next
    End If
    
    Set rArea = Nothing
    
    Dim Si, No As Long
    Dim i As Long
    Dim Colonna As Long
    On Error Resume Next
    If Intersect(Target, Range("B2:B1000,D2:D1000")) Is Nothing Then Exit Sub
    Colonna = Target.Column
    For i = 2 To Cells(Rows.Count, Colonna).End(xlUp).Row
      If UCase(Cells(i, Colonna)) = "SI" Then
        Si = Si + 1
        Cells(i, Colonna + 1) = Si
        No = 0
      Else
        No = No - 1
      Cells(i, Colonna + 1) = No
        Si = 0
      End If
    Next i
    
    End Sub



  • di Mister_x (utente non iscritto) data: 16/11/2014 11:46:43

    ciao

    a questo punto sarebbe molto utile avere un tuo file con valori impostati a mano di come deve essere il risultato,
    con annessi i vari problemi, cosi' possiamo valutare la cosa effettivamente su un tuo foglio
    in attesa del file,PS non servono tantissime righe solo una cinquantina per i riscontri di valore

    ciao





  • Numerazione progressiva
    di Anonino (utente non iscritto) data: 16/11/2014 11:58:25

    Ciao Mister X
    ti allego il file: ora come gia' richiesto ho la necessita di legare il tuo codice non a "B2:B1000,F2:F1000,J2:J1000" ma a tutte le celle che si chiameranno "pippo" come la prima parte del codice. Un altra cosa se non ti scoccia puoi far in modo che la numerazione possa partire da un valore gia stabilito e non sempre e solo da 1 o -1, mi spiego, quando cambia da Si a No o da No a Si, va bene 1 2 3 o -1 -2 -3, ma se metto ad esempio 90 - 90 farli continuare con 91 92 93 ect o -91 -92 -93 ect
    Grazie e saluti.



  • di Mister_x (utente non iscritto) data: 16/11/2014 17:06:23

    ciao

    prova vedere se e' questo che intendi fare
    PS attenzione che ora controlla solo 3 celle ma basta che aggiungi quelle che ti interessano in riga1
    riallego il tuo file con la sub modificata

    ciao
     
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Si, No As Long
    Dim i As Long
    Dim Colonna, Partenza As Long
    On Error Resume Next
    If Intersect(Target, Range("B1,F1,J1")) Is Nothing Then Exit Sub
    If UCase(Target) <> "PIPPO" Then Exit Sub
    Colonna = Target.Column
    Partenza = 0
    Partenza = InputBox(prompt:="Inserire Un valore Numerico positivo da 0 a XXX", Title:="Valore di Partenza")
    Si = Partenza
    No = Partenza - (Partenza * 2)
    For i = 2 To Cells(Rows.Count, Colonna).End(xlUp).Row
      If UCase(Cells(i, Colonna)) = "SI" Then
        Cells(i, Colonna + 1) = Si
        Si = Si + 1
        No = Partenza - (Partenza * 2)
      Else
        Cells(i, Colonna + 1) = No
        No = No - 1
        Si = Partenza
      End If
    Next i
    End Sub





  • Numerazione progressiva
    di Anonino (utente non iscritto) data: 16/11/2014 17:15:56

    Ciao Mister X,
    cosi non funziona: non riesci solo a modificare il codice che ti ho postato collegandolo alla condizione "pippo"?
    Grazie e saluti.



  • di Mister_x (utente non iscritto) data: 16/11/2014 17:54:28

    ciao

    riallego la sub e il file modificato

    ciao
     
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Si, No As Long
    Dim i As Long
    Dim Colonna, Partenza As Long
    On Error Resume Next
    If Intersect(Target, Range("B2:B1000,F2:F1000:J2:J1000")) Is Nothing Then Exit Sub
    
    Colonna = Target.Column
    If UCase(Cells(1, Colonna)) <> "PIPPO" Then Exit Sub
    Partenza = 0
    Partenza = InputBox(prompt:="Inserire Un valore Numerico positivo da 0 a XXX", Title:="Valore di Partenza")
    Si = Partenza
    No = Partenza - (Partenza * 2)
    Range(Cells(2, Colonna + 1), Cells(1000, Colonna + 1)).ClearContents
    For i = 2 To Cells(Rows.Count, Colonna).End(xlUp).Row
      If UCase(Cells(i, Colonna)) = "SI" Then
        Cells(i, Colonna + 1) = Si
        Cells(i, Colonna).Interior.ColorIndex = 4 'verde
        Si = Si + 1
        No = Partenza - (Partenza * 2)
      ElseIf UCase(Cells(i, Colonna)) = "NO" Then
        Cells(i, Colonna + 1) = No
        Cells(i, Colonna).Interior.ColorIndex = 3 'rosso
        No = No - 1
        Si = Partenza
      Else
        Cells(i, Colonna).Interior.ColorIndex = xlNone
      End If
    Next i
    End Sub
     





  • Numerazione progressiva
    di Anonino (utente non iscritto) data: 16/11/2014 18:00:18

    Ciao Mister X,
    continua a non funzionare.
    Grazie e saluti.



  • di Mister_x (utente non iscritto) data: 16/11/2014 18:36:39

    ciao

    arrivati a questo punto non so cosa vuoi ottenere
    la tua sub() che tu metti fa questo lavoro in qualsiasi colonna di target tu scriva
    = colora le celle di verde se trova "SI" Rosso "NO" e neutro se trova altro, Giusto???
    ma questi lo esegue in qualsiasi colonna tu vai a fare un cambiamento in qualsiasi cella iniziando da colonna A a colonna xxxxxx
    nel tuo esempio la colonna interessata era solamente quella dove tu modifichi da riga2 a riga1000 colonne B,F,J, giusto??
    la mia sub fa questo
    2 cosa chiedi di inserire un valore di partenza , con inputbox() questo e' stato possibile
    la sub lo fa
    3 elabora solamente se nella colonna di target interessata trova "Pippo", se metti "pluto" o "paperino" qualsiasi si o no in quella colonna non verra' ricalcolata lasciando i valori calcolati in precedenza
    questo e quello che ho inteso dal tuo file esposto in quanto non mi sembra logico far lavorare la sub() su colonne non interessate, vedi la tua che prima fa una verifica ai colori e poi fa il ricalcolo di essa se e quella nel tuo caso la B,F,J
    quindi stando al tuo file impostato manualmente per capire il funzionamento la sub() fa il lavoro uguale di come lo ai presentato.

    se proprio non e' cosi prova a spiegarti meglio partendo dal tuo file e cosa veramente vuoi ottenere a questo punto
    PS tratta la cosa come se stessi proponendo a scuola un problema di matematica dove vi sono dei dati fissi dei dati variabili e il risultato come deve essere

    ciao