Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Sorteggio casuale con più condizioni

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Sorteggio casuale con più condizioni

Postdi Statix » 26/05/11 16:36

Ciao a tutti,
stò preparando delle schede a quiz,
ma ho alcuni problemi,
trattandosi di diverse materie, una per ogni foglio,
in totale sono circa 5000 domande,
dovrei estrarre 100 domande casuali ma a percentuali di materia,
per avere qualche problema in meno ho messo tutto su un unico foglio,
ordinate per materie da
1 a 1400 Italiano
1401 a 2600 civica
2601 a 3500 storia
3501 a 4100 geo
4101 a 4400 inglese
4401 a 5000 scienze
quindi il record delle domande vanno da A1:A5000 ,
con un generatore casuale mi dovrebbe dare 100 record ,
di questi 100 dovrebbe prenderne
25 di italiano
25 di civica
15 di storia
15 di geo
10 di scienze
10 di inglese
i 100 record vanno in un foglio nuovo da A1 a A100 che poi con un cerca verticale gli affianco le domande con le relative risposte multiple.
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Sponsor
 

Re: Sorteggio casuale con più condizioni

Postdi Avatar3 » 26/05/11 18:53

Prova questa macro (lascio la prima riga per la testata)
Codice: Seleziona tutto
Sub Casuale()
Range("A2:A101").ClearContents
Ita = 0
Civ = 0
Sto = 0
Geo = 0
Eng = 0
Sci = 0
ContaN = 0

IT = 25
CI = 25
St = 15
Ge = 15
En = 10
Sc = 10
Riprova:
If ContaN >= 100 Then Exit Sub
For RR = 2 To 101

NC = Int(Rnd() * 5000) + 1
If Range("A" & RR).Value = NC Then GoTo Riprova
Next RR

Select Case NC
Case 1 To 1400
Ita = Ita + 1
If Ita > IT Then GoTo Riprova
Case 1401 To 2600
Civ = Civ + 1
If Civ > CI Then GoTo Riprova
Case 2601 To 3500
Sto = Sto + 1
If Sto > St Then GoTo Riprova
Case 3501 To 4100
Geo = Geo + 1
If Geo > Ge Then GoTo Riprova
Case 4101 To 4400
Eng = Eng + 1
If Eng > En Then GoTo Riprova
Case 4401 To 5000
Sci = Sci + 1
If Sci > Sc Then GoTo Riprova
End Select
ContaN = ContaN + 1
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = NC
GoTo Riprova
End Sub
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Sorteggio casuale con più condizioni

Postdi Statix » 26/05/11 23:44

Ciao Avatar,
tutto ok, ho avuto solo qualche piccolo problema,
se alla fine della macro aggiungo una Call,quando la faccio partire la macro funziona perfettamente,
ma non mi richiama la Call, nel frattempo ho risolto con un altro tasto,
un altra variante che ho aggiunto ,i parametri dei valori sostituito con celle in modo che se voglio modificare non devo andare a toccare la macro,ed infine non sono riuscito a modificare l'output dei dati casuali,
la macro li mette in A2,provato a modificare qualcosa ,riesco solo a cambiare colonna,
se puoi spiegarmi come fare per modificare l'output invece che in A2 esempio in C5,
ti ringrazio per il tempo che finora mi hai dedicato.
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Sorteggio casuale con più condizioni

Postdi Avatar3 » 26/05/11 23:58

E' chiaro che se chiedi colonna A punto a realizzare il risultato in colonna A
comunque
questa modifica dovrebbe assolvere alla nuova esigenza
Codice: Seleziona tutto
Sub CasualeC5()
Range("C5:C104").ClearContents
Ita = 0
Civ = 0
Sto = 0
Geo = 0
Eng = 0
Sci = 0
ContaN = 0

IT = 25
CI = 25
St = 15
Ge = 15
En = 10
Sc = 10
Riprova:
If ContaN >= 100 Then Exit Sub
For RR = 5 To 104

NC = Int(Rnd() * 5000) + 1
If Range("C" & RR).Value = NC Then GoTo Riprova
Next RR

Select Case NC
Case 1 To 1400
Ita = Ita + 1
If Ita > IT Then GoTo Riprova
Case 1401 To 2600
Civ = Civ + 1
If Civ > CI Then GoTo Riprova
Case 2601 To 3500
Sto = Sto + 1
If Sto > St Then GoTo Riprova
Case 3501 To 4100
Geo = Geo + 1
If Geo > Ge Then GoTo Riprova
Case 4101 To 4400
Eng = Eng + 1
If Eng > En Then GoTo Riprova
Case 4401 To 5000
Sci = Sci + 1
If Sci > Sc Then GoTo Riprova
End Select
ContaN = ContaN + 1
If ContaN = 1 Then
    Range("C5").Value = NC
Else
    Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).Value = NC
End If
GoTo Riprova
End Sub

Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Sorteggio casuale con più condizioni

Postdi Statix » 27/05/11 07:31

