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

Excel macro modifica se

Ultimo Aggiornamento: 22/05/2017 12:36
Post: 193
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
21/05/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
[Modificato da satos 21/05/2017 15:30]
Post: 1.334
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
21/05/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

[Modificato da dodo47 21/05/2017 18:01]
Domenico
Win 10 - Excel 2016
Post: 193
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
21/05/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
Post: 1.336
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
21/05/2017 18:01

ciao
rileggi il post

Domenico
Win 10 - Excel 2016
Post: 194
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
21/05/2017 18:04

Adesso ho visto il tuo file
faccio delle verifiche e poi ti faccio sapere
Ciao
Post: 195
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
21/05/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.
Post: 1.337
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
21/05/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?




Domenico
Win 10 - Excel 2016
Post: 196
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
21/05/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
Post: 1.338
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
21/05/2017 18:34

si ma non mi hai risposto....e comunque resta errato l'8 e non è quella la soluzione...che c'entra?



[Modificato da dodo47 21/05/2017 18:36]
Domenico
Win 10 - Excel 2016
Post: 197
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
21/05/2017 18:48

Probabilmente ho fatto un po' di confusione.......capita !!!
Post: 198
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
21/05/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.

[Modificato da satos 21/05/2017 18:59]
Post: 199
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
21/05/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]
[Modificato da satos 21/05/2017 19:44]
Post: 1.339
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
22/05/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
[Modificato da dodo47 22/05/2017 09:08]
Domenico
Win 10 - Excel 2016
Post: 200
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
22/05/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




[Modificato da satos 22/05/2017 11:29]
Post: 1.341
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
22/05/2017 11:48

Ciao
controlla...se non va getto la spugna.

saluti

Edit: la macro è parecchio pasticciata e sarebbe il caso di rivederla completamente.
[Modificato da dodo47 22/05/2017 12:27]
Domenico
Win 10 - Excel 2016
Post: 201
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
22/05/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
[Modificato da satos 22/05/2017 12:09]
Post: 1.342
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
22/05/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

[Modificato da dodo47 22/05/2017 12:26]
Domenico
Win 10 - Excel 2016
Post: 202
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
22/05/2017 12:36

Ok
Comunque come sempre grazie di tutto
[SM=x423025] [SM=x423025] [SM=x423025] [SM=x423025] [SM=x423025]
Vota: 15MediaObject5,00718 7
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]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 03:11. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com