Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel] Mescolare celle in modo random

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

[Excel] Mescolare celle in modo random

Postdi FRIARIEL » 02/09/06 15:47

Ciao a tutti,
premetto che ho scarsa conoscenza di excel. Il problema che nn so risolvere è il seguente:
ho una tabella in cui la prima cella contiene sempre una domanda (testo). Le risposte(testo) sono elencate nelle 4 celle successive (quindi sia la domanda che le risposte si trovano sulla stessa riga). La prima cella relativa alle risposte contiene sempre quella corretta.
es.

domanda risp1 risp2 risp3 risp4
domanda risp1 risp2 risp3 risp4
domanda risp1 risp2 risp3 risp4
etc......

Visto che sapere che la risp. corretta è sempre contenuta nella seconda cella (cioè risp1), mi sarebbe utile mischiare in modo randomizzato le celle relative alle risposte, in modo tale da non conoscere in anticipo la collocazione di quella giusta!!!
Come si può risolvere questo problema in excel? :?: :(
grazie in anticipo x l'aiuto
ciao ;)
FRIARIEL
Newbie
 
Post: 3
Iscritto il: 02/09/06 15:30

Sponsor
 

Postdi Anthony47 » 03/09/06 01:29

Ciao e benvenuto nel forum.
Puoi mischiare le risposte con la seguente macro:

Codice: Seleziona tutto
Sub Mischia()

ColRisp = "B:E"       '<<<< Modificare a piacere
Dest_WS = "Questions" '<<<<

NumRisp = Range(ColRisp).Columns.Count
Sorg_WS = Range("A1").Worksheet.Name
If Sorg_WS = Dest_WS Then
MsgBox ("Foglio di Origine E' UGUALE a quello di Copia; errore")
Exit Sub
End If
'
'Azzera foglio Destinazione
Sheets(Dest_WS).Select
Cells.Select
Selection.Clear
'Copia i dati su altro foglio
Sheets(Sorg_WS).Select
Cells.Select
Selection.Copy
Sheets(Dest_WS).Select
Range("A1").Select
ActiveSheet.Paste
Range("A1").Offset(0, NumRisp).Range(ColRisp).Select
Selection.Clear
Range("A1").Select
'
URiga = Range("A65356").End(xlUp).Row
Randomize
For OVert = 0 To URiga
For OHor = 1 To NumRisp
Riprova:
WOFF = Int(Rnd * NumRisp + NumRisp + 1)
Range("A1").Offset(OVert, OHor).Copy
Range("A1").Offset(OVert, WOFF).Select
If ActiveCell.Value <> "" Then GoTo Riprova:    'Riprova se cella gia' occupata
ActiveSheet.Paste
Next OHor
Next OVert
'Cancella le risposte originali
Columns(ColRisp).Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Range("A1").Select
MsgBox ("Completato; cancellare se necessario foglio di origine")

End Sub


Apri il VBA editor (tramite <Alt>F11); guarda se nel frame di Progetto (la finestrella a sx) c' e' gia' una cartelletta "Moduli" (sotto il nome del tuo file e dei suoi Fogli); se c' e' gia' (cioe' hai gia' delle macro), apri Modulo1 e incollaci il codice che ti ho passato; se non c' e', allora fai Menu ->Inserisci ->Modulo che ti crea Modulo1 vuoto e poi incolla come sopra.
Eventualmente assegnagli un tasto di scelta rapida (es. <Contr><Maiusc>m) in modo da poterla avviare piu’ comodamente.

Particolarita’:
La macro e' compilata per mischiare 4 risposte; se sono in numero diverso, cambia la prima istruzione (ColRisp = "B:E").
La macro copia i dati di partenza in un foglio di nome Questions che deve essere gia’ presente, e che viene cancellato prima di essere usato; se si vuole usare un nome diverso, cambia la seconda istruzione (Dest_WS =). Raccomando di non usare nomi comuni quali Foglio2.

Uso:
Selezionare il foglio di origine delle domande e delle risposte; lanciare la macro.

Spero che ti vada bene, facci sapere.

Ciao,
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Mischiare risposte

Postdi By Sal » 03/09/06 06:01