Ciao Avatar3,
ho visto la modifica che hai apportato alla macro,
adesso con le opportune modifiche posso mettere i dati casuali dove voglio,
però una cosa che non mi hai spiegato è il perche della Call che aggiungo in fondo alla macro
non viene richiamata.
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Sorteggio casuale con più condizioni

Postdi Avatar3 » 27/05/11 09:31

La Call inserita prima dell'End Sub non funziona perché c'è la condizione di uscita dalla macro con questa riga
Codice: Seleziona tutto
If ContaN >= 100 Then Exit Sub

che puoi modificare così
Codice: Seleziona tutto
If ContaN >= 100 Then
Call Tuamacro
Exit Sub
end if

oppure
Codice: Seleziona tutto
If ContaN >= 100 Then goto esci

aggiungendo alla fine della macro l'etichetta
Codice: Seleziona tutto
GoTo Riprova  '<<< esistente
esci:  '<<<< aggiungere
Call TuaMacro  '<<< aggiungere
End Sub  '<<<< esistente
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Sorteggio casuale con più condizioni

Postdi Statix » 27/05/11 09:42

Ciao Avatar3,
tutto ok ,ho usato la prima variante.
grazie
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Sorteggio casuale con più condizioni

Postdi Statix » 05/06/11 17:10

Ciao Avatar3,
ho un problema con la macro del sorteggio casuale a condizoni,
mio figlio mi ha fatto presente che molte volte i record escono doppioni,
quindi su 100 domande una 10ina sono ripetute.
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Sorteggio casuale con più condizioni

Postdi Avatar3 » 05/06/11 19:16

Non metto in dubbio che, se hai trovato dei doppioni, un motivo ci sarà
ma non credo dipenda dalla macro :D
Invia il file con quel tipo di errore e macro all'interno
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Sorteggio casuale con più condizioni

Postdi Statix » 05/06/11 19:35

Ciao Avatar3,
credo che non ci sia bisogno dell'invio di un file,
per provare basta prendere un foglio nuovo ,lanciare la macro che genera i 100 record casuali e con la formula
Moda ,vedrai che ci sono doppioni ,quindi senza aver toccato la macro inviatomi.
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Sorteggio casuale con più condizioni

Postdi Avatar3 » 05/06/11 20:22

Non so cosa intendi con l'utilizzo di formula Moda ottieni i doppioni
Ti invio l'ultima macro dove volevi i dati a partire da C5
Codice: Seleziona tutto
Sub CasualeC5()
Range("C5:C104").ClearContents
Ita = 0
Civ = 0
Sto = 0
Geo = 0
Eng = 0
Sci = 0
ContaN = 0

IT = 25
CI = 25
St = 15
Ge = 15
En = 10
Sc = 10
Riprova:
If ContaN >= 100 Then Exit Sub
For RR = 5 To 104

NC = Int(Rnd() * 5000) + 1
If Range("C" & RR).Value = NC Then GoTo Riprova
Next RR

Select Case NC
Case 1 To 1400
Ita = Ita + 1
If Ita > IT Then GoTo Riprova
Case 1401 To 2600
Civ = Civ + 1
If Civ > CI Then GoTo Riprova
Case 2601 To 3500
Sto = Sto + 1
If Sto > St Then GoTo Riprova
Case 3501 To 4100
Geo = Geo + 1
If Geo > Ge Then GoTo Riprova
Case 4101 To 4400
Eng = Eng + 1
If Eng > En Then GoTo Riprova
Case 4401 To 5000
Sci = Sci + 1
If Sci > Sc Then GoTo Riprova
End Select
ContaN = ContaN + 1
If ContaN = 1 Then
    Range("C5").Value = NC
Else
    Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).Value = NC
End If
GoTo Riprova
End Sub

Avviala
metti in ordine crescente e ti troverai
25 numeri entro il primo Range
25 numeri entro il secondo Range
15 entro il terzo range
15 entro il quartorange
10 entro il quinto
10 entro il sesto range
per un totale di 100 numeri
Tutti senza ripetizione
Se non è così invia un'immagine del test da me proposto
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Sorteggio casuale con più condizioni

Postdi Statix » 05/06/11 20:28

OK Avatar3,
ho ripetuto il test ho fatto tutto come mi hai chiesto, l'errore c'è sempre ci sono valori doppioni,
ripeto basta che prendi un foglio nuovo lanci la macro ordini i dati e vedrai tu stesso i numeri doppi.
riprova a lanciare la macro un paio di volte.

Immagine
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Sorteggio casuale con più condizioni

Postdi Avatar3 » 05/06/11 20:53

Mi fai una prova spostando una riga di codice fuori dal for... next?
come indicato in questo codice
Codice: Seleziona tutto
If ContaN >= 100 Then Exit Sub

NC = Int(Rnd() * 5000) + 1  '<<<< inseriscila qui
For RR = 5 To 104
'NC = Int(Rnd() * 5000) + 1  '<<<< cancella o commenta
If Range("C" & RR).Value = NC Then GoTo Riprova
Next RR
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Sorteggio casuale con più condizioni

Postdi Statix » 05/06/11 21:33

OK adesso è perfetta,
fatto anche la verifica delle percentuali,
coincide perfettamente.
ok ,rinnovo i ringraziamenti.
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Sorteggio casuale con più condizioni

Postdi Avatar3 » 05/06/11 21:34

:)
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Sorteggio casuale con più condizioni

Postdi Statix » 06/06/11 10:42

Ciao Avatar3,
scusa se ti disturbo ancora,
volevo chiederti se era possibile ,modificare ulteriormente la macro,
in modo che, ad ogni lancio della macro i record di prima vengono esclusi,
perchè capita che frequentemente alcuni record ricompaiono,
la macro dovrebbe fare in modo di riproporre tutte le combinazioni senza ripetizioni,
sarebbe il massimo,così uno può studiare l'intero archivio di 100 in 100.
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Sorteggio casuale con più condizioni

Postdi Avatar3 » 06/06/11 10:55

Non sarebbe un grosso problema tranne quello di dover utilizzare altre colonne per memorizzare le precedenti "estrazioni" magari su un altro foglio
A questo punto però dobbiamo dare un termine alla quantità di estrazioni da effettuare perché se pensi di ottenere 50 diverse estrazioni (50*100=5000) si rischia di aumentare i tempi man mano che diminuiscono i numeri rimanenti
perché il programma entra in loop fino a trovare in modo casuale magari l'ultimo numero ancora non uscito.
E' necessario determinare, non so, 5 o 10 estrazioni diverse per poi resettare tutto.
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Sorteggio casuale con più condizioni

Postdi Statix » 06/06/11 11:02

Ok,fai quello che ritieni più opportuno,
per me va bene lo stesso.
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Sorteggio casuale con più condizioni

Postdi Avatar3 » 06/06/11 12:02

Prova questa macro
considera i fogli "Foglio1" e "Foglio2"
nel Foglio1 in C1 inserisci il numero di estrazioni che vuoi fare esempio 5 o 10
poi avvia la macro
Codice: Seleziona tutto
Sub CasualeC5()
Sheets("Foglio2").Cells.Clear
Worksheets("Foglio1").Select
IT = 25
CI = 25
St = 15
Ge = 15
En = 10
Sc = 10
For Ciclo = 1 To Worksheets("Foglio1").Range("C1").Value

Worksheets("Foglio1").Range("C5:C104").ClearContents
ContaN = 0
Ita = 0
Civ = 0
Sto = 0
Geo = 0
Eng = 0
Sci = 0
Riprova:
NC = Int(Rnd() * 5000) + 1
If ContaN >= 100 Then GoTo SaltaCiclo

For RR = 5 To 104
If Worksheets("Foglio1").Range("C" & RR).Value = NC Then GoTo Riprova
Next RR

UC = Worksheets("Foglio2").Range("IV5").End(xlToLeft).Column
For CC = 1 To UC
    UR = Worksheets("Foglio2").Cells(Rows.Count, CC).End(xlUp).Row
    For RR = 5 To UR
        If Worksheets("Foglio2").Cells(RR, CC).Value = NC Then GoTo Riprova
    Next RR
Next CC

Select Case NC
Case 1 To 1400
Ita = Ita + 1
If Ita > IT Then GoTo Riprova
Case 1401 To 2600
Civ = Civ + 1
If Civ > CI Then GoTo Riprova
Case 2601 To 3500
Sto = Sto + 1
If Sto > St Then GoTo Riprova
Case 3501 To 4100
Geo = Geo + 1
If Geo > Ge Then GoTo Riprova
Case 4101 To 4400
Eng = Eng + 1
If Eng > En Then GoTo Riprova
Case 4401 To 5000
Sci = Sci + 1
If Sci > Sc Then GoTo Riprova
End Select
ContaN = ContaN + 1
If ContaN = 1 Then
    Worksheets("Foglio1").Range("C5").Value = NC
Else
    Worksheets("Foglio1").Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).Value = NC
End If
GoTo Riprova
SaltaCiclo:

  Range("C4").Select
    Range("C5:C104").Sort Key1:=Range("C5"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
Sheets("Foglio1").Range("C5:C104").Copy Destination:=Sheets("Foglio2").Cells(5, Ciclo)
Next Ciclo

End Sub
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Sorteggio casuale con più condizioni

Postdi Statix » 06/06/11 12:50

Ciao,
ho provato la macro,
ho visto che genera tot colonne quanto il valore in C1,
l'unica cosa che non andava bene è l'ordinamento dei record,
nel senso che le percentuali dei record devono essere mischiati,
ho eliminato questa parte di codice ,e controllato a modo mio con un conta.se,
infatti non ci sono record ripetuti


Codice: Seleziona tutto
Range("C4").Select
    Range("C5:C104").Sort Key1:=Range("C5"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal


ho dovuto fare qualche modifica nel mio foglio per il richiamo della colonna dei record.
adesso sembra tutto ok.
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Sorteggio casuale con più condizioni":


Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti