È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!

Excel Forum Per condividere esperienze su Microsoft Excel

Excel 2007 forse macro

  • Messaggi
  • OFFLINE
    satos
    Post: 175
    Registrato il: 29/04/2002
    Utente Junior
    2007
    00 10/05/2017 11:31
    Ciao, chiedo un aiuto per realizzare una macro per la roulette, che possa fare quanto segue:
    Nel foglio inserimento celle A2:A300 inserisco i numeri che vengono dati dalla roulette mentre nel foglio "spia generale" dopo aver schiacciato il bottone dovrebbe riportare le frequenze o così chiamate sortiti dopo numero spia.
    Faccio un'esempio in base hai numeri presenti nel folgio Inserimento: i numeri inseriti sono 1-2-33-36-14-8-9-7-9 in base a questi numeri sortiti, l'analisi dovrebbe essere così" Riporto un solo esempio: dopo la sortita del nr1 quali sono i 5 numeri sortiti dopo l'1 ? e li vado a riportare come frequenza nel foglio " Spia generale" come da esempio.
    Grazie mille [SM=x423023] [SM=x423023] [SM=x423023]

  • OFFLINE
    dodo47
    Post: 1.273
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    10 10/05/2017 18:33
    Ciao
    con una formula non ci sono riuscito...ci vogliono quelli bravi..

    Premesso che di gioco non ne so nulla, non ho capito una cosa: se tu metti in col.A tutte le estrazioni una dopo l'altra è facile che un numero esca più volte, poniamo il numero 24; ciò detto che ne so quale 24 andare a cercare per poi riportare i successivi 5 nel foglio "Spia" ?

    Non so se sono stato chiaro.

    Comunque il seguente codice (si può far di meglio) analizza i dati del tuo prospetto (sempre che ho capito).

    saluti

    Sub Next5()
    Dim ws1 As Worksheet, Rng As Range, c As Object
    Set ws1 = Worksheets("Inserimento")
    Worksheets("Spia Generale").Select
    For r = 2 To 37
        n = Cells(r, 1)
        With ws1.Range("A:A")
            Set c = .Find(n, LookIn:=xlValues, lookat:=xlWhole)
            If Not c Is Nothing Then
                r1 = c.Row + 1
                For i = 1 To 5
                    n1 = .Cells(r1, 1)
                    Set Rng = Range("1:1").Find(n1, LookIn:=xlValues, lookat:=xlWhole)
                    Cells(r, Rng.Column) = 1
                    r1 = r1 + 1
                Next i
            End If
        End With
    Next r
    End Sub




    [Modificato da dodo47 10/05/2017 18:35]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    satos
    Post: 175
    Registrato il: 29/04/2002
    Utente Junior
    2007
    00 10/05/2017 23:50
    ciao dodo47,ho provato ma non funziona
    non si avvia la macro
    forse sbaglio qualcosa ?
    [Modificato da satos 11/05/2017 14:56]
  • OFFLINE
    dodo47
    Post: 1.277
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    10 11/05/2017 09:35
    Re:
    satos, 10/05/2017 23.50:

    ciao dado47,ho provato ma non funziona
    non si avvia la macro Che significa?
    forse sbaglio qualcosa ?



    funziona...funziona...se parte la macro e naturalmente per quello che ho capito.

    saluti


    [Modificato da dodo47 11/05/2017 09:37]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    alfrimpa
    Post: 3.188
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 11/05/2017 10:03
    Volevo segnalare che il link al file non funziona (né quello di Satos né quello di Domenico).

    Alfredo
  • OFFLINE
    satos
    Post: 176
    Registrato il: 29/04/2002
    Utente Junior
    2007
    00 11/05/2017 11:18
    ciao dodo47,Intanto grazie del tuo intervento.
    Adesso la macro funziona, ma con qualche errore, cerco di spiegarmi:

    Ovviamente ti allego anche il file.
    1)nella colonna al2:al7 vengono fuori dei numeri sulle celle che non centrano.
    Per quanto riguarda il resto sembra funzionare, ma c'è una cosa da sistemare.
    Come puoi vedere dopo la sortita dell'1 va a scrivere i successivi 5 numeri e fin quà tutto ok.
    Però se io inserisco una ripetizione nell'arco dei successivi 5 sortite
    es. dopo l'1 i successivi 5 numeri sono 2-3-4-5-6 riportando nelle celle 1 come presenza ok. Se inserisco un altro numero che si ripete es. 6 nella cella mi riporta sempre 1 presenza invece di 2 in quanto deve conteggiare indipendentemente delle ripetizioni le ultime 5 sortite.
    Spero di essere riuscito a farti capire.
    Ciao e grazie ancora
    [Modificato da satos 11/05/2017 14:56]
  • OFFLINE
    dodo47
    Post: 1.279
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    10 11/05/2017 16:55
    Ciao
    gli "1" in col. AL li avevo corretti con il file che ti ho precedentemente inviato, evidentemente hai usato la macro postata.

    Comunque, non so se ho capito, prova:

    Sub Next5()
    Dim ws1 As Worksheet, Rng As Range, c As Object
    Set ws1 = Worksheets("Inserimento")
    Worksheets("Spia Generale").Select
    'NOTA: qui cancello i risultati precedenti. Se non lo deve fare commenta la seguente riga:
    
    Worksheets("Spia Generale").Range("B2:AK37").ClearContents
    
    For r = 2 To 37
        n = Cells(r, 1)
        With ws1.Range("A:A")
            Set c = .Find(n, LookIn:=xlValues, lookat:=xlWhole)
            If Not c Is Nothing Then
                r1 = c.Row + 1
                For i = 1 To 5
                    n1 = .Cells(r1, 1)
                    If n1 <> "" Then
                        Set Rng = Range("1:1").Find(n1, LookIn:=xlValues, lookat:=xlWhole)
                        Cells(r, Rng.Column) = Cells(r, Rng.Column) + 1
                        r1 = r1 + 1
                    End If
                Next i
            End If
        End With
    Next r
    End Sub


    Saluti

    [Modificato da dodo47 11/05/2017 16:56]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    satos
    Post: 177
    Registrato il: 29/04/2002
    Utente Junior
    2007
    00 11/05/2017 18:48
    Ciao dodo47,cosa dirti........Grazieeee [SM=x423025] [SM=x423025]
    Perfetto
  • OFFLINE
    satos
    Post: 178
    Registrato il: 29/04/2002
    Utente Junior
    2007
    00 12/05/2017 10:50
    Ciao dodo, purtroppo ho riscontrato un errore, ti allego il file da dove si intuisce che dopo la sortita "per la seconda volta del nr 1" non ha conteggiato bene. Infatti non ha tenuto conto i numeri sortiti, che dovevano essere sommati al primo caso della sortita dell'1. come puoi vedere la prima volta che è sortito l'1 i successivi 5 numeri erano 7-18-1-9-9 infatti dava frequenza 1-1-1-2. La seconda volta che è sortito l'1 i successivi 5 numeri erano 9-9-36-35 ovviamente non è presente il 5 numero perché non inserito. Il risultato finale doveva essere: Dopo la sortita dell'1
    il 7 una frequenza
    il 18 una frequenza
    il 01 una frequenza
    il 9 quattro frequenze
    il 35 una frequenza
    il 36 una frequenza


  • OFFLINE
    dodo47
    Post: 1.288
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 12/05/2017 12:56
    Re:
    Non a caso ti avevo chiesto:

    dodo47, 10/05/2017 18.33:


    Premesso che di gioco non ne so nulla, non ho capito una cosa: se tu metti in col.A tutte le estrazioni una dopo l'altra è facile che un numero esca più volte, poniamo il numero 24; ciò detto che ne so quale 24 andare a cercare per poi riportare i successivi 5 nel foglio "Spia" ?



    ma non avendo avuto una risposta ....

    vedrò se posso fare qualcosa
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    satos
    Post: 179
    Registrato il: 29/04/2002
    Utente Junior
    2007
    00 12/05/2017 13:14
    Premesso che di gioco non ne so nulla, non ho capito una cosa: se tu metti in col.A tutte le estrazioni una dopo l'altra è facile che un numero esca più volte, poniamo il numero 24; ciò detto che ne so quale 24 andare a cercare per poi riportare i successivi 5 nel foglio "Spia" ?

    Ciao, si metto in colonna a una dopo l'altra.
    Ogni numero indipendentemente dalla sua ripetizione va a considerare sempre i successivi 5 numeri sortiti ed aggiorna le presenze.


  • OFFLINE
    dodo47
    Post: 1.289
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    10 12/05/2017 13:43
    Ciao
    mbè potevi rispondermi così si evitava di perdere tempo..

    saluti

    prova:
    Sub Next5()
    Dim ws1 As Worksheet, Rng As Range, c As Object
    Set ws1 = Worksheets("Inserimento")
    Worksheets("Spia Generale").Select
    'NOTA: qui cancello i risultati precedenti. Se non lo deve fare commenta la seguente riga:
     
    Worksheets("Spia Generale").Range("B2:AK37").ClearContents
     
    For r = 2 To 37
        n = Cells(r, 1)
        With ws1.Range("A:A")
            Set c = .Find(n, LookIn:=xlValues, lookat:=xlWhole)
            If Not c Is Nothing Then
                firstAddress = c.Address
                Do
                r1 = c.Row + 1
                For i = 1 To 5
                    n1 = .Cells(r1, 1)
                    If n1 <> "" Then
                        lcol = Application.WorksheetFunction.Match(n1, Range("1:1"), 0)
                        Cells(r, lcol) = Cells(r, lcol) + 1
                        r1 = r1 + 1
                    End If
                Next i
                Set c = .FindNext(c)
                Loop While Not c Is Nothing And c.Address <> firstAddress 'And c.Value = n
            End If
        End With
    Next r
    End Sub


    Dovresti dimensionare le variabili che non sono state dimensionate ed aggiungere una gestione di errori



    [Modificato da dodo47 12/05/2017 13:43]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    satos
    Post: 180
    Registrato il: 29/04/2002
    Utente Junior
    2007
    00 12/05/2017 15:06
    Ok dodo47
    adesso ci siamo
    Grazie infinite e scusa se non sono stato molto chiaro
  • OFFLINE
    satos
    Post: 181
    Registrato il: 29/04/2002
    Utente Junior
    2007
    00 12/05/2017 16:07
    ciao dodo, scusami ancora
    adesso la ricerca sul foglio inserimento parte da a1.
    se invece volessi farla partire da A2.
    Quale rigo devo modificare nella tua macro?
    [Modificato da satos 12/05/2017 16:08]
  • OFFLINE
    dodo47
    Post: 1.300
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 13/05/2017 11:09
    la ricerca considera tutta la colonna A di inserimento...tu che vuoi?



    [Modificato da dodo47 13/05/2017 11:12]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    dodo47
    Post: 1.301
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 13/05/2017 11:16
    comunque l'istruzione interessata è:

    With ws1.Range("A:A")

    Ma non basta fare:

    With ws1.Range("A2:A" & Rows.Count)

    devi pure variare:

    n1 = .Cells(r1, 1)
    con
    n1 = ws1.Cells(r1, 1)

    Provo una sintetica spiegazione:
    se ws1 = A:A
    la riga .row, per esempio 4, corrisponde alla riga 4 di ws1.

    se ws1=A2:Axx
    la riga di .row), per esempio 4, corrisponde alla riga 5 di ws1.
    questo perhè il . (punto) si riferisce al range A2:Axx, quindi A2 in effetti diventa riga 1 del range.
    ecco perché devi mettere n1 = ws1.Cells(r1, 1)

    è un po' raffazzonata la spiegazione, ma....

    saluti


    [Modificato da dodo47 13/05/2017 11:38]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    satos
    Post: 182
    Registrato il: 29/04/2002
    Utente Junior
    2007
    00 13/05/2017 11:40
    Ok Grazie [SM=x423025] [SM=x423025] [SM=x423025]
  • 15MediaObject5,00417 4