Ciao a tutti, vorrei inserire anche io una risposta alternativa, questo codice le mischia sul posto, quindi è bene farsi una copia delle risposte originali.
Codice: Seleziona tutto
Sub Mischia2()
Dim risp(2 To 4), xn1, xn2, xn3
rr = Cells(1, 1).End(xlDown).Row
Randomize
For i = 2 To rr
    For n = 2 To 4
        risp(n) = Cells(i, n)
    Next n
    For n = 2 To 4
        nn = Int((3 * Rnd) + 2)
        If n = 2 Then
            xn1 = nn
            Cells(i, nn) = risp(n)
        End If
        If n = 3 Then
            xn2 = nn
            If xn1 = xn2 Then
                n = n - 1
            Else
                Cells(i, nn) = risp(n)
            End If
        End If
        If n = 4 Then
            xn3 = nn
            If xn3 = xn1 Or xn3 = xn2 Then
                n = n - 1
            Else
                Cells(i, nn) = risp(n)
            End If
        End If
    Next n
Next i
End Sub


Per inserirlo devi seguire i consigli di Antony47. Ciao :)
A rileggerci By Sal
Avatar utente
By Sal
Utente Junior
 
Post: 79
Iscritto il: 27/08/06 14:40

Mischiare risposte

Postdi By Sal » 03/09/06 06:31

Ciao a tutti, Scusate ho fatto un'errore, rileggendo il post mi sono accorto che le risposte sono Quattro la mia macro ne considera Tre, la correggo è la riposto Ciao :oops:
A rileggerci By Sal
Avatar utente
By Sal
Utente Junior
 
Post: 79
Iscritto il: 27/08/06 14:40

Mischiare risposte

Postdi By Sal » 03/09/06 08:22

Eccomi, questa è la macro che considera quattro risposte:
Codice: Seleziona tutto
Sub Mischia2()
Dim risp(2 To 5), xn1, xn2, xn3, xn4
rr = Cells(1, 1).End(xlDown).Row
Randomize
For i = 2 To rr
    For n = 2 To 5
        risp(n) = Cells(i, n)
    Next n
    For n = 2 To 5
        nn = Int((4 * Rnd) + 2)
        If n = 2 Then
            xn1 = nn
            Cells(i, nn) = risp(n)
        End If
        If n = 3 Then
            xn2 = nn
            If xn1 = xn2 Then
                n = n - 1
            Else
                Cells(i, nn) = risp(n)
            End If
        End If
        If n = 4 Then
            xn3 = nn
            If xn3 = xn1 Or xn3 = xn2 Then
                n = n - 1
            Else
                Cells(i, nn) = risp(n)
            End If
        End If
        If n = 5 Then
            xn4 = nn
            If xn4 = xn1 Or xn4 = xn2 Or xn4 = xn3 Then
                n = n - 1
            Else
                Cells(i, nn) = risp(n)
            End If
        End If
    Next n
Next i
End Sub

Se le risposte aumentano bisogna usare un'altro sistema per mischiare le risposte. Ciao :)
A rileggerci By Sal
Avatar utente
By Sal
Utente Junior
 
Post: 79
Iscritto il: 27/08/06 14:40

Postdi FRIARIEL » 03/09/06 09:54

:eeh:

siete semplicemente fantastici!!! proverò appena avrò un minimo di tempo. Grazie..... avevo letto altri commenti positivissimi su questo forum e non posso che confermare.... grazie x la piena e rapida disponibilità ciao a tutti :)
FRIARIEL
Newbie
 
Post: 3
Iscritto il: 02/09/06 15:30

Postdi FRIARIEL » 13/09/06 19:25

......purtroppo entrambi mi danno problemi. La prima routine, anche cambiando le celle di riferimento, mi crea il secondo foglio in modo identico a quello principale (tra le altre cose devo premere esc per interrompere il loop che si crea). La seconda soluzione funziona solo se elimino tutte le colonne e righe che non sono coinvolte nell'operazione. Purtroppo non so dove mettere le mani per cambiare i riferimenti!!! :cry:



grazie ancora
FRIARIEL
Newbie
 
Post: 3
Iscritto il: 02/09/06 15:30

Postdi Anthony47 » 13/09/06 21:09

Ciao friariel,
La prima routine, anche cambiando le celle di riferimento, mi crea il secondo foglio in modo identico a quello principale (tra le altre cose devo premere esc per interrompere il loop che si crea).


Probabilmente la prima routine e' la Sub Mischia() che ti suggerii io.
Riguardandola, direi che l' unico motivo per cui puo' andare in loop e' se genera sempre gli stessi numeri "casuali"; almeno con il modello che ho usato io che comprende:
Col A, la Domanda;
Col B:E, le risposte;

