mischia solo colonne



  • mischia solo colonne
    di nichicanta data: 28/06/2013 14:28:08

    Amici del forum, con ilcodice allegato, trovato in rete, ho risolto parzialmente la mia esigenza.
    Vi chiedo se sia possibile far partire il codice dalla colonna c alla colonna f per mescolare i dati di quelle colonne.
    Poi vi chiedo, poichè la colonna G contiene sempre la risposta esatta, come far abbinare ( nel momento che si mischiano le colonne) la risposta esatta (indicata in colonna G) con la colonna ( che contiena la risposat esatta) che ad ogni volta cambia la posizione della risposta esatta?
    Spero di essere stato chiaro e comprensibile.
    Certo di un vostro gradito aiuto (fino ad ora non è mai avvenuto il contrario e ve ne sono moooolto grato), cologo l'occasione per salutare tutti Voi.
     
    Sub Mischia_Colonne_Quiz()
    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
    
    
    



  • di HarryBosch data: 28/06/2013 19:43:23

    Ciao Nichi
    prova il file che allego.. la routine che hai "trovato" non mi piaceva molto ^_^

    Controlla se ho capito bene il tuo intento



  • di nichicanta (utente non iscritto) data: 28/06/2013 20:25:53

    Ci siamo quasi Harry, desidero che nella colonna interessata non compaia la scritta "risposta esatta" ma mi lasci inalterata la domanda cosi come nasce, e poi poiché ho nel mio foglio sempre l'intestazione di colonna, il codice dovrebbe partire dalla riga 2.
    Grazie ancora per la diponibilità ed il grande aiuto che ci date.



  • di nichicanta (utente non iscritto) data: 28/06/2013 20:36:56

    Scusami tanto Harry, ti chiedo tanto (sono autodidatta e vorrei imparare qualche tecnica nuova di programmazione e di logica) se, gentilmente commenti il codice che hai utilizzato, in modo da poter capire cosa significa e cosa si ottiene, man mano che si compila il codice?
    Ti saluto.



  • di HarryBosch data: 28/06/2013 20:37:43

    "Risposta esatta" era solo per farti vedere che nella colonna G il riferimento rimaneva sempre corretto!!
    Nelle colonne C:F vanno inserite le TUE risposte, che possono essere di qualsiasi tipo, stringhe, numeri, alfanumeriche... Ovviamente ognuna differente dall'altra.
    Nella colonna B va inserita la domanda. La lettera della colonna G, che dovrai assegnare all'inizio, riguarderà la risposta corretta e ad ogni rimescolamento seguirà sempre lo spostamento.

    Per partire dalla seconda riga puoi modificare questa istruzione:
    Set quiz = Range("c1:f" & ur)

    che diventerà:
    Set quiz = Range("c2:f" & ur)


    Non avevi già un database strutturato esattamente in questo modo?



  • di nichicanta (utente non iscritto) data: 28/06/2013 20:57:40

    Certo Harry il mio database è impostato in questo modo, provo e spunto su risolto se tutto è ok.
    Grazie ancora, sono molto contento di avervi conosciuto, sono quasi alla fine del mio programma dei quiz, grazie al vostro immenso e prezioso contributo.




  • di nichicanta (utente non iscritto) data: 28/06/2013 21:20:52

    Harry, mi dà errore in questa riga:
    Cells(domanda.Row, "G") = colonna(domanda.Find(esatta).Column)

    il messaggio di errore è il seguente:

    Errore di run-time"91"
    Variabile oggetto o variabile del blocco With non impostata.



  • di HarryBosch data: 28/06/2013 21:37:12

    Ci possono essere vari motivi..
    Vuoi provare a girarmi il database con le domande, dove hai inserito la macro?
    Anche in privato se ci sono dati sensibili.
    Così mi rendo conto subito :)



  • di nichicanta (utente non iscritto) data: 28/06/2013 21:49:50

    Harry ti ho allegato il file con le domande incollate nel tuo file che mi hai postato, e la routine dà lo stesso problema.
    Fammi sapere, per favore, dov'è l'errore.



  • di HarryBosch data: 28/06/2013 21:55:32

    già visto...
    nella colonna G le lettere della risposta corretta sono in minuscolo, mentre nel mio esempio erano in maiuscolo ^_^
    Piccola manutenzione, con l'istruzione UCASE che risolve il problema...
    Verifico che funzioni tutto e ti riallego il file



  • di HarryBosch data: 28/06/2013 22:05:18

    In realtà vedo ora una cosa che stravolge il tutto.
    All'interno delle quattro risposte c'è la lettera di riferimento e quindi, non si deve semplicemente mescolare il contenuto delle celle, ma soltanto una parte del contenuto! Visto che le lettere a), b) c) e d) dovranno rimanere al loro posto...

    La domanda iniziale lacuna sotto questo aspetto :)
    Vedo di sistemare...



  • di HarryBosch data: 28/06/2013 23:09:02

    Ho fatto una piccola pausa ^_^
    Ti riallego il file "mescola quiz - OK" che si comporta come chiedevi:
    vengono mescolate le risposte di tutte le domande inserite, e il relativo riferimento alla risposta giusta viene adeguato.

    Prova e fammi sapere...



  • di nichicanta (utente non iscritto) data: 29/06/2013 18:14:13

    Ok Harry, tutto risolto con il file che mi hai allegato.
    Il mio motto: A nessuno interessa chi fa funzionare le cose, fino a quando non smettono di funzionare.


    Saluti e ringraziamenti speciali a tutti Voi.