Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Excel 2007 forse macro

Ultimo Aggiornamento: 13/05/2017 11:40
Post: 175
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
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]

Post: 1.273
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
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
Post: 175
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
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]
Post: 1.277
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
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
Post: 3.188
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
11/05/2017 10:03

Volevo segnalare che il link al file non funziona (né quello di Satos né quello di Domenico).

Alfredo
Post: 176
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
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]
Post: 1.279
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
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
Post: 177
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
11/05/2017 18:48

Ciao dodo47,cosa dirti........Grazieeee [SM=x423025] [SM=x423025]
Perfetto
Post: 178
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
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


Post: 1.288
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
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
Post: 179
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
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.


Post: 1.289
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
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
Post: 180
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
12/05/2017 15:06

Ok dodo47
adesso ci siamo
Grazie infinite e scusa se non sono stato molto chiaro
Post: 181
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
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]
Post: 1.300
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
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
Post: 1.301
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
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
Post: 182
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
13/05/2017 11:40

Ok Grazie [SM=x423025] [SM=x423025] [SM=x423025]
Vota: 15MediaObject5,00417 4
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Excel 2007 macro (20 messaggi, agg.: 18/05/2017 10:51)
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 12:21. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com