| | 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
|
|
| | 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 | |
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
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 | |
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 | |
|
|
|