Il tuo foglio e' molto diverso? Puoi condividerne uno di prova? Cosa intendi per cambiare "le celle di riferimento"? Quando fermi il loop, nelle colonne F,G,H,I c' e' niente?

Ciao,
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Mischiare risposte

Postdi By Sal » 14/09/06 07:22

Ciao Friariel, la macro che ti ho proposto fa solo riferimento alle colonne, che come mi hai detto sono 4 risposte, le righe sono indipendenti, potrebbero anche essere mille, se mi dici dettagliatamente il problema cerchiamo di risolverlo, ciao :)
A rileggerci By Sal
Avatar utente
By Sal
Utente Junior
 
Post: 79
Iscritto il: 27/08/06 14:40

Re: [Excel] Mescolare celle in modo random

Postdi Rovic » 03/05/16 14:49

Salve, macro bellissima ed utilissima.

Vorrei chiedervi, se possibile, di aggiungere la funzione che mi permetta di inserire anche la risposta ad esempio.

__________________A___________________|___B___|__C__|__D__|__E___|__F__|
Di che colore è il cavallo bianco di napoleone|_Bianco_|_Nero|Verde_|azzurro|_ a__|

Dove nella colonna a c'è la domanda, nelle colonne da B a E ci sono le eventuali risposte, nella colonna F la lettera corrispondente alla risposta esatta.

Diciamo che io ho una serie di domande in excel formattate in questo modo e che sono tutte poste in modo tale che la a è la risposta esatta, si potrebbe creare una macro che oltre a mischiare le risposte (B,C,D,E) tenga traccia anche di quella esatta e riporti in F dove è stata spostata?

Esempio:
Normale->
__________________A___________________|___B___|__C__|__D__|__E___|__F__|
Di che colore è il cavallo bianco di napoleone|_Bianco_|_Nero|Verde_|azzurro|_ a__|


dopo la macro->
__________________A___________________|___B___|__C__|__D__|__E___|__F__|
Di che colore è il cavallo bianco di napoleone|_Verde__|Nero_|Bianco|azzurro|_d__|


applico nuovamente la macro->
__________________A___________________|___B___|__C__|__D__|__E___|__F__|
Di che colore è il cavallo bianco di napoleone|_Nero__|Azzurro|Verde|Bianco_|_ e__|


Grazie in anticipo =)
Rovic
Newbie
 
Post: 7
Iscritto il: 03/05/16 14:35

Re: [Excel] Mescolare celle in modo random

Postdi Rovic » 03/05/16 15:50

Volevo editare ma non riesco a capire come fare, comunque stavo pensando ad una possibile soluzione.

Utilizzando sempre questo codice,
Codice: Seleziona tutto
Sub Mischia()

ColRisp = "B:E"       '<<<< Modificare a piacere
Dest_WS = "Questions" '<<<<

NumRisp = Range(ColRisp).Columns.Count
Sorg_WS = Range("A1").Worksheet.Name
If Sorg_WS = Dest_WS Then
MsgBox ("Foglio di Origine E' UGUALE a quello di Copia; errore")
Exit Sub
End If
'
'Azzera foglio Destinazione
Sheets(Dest_WS).Select
Cells.Select
Selection.Clear
'Copia i dati su altro foglio
Sheets(Sorg_WS).Select
Cells.Select
Selection.Copy
Sheets(Dest_WS).Select
Range("A1").Select
ActiveSheet.Paste
Range("A1").Offset(0, NumRisp).Range(ColRisp).Select
Selection.Clear
Range("A1").Select
'
URiga = Range("A65356").End(xlUp).Row
Randomize
For OVert = 0 To URiga
For OHor = 1 To NumRisp
Riprova:
WOFF = Int(Rnd * NumRisp + NumRisp + 1)
Range("A1").Offset(OVert, OHor).Copy
Range("A1").Offset(OVert, WOFF).Select
If ActiveCell.Value <> "" Then GoTo Riprova:    'Riprova se cella gia' occupata
ActiveSheet.Paste
Next OHor
Next OVert
'Cancella le risposte originali
Columns(ColRisp).Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Range("A1").Select
MsgBox ("Completato; cancellare se necessario foglio di origine")

End Sub


