Excel macro modifica se

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
satos
00domenica 21 maggio 2017 01:04
Ciao, chiedo sempre che sia possibile una modifica a questa macro fatta da dodo,per adattarla ad una ricerca quasi simile.

In pratica in questa abbiamo un foglio denominato "Inserimento" dove dalla cella A2:A300 andiamo ad inserire i numeri sortiti.
poi abbiamo un foglio denominato "Grafica e frequenza" dove nelle celle A2:A300 vengono riportati i numeri del foglio inserimento, nelle celle B2:B37 sono riportati i numeri fissi della roulette, C2:C37 le frequenze dei rispettivi numeri e nelle celle F2:F37 vorrei che venisse riportato il ritardo attuale e nelle celle G2:G37 ritardo storico.

Faccio un esempio: il numero 17 ha un ritardo attuale pari a 6 colpi mentre quello max storico è di 9 colpi. Quindi nella cella F18 riporterà il ritardo attuale pari a 6 mentre nella cella G18 il ritardo storico pari a 9.Per il conteggio si parte dall'ultimo numero in basso.
Ecco la macro fatta da dodo:

Option Explicit

Private Sub Worksheet_Activate()
Dim mRng As Range, Cel As Range, c As Object
Dim firstaddress As String, k As Byte
Dim mNum As Integer, ur As Long, ritS As Long, rPre As Long
Range("E2:F31,L2:M31,S2:T31").ClearContents
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Set mRng = Range("A2:A31,H2:H31,O2:O31")

ur = Sheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row
k = 0
For Each Cel In mRng
mNum = Cel.Value
With Worksheets("Foglio1").Range("B2:V" & ur)
Set c = .Find(mNum, LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
firstaddress = c.Address
Do
If k = 0 Then
Cells(Cel.Row, Cel.Column + 4) = c.Row - 2
k = 1
ritS = c.Row - 2
rPre = c.Row
Else
If c.Row - rPre > ritS Then
ritS = c.Row - rPre
End If
rPre = c.Row
End If
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstaddress
Cells(Cel.Row, Cel.Column + 5) = ritS
End If

End With
k = 0
ritS = 0
rPre = 0
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
MsgBox "Fine elaborazione"
End Sub

Sub esi()
Application.EnableEvents = True

End Sub

Allego anche il file in excel
dodo47
10domenica 21 maggio 2017 16:48
Ciao
mi dici come fai a calcolare nel tuo esempio:

" il numero 17 ha un ritardo attuale pari a 6 colpi mentre quello max storico è di 9 colpi. Quindi nella cella F18 riporterà il ritardo attuale pari a 6 mentre nella cella G18 il ritardo storico pari a 9.Per il conteggio si parte dall'ultimo numero in basso." ????

saluti

Edit: credo di aver capito.

Comunque fare qualche tentativo da parte tua non guasterebbe ogni tanto.

Prima però:

1) devi correggere la formattazione della colonna A del tuo foglio: "Grafica e frequenza", in quanto se esce lo zero, (oltre a non vedersi) viene ignorato e il find fallisce. Quindi fai formattazione generale.

2) per evitare di vedere le celle vuote riportate dalla col. A di "Inserimento", in A2 di "Grafica e frequenza" ci metti:

=SE(Inserimento!A2="";"";Inserimento!A2)

La sub è legata ad un pulsante. Se vuoi attivarla invece alla selezione del foglio, sai come si fa...

Fai i tuoi test.

saluti

satos
00domenica 21 maggio 2017 18:00
Ciao Domenico, allora come puoi vedere nel file allegato se vai nel foglio "inserimento" da A2:a300 numeri sortiti della roulette.
tieni presente che quelli più in basso sono gli ultimi sortiti quindi la statistica deve considerare conteggiare partendo dal basso verso l'alto.
Se tu vedi il foglio inserimento e conteggi dal basso verso l'alto vedrai che il 17 ha un ritardo attuale pari a 17. per trovare lo storico vuol dire trovare il max ritardo di quel numero "17" in tutti i numeri che al momento sono sortiti.
Come puoi vedere il 17 ha un'altra presenza salendo dal basso verso l'alto troviamo ancora il 17 questa volta con ritardo 9.
In pratica il ritardo attuale si trova contando i colpi di assenza dall'ultima volta che è sortito, mentre lo storico si trova verificando tutte le volte che è sortito il 17 ed andando a riportare il valore maggiore nella cella.
Spero di essere stato chiaro.
Comunque come sempre grazie
dodo47
10domenica 21 maggio 2017 18:01
ciao
rileggi il post

satos
00domenica 21 maggio 2017 18:04
Adesso ho visto il tuo file
faccio delle verifiche e poi ti faccio sapere
Ciao
satos
00domenica 21 maggio 2017 18:20
In merito al file che hai allegato ci sono degli errori di conteggio:
il 17 ha due presenze conteggiando dal basso verso l'alto la prima presenza la troviamo dopo 7 colpi è questo è il ritardo attuale mentre quello storico lo troviamo contando da A19 dopo 9 colpi quest'ultimo è il ritardo storico in quanto non abbiamo altri nr 17 presenti nell'archivio.
Per quanto riguarda il nr 8 in archivio è sortito 2 volte: La prima volta contando sempre dal basso verso l'alto, dopo 6 "Rit Att."
L'1 ha ritardo 25 no 24.
dodo47
10domenica 21 maggio 2017 18:24
Re:
satos, 21/05/2017 01.04:

....
Faccio un esempio: il numero 17 ha un ritardo attuale pari a 6 colpi mentre quello max storico è di 9 colpi. Quindi nella cella F18 riporterà il ritardo attuale pari a 6 mentre nella cella G18 il ritardo storico pari a 9.Per il conteggio si parte dall'ultimo numero in basso.



perché prima dici una cosa e poi un'altra?




satos
00domenica 21 maggio 2017 18:29
Ho modificato mettendo -0 in questa riga. Adesso sembra andare bene.
ur = Range("A:A").Find("", LookIn:=xlValues, lookat:=xlWhole).Row - 0
dodo47
10domenica 21 maggio 2017 18:34
si ma non mi hai risposto....e comunque resta errato l'8 e non è quella la soluzione...che c'entra?



satos
00domenica 21 maggio 2017 18:48
Probabilmente ho fatto un po' di confusione.......capita !!!
satos
00domenica 21 maggio 2017 18:58
Comunque il problema è che quando mi da il ritardo attuale es. 10 e poi va a trovare il ritardo storico se è maggiore di 10 lo riporta in maniera corretta se invece è minore di 10 mi riporta sia il ritardo attuale che storico a 10. Invece dovrebbe riportare quello attuale 10 e se quello sortito precedentemente "Storico" e 8 deve scrivere ritardo 8.
Questo allora mi fa capire che il ritardo attuale a superato lo storico.

satos
00domenica 21 maggio 2017 19:21
Naturalmente potrebbero esserci nell'archivio anche 3 o più numeri ripetuti quindi come storico deve riportare quello che ha dato il ritardo maggiore.
es. abbiamo 3 presenze del numero 15
Rit attuale è 18
quello precedente è 3
quello ancora prima è 1
Resoconto:
Ritardo attuale 18
Ritardo max storico 3
sto Cercando di essere più chiaro possibile.
[SM=x423023] [SM=x423023] [SM=x423023] [SM=x423023]
dodo47
10lunedì 22 maggio 2017 09:08
Satos non è chiaro.

compila i ritardi dei 4 numeri evidenziati nell'allegato e per ognuno mi dici come lo calcoli e specificando la cella di partenza.

saluti
satos
00lunedì 22 maggio 2017 09:57
Ciao domenico, Grazie ancora per la tua pazienza.....!!!!
Rispondo alle tue domande:
Intanto ti dico che i numeri inseriti dall'alto partono dalla cella A2, io ho inserito il 36, ma questo non cambia in merito alla delucidazione che cerca di darti in merito alla tua richiesta.


nr8 parto a contare dal basso dalla cella A28 alla cella 23 verso l'alto Rit. Attuale "6".......poi dalla cella A21 e mi fermo riscontranto un ritardo, riparto da A19 fino all'inizio archivio riscontrando un ritardo di 18 quest'ultimo è lo storico perché più alto-------------------------------------------------------------

Nr.17 Parto dalla cella A28 e mi fermo alla cella A22 Rit. Att 7---
Altra sortita del 17, Riparto a contare da A20 e mi fermo A12 trovando un ritardo di 9, Riparto da cella A10 e conto fino alla cella A8, quindi altro ritardo pari a 3, infine conto da A6 all'inizio dell'archivio A2 ultimo ritardo pari a 5. Quindi il ritardo sto è 9.

Il 36 in cella A28 è presente quindi rit Att 0, parto dalla cella A27 e conto fino all'inizio archivio riscontrando un ritardo di 25 non avendo altri ripetizioni lo storico è di 25.

Il nr. 3 Parto a contare dalla cella A28 e mi fermo a26 quindi rit att 3--------in A24 ritrovo il nr 3 quindi rit 0----Riparto a contare da A23 e mi fermo alla cella A18 riscontrando un ritardo pari a 6 riparto dalla cella A16 e fino all'inizio conto 15 di ritardo quindi in questo caso il ritardo storico è 15.-

Eccoti il mio compito.......Bocciato....Spero di no
Scherzo




dodo47
10lunedì 22 maggio 2017 11:48
Ciao
controlla...se non va getto la spugna.

saluti

Edit: la macro è parecchio pasticciata e sarebbe il caso di rivederla completamente.
satos
00lunedì 22 maggio 2017 12:08
Perfetto, non avevo dubbi sulla tua bravura da prof.
Solo un piccolo difetto e cioè quando vado a schiacciare sul bottone per la statistica mi azzera le celle F1 e G1 dove io scrivo come riferimento Rit att in F1 e rit sto in g1
Ti Allego il file
dodo47
00lunedì 22 maggio 2017 12:24
...mbè almeno quello fallo tu satos, altrimenti non impari mai. Hai tutti gli elementi, ur1 è l'ultima riga quindi cancellerai le due colonne a partire da F2 a....

saluti

satos
10lunedì 22 maggio 2017 12:36
Ok
Comunque come sempre grazie di tutto
[SM=x423025] [SM=x423025] [SM=x423025] [SM=x423025] [SM=x423025]
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 13:17.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com