si potrebbe aggiungere, prima che faccia la randomizzazione delle celle, una funzione che copi il contenuto della cella B (che contiene la risposta "a" per intenderci e che, nel mio caso, è sempre quella esatta) nella cella J (che con questo codice non viene usata e quindi è libera) poi, fatta la randomizzazione, una funzione che compari il contenuto di testo delle singole celle (B-C-D-E del foglio nel quale vengono inserite quelle random, "Questions") con la cella J (che è la risposta esatta) e, quando da True, si salva la casella dove l'ha trovata e la riporta nella cella F.

Che ne dite? è una cosa fattibile?
Rovic
Newbie
 
Post: 7
Iscritto il: 03/05/16 14:35

Re: [Excel] Mescolare celle in modo random

Postdi wallace&gromit » 03/05/16 16:00

ciao,
sei andato a ripescare un post molto vecchio.
Nel frattempo il tema è stato trattato più volte, prova a vedere se non trovi già una risposta alle tue domande in qualche post più recente di Anthony.
Io ho fatto una versione con sole formule, se ti interessa.

P.S. per rendere più difficile la domanda almeno metti colori possibili, baio, pommellato, sauro... :lol:
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1421
Iscritto il: 16/01/12 14:21

Re: [Excel] Mescolare celle in modo random

Postdi Rovic » 03/05/16 16:43

hahahah pommellato è bellissimo.
Ora cerco tra i post di Anthony, anche se penso che forse quello che serve a me tende più allo specifico piuttosto che ad una cosa generica ma non si sa mai, vuoi vedere che ho fortuna XD

Niente, ho trovato delle macro ma vanno ben oltre quello che serve a me =(

Riusciresti magari a crearmi una funzione che copi la cella un un'altra cella e poi la confronti con le 4 nuove del foglio "Questions" e mi riporti la lettera della cella quando la trova?

così magari la inserisco nell'algoritmo postato prima, prima della randomizzazione ed ho fatto XP

PS. scusami non volevo necropostare ma ho fatto confusione ed invece di leggere 2006 ho letto 2016.

Chiedo venia.
Rovic
Newbie
 
Post: 7
Iscritto il: 03/05/16 14:35

Re: [Excel] Mescolare celle in modo random

Postdi Anthony47 » 03/05/16 20:23

Mamma mia che brutta macro...
Comunque prova ad aggiungere questa riga in questa posizione:
Codice: Seleziona tutto
ActiveSheet.Paste      'Esistente
If ActiveCell.value = Range("A1").Offset(OVert, 1).Value Then Range("A1").Offset(OVert, 5) = Chr(64 + WOFF)       '<<< AGGIUNGERE
Next OHor              'Esistente

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Mescolare celle in modo random

Postdi Rovic » 04/05/16 00:47

Anthony47 ha scritto:Mamma mia che brutta macro...
Comunque prova ad aggiungere questa riga in questa posizione:
Codice: Seleziona tutto
ActiveSheet.Paste      'Esistente
If ActiveCell.value = Range("A1").Offset(OVert, 1).Value Then Range("A1").Offset(OVert, 5) = Chr(64 + WOFF)       '<<< AGGIUNGERE
Next OHor              'Esistente

Ciao

Ciao, come mai dici che é una brutta macro? Fa il suo lavoro, forse impiega un Pochetto di tempo ma lo fa XP.
Domani mattina provo ad inserire il tuo codice, anche se per me é arabo hahah più vi leggo e più mi sento un ignorantone in materia.
Rovic
Newbie
 
Post: 7
Iscritto il: 03/05/16 14:35

Re: [Excel] Mescolare celle in modo random

Postdi Rovic » 04/05/16 06:46

Bah ogni tanto il tasto edit va a fare una passeggiata, comunque ho inserito la tua riga di codice ma alla seconda riga analizzata va in loop e riscrive le 4 celle, sovrascrive la cella F del foglio 'Questions', dove viene momentaneamente appoggiata la nuova risposta A, una lettera che suppongo debba essere quella dove di trova la risposta esatta, cosa che però non corrisponde al vero. Non va =(
Rovic
Newbie
 
Post: 7
Iscritto il: 03/05/16 14:35

Re: [Excel] Mescolare celle in modo random

Postdi Rovic » 04/05/16 07:21

Di nuovo scomparso il tasto edit O.o non vorrei fare multi post ma non so come editare, dopo un tot mi scompare il tasto edit.

Allora, ricominciamo da capo.
Ho capito perché andava in loop, in pratica il codice era impostato che nel mentre copiava le risposte a nelle celle random F,G,H,I, ovviamente alla fine del ciclo ogni volta controllava se la cella dove avrebbe dovuto inserire la risposta fosse già occupata, in caso positivo ripeteva, nel caso dell'inserimento della nuova riga di codice, lui andava a mettere la lettera della presunta posizione della risposta esatta nella cella F e di conseguenza la 4 risposta non aveva più dove metterla perchè si trovava le celle sempre tutte piene e andava in loop.
E' bastato aggiungere un +1 alla riga di codice:
Codice: Seleziona tutto
Range("A1").Offset(0, NumRisp + 1).Range(ColRisp).Select

facendogli considerare non più F,G,H,I bensì G,H,I,J
e poi invece di +1 un bel +2 nella riga di codice:
Codice: Seleziona tutto
WOFF = Int(Rnd * NumRisp + NumRisp + 2)

in modo tale che anche quando va a posizionare le risposte nelle nuove caselle tiene conto del fatto che deve iniziare da G e non da F.

Fin qui tutto ok, l'unica cosa che ho notato è che quella riga di codice che mi hai fatto aggiungere per trovare dove sta la risposta esatta, funziona pure solo che in F (ora funziona bene dato che gli ho liberato la cella) non mi mette il nome della cella dove si trova la nuova risposta esatta, bensì la cella prima.
Esempio:

_A_|_B_|_C_|_D_|_E_|_F_|_G_|_H_|_I_|_J_|
2+2|_4_|_3_|_5_|_6_|_G_|_3_|_2_|_6_|_5_|


Evvai sono riuscito ad editare, comunque funziona, basta modificare anche questo parametro nella riga di codice:
Codice: Seleziona tutto
If ActiveCell.Value = Range("A1").Offset(OVert, 1).Value Then Range("A1").Offset(OVert, 5) = Chr(64 + WOFF)       '<<< AGGIUNGERE

Al posto del 64 basta mettere 65.

GRAZIE MILLE

Questo è il codice completo da copiare ed incollare.
Codice per mischiare numero 4 risposte multiple e tenere conto di dove viene posizionata la risposta esatta (funziona solo se le risposte esatte della scheda sorgente sono tutte le A)
Codice: Seleziona tutto
Sub Mischia()

ColRisp = "B:E"       '<<<< Modificare a piacere
Dest_WS = "Questions" '<<<<

NumRisp = Range(ColRisp).Columns.Count
Sorg_WS = Range("A1").Worksheet.Name
If Sorg_WS = Dest_WS Then
MsgBox ("Foglio di Origine E' UGUALE a quello di Copia; errore")
Exit Sub
End If
'
'Azzera foglio Destinazione
Sheets(Dest_WS).Select
Cells.Select
Selection.Clear
'Copia i dati su altro foglio
Sheets(Sorg_WS).Select
Cells.Select
Selection.Copy
Sheets(Dest_WS).Select
Range("A1").Select
ActiveSheet.Paste
Range("A1").Offset(0, NumRisp + 1).Range(ColRisp).Select
Selection.Clear
Range("A1").Select
'
URiga = Range("A65356").End(xlUp).Row
Randomize
For OVert = 0 To URiga
For OHor = 1 To NumRisp
Riprova:
WOFF = Int(Rnd * NumRisp + NumRisp + 2)
Range("A1").Offset(OVert, OHor).Copy
Range("A1").Offset(OVert, WOFF).Select
If ActiveCell.Value <> "" Then GoTo Riprova:    'Riprova se cella gia' occupata
ActiveSheet.Paste
If ActiveCell.Value = Range("A1").Offset(OVert, 1).Value Then Range("A1").Offset(OVert, 5) = Chr(65 + WOFF)       '<<< AGGIUNGERE
Next OHor
Next OVert
'Cancella le risposte originali
Columns(ColRisp).Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Range("A1").Select
MsgBox ("Completato; cancellare se necessario foglio di origine")

End Sub


P.S. mi togli una curiosità? Premettendo che non so scrivere codici per excel, perché poi hai scritto 64? da dove è uscito sto numero? sono curioso, le altre cose le ho più o meno capite ma questa non ci arrivo.
Rovic
Newbie
 
Post: 7
Iscritto il: 03/05/16 14:35

Re: [Excel] Mescolare celle in modo random

Postdi Anthony47 » 04/05/16 13:19

I messaggi rimangono editabili per 15 minuti circa dopo la loro pubblicazione, poi bisogna scriverne uno nuovo.

Lieto che hai potuto aggiustare il codice sulla base del comportamento rilevato.

Il "64" e' necessario per trasformare 1 in "A", 2 in "B" etc; infatti A corrisponde al codice asci 65.

Ciao

PS: mi confermi che il codice che vorresti modificare e' quello che hai pubblicato stamattina alle 8:21?
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Mescolare celle in modo random

Postdi Rovic » 04/05/16 14:05

Anthony47 ha scritto:I messaggi rimangono editabili per 15 minuti circa dopo la loro pubblicazione, poi bisogna scriverne uno nuovo.

Lieto che hai potuto aggiustare il codice sulla base del comportamento rilevato.

Il "64" e' necessario per trasformare 1 in "A", 2 in "B" etc; infatti A corrisponde al codice asci 65.

Ciao

PS: mi confermi che il codice che vorresti modificare e' quello che hai pubblicato stamattina alle 8:21?


AAA ecco il corrispondente in Ascii giustooo.

Allora aspetta quello che avevo pubblicato alle 8:21 aveva delle cose che non andavano, me ne sono accorto dopo quando ho fatto il debug.

il codice finale è il seguente:
Codice: Seleziona tutto
Sub Mischia()

ColRisp = "B:E"       '<<<< Modificare a piacere
Dest_WS = "Questions" '<<<<

NumRisp = Range(ColRisp).Columns.Count
Sorg_WS = Range("A1").Worksheet.Name
If Sorg_WS = Dest_WS Then
MsgBox ("Foglio di Origine E' UGUALE a quello di Copia; errore")
Exit Sub
End If
'
'Azzera foglio Destinazione
Sheets(Dest_WS).Select
Cells.Select
Selection.Clear
'Copia i dati su altro foglio
Sheets(Sorg_WS).Select
Cells.Select
Selection.Copy
Sheets(Dest_WS).Select
Range("A1").Select
ActiveSheet.Paste
Range("A1").Offset(0, NumRisp + 1).Range(ColRisp).Select
Selection.Clear
Range("A1").Select
'
URiga = Range("A65356").End(xlUp).Row
Randomize
For OVert = 0 To URiga - 1
For OHor = 1 To NumRisp
Riprova:
WOFF = Int(Rnd * NumRisp + NumRisp + 2)
Range("A1").Offset(OVert, OHor).Copy
Range("A1").Offset(OVert, WOFF).Select
If ActiveCell.Value <> "" Then GoTo Riprova:    'Riprova se cella gia' occupata
ActiveSheet.Paste
If ActiveCell.Value = Range("A1").Offset(OVert, 1).Value Then Range("A1").Offset(OVert, 5) = Chr(59 + WOFF)       '<<< AGGIUNGERE
Next OHor
Next OVert
'Cancella le risposte originali
Columns(ColRisp).Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Columns("B").Select
Selection.Cut
Columns("G").Select
ActiveSheet.Paste
Columns("B").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft

Range("A1").Select
MsgBox ("Completato; cancellare se necessario foglio di origine")

End Sub


Corrette varie cose:
- La risposta esatta la considera non più in base alla cella ma in base a se sia A,B,C oppure D in modo tale da poter inserire la tabella domande+risposte+risp esatta in un qualche altro foglio di excel con macro per quiz
- la colonna delle risposte esatte andava a finire nella colonna B e risultava tutto mischiato, ho fatto in modo che venisse tagliata e spostata alla fine in modo da creare l'ordine Domanda+alternativaA+alternativaB+alternativaC+alternativaD+RispEsatta
- Ho aggiunto un -1 all'istruzione che contava quanti cicli fare per randomizzare tutte le righe dato che ne faceva una in più, se ad esempio erano 10 righe, faceva un ciclo di spostamento celle random in più, ne faceva 11.

Semmai dovesse servire vorrei anche precisare che, apportando le giuste modifiche del caso, è possibile utilizzare la bellissima macro creata da Mattia Biffi (o almeno così è scritto nell'intestazione) inserendovi all'interno la nuova selezione di domande con risposte mischiate e relativa risposta esatta.

Semmai appena finisco il concorso sistemo il tutto in un unico excell, sistemando i fogli e mettendo una pagina introduttiva con le istruzioni per avere a portata di mano sia la macro per l'esercitazione, sia la macro per mischiare eventualmente le risposte.

Grazie ancora per l'aiuto XD
Rovic
Newbie
 
Post: 7
Iscritto il: 03/05/16 14:35


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Mescolare celle in modo random":


Chi c’è in linea

Visitano il forum: alfrimpa e 10 ospiti