Condividi:        

[Excel] Coppie casuali da una lista di nr. con 1 condizione

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] Coppie casuali da una lista di nr. con 1 condizione

Postdi Marama » 05/03/12 21:29

Ciao a tutti,
ho un piccolo problema e sicuramente potrete darmi qualche prezioso aiuto.
Da una tabella contenente vari parametri tra cui una lista di numeri identificativi sulla colonna A (e.g. 1, 2, 3, ecc.) e una lista di nomi sulla colonna D (e.g. Mario, Giovanni, Mario, ecc.) devo formare delle coppie casuali tra questi numeri identificativi però tenendo presente che una coppia non può essere formata da numeri che hanno associato lo stesso nome (e.g. la coppia 1-3 non potrà esistere perché il nome associato a questi numeri è Mario). Quindi se ho 20 numeri dovrò avere a video 10 coppie casuali tenendo sempre presente la condizione sopracitata.
Spero di essere stato abbastanza chiaro nell'esporre il problema e vi ringrazio dell'aiuto. :D
Marama
Newbie
 
Post: 3
Iscritto il: 05/03/12 21:09

Sponsor
 

Re: [Excel] Coppie casuali da una lista di nr. con 1 condizi

Postdi Flash30005 » 05/03/12 23:15

Ciao Marama e benvunuto nel Forum

Per caso queste coppie devono, poi, fare coppia con altri due "nomi"?
se così. dai uno sguardo a questo topic

http://www.pc-facile.com/forum/viewtopic.php?f=26&t=86161&p=512128&hilit=geri21#p512128

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel] Coppie casuali da una lista di nr. con 1 condizi

Postdi Anthony47 » 05/03/12 23:32

Ciao Marama, benvenuto anche da parte mia.
Non perdere il messaggio di Flash, sopra.

La sequente macro fa un lavoro di pazienza a cercare gli accoppiamenti casuali ma possibili:
Codice: Seleziona tutto
Sub coppie()
Dim Iniz As String, Lungh As Integer, Risult As String
Dim I As Integer, myArr, myTim As Long

Iniz = "D1"    '<<< Inizio della lista nomi
Lungh = 20     '<<< N° di nomi
Risult = "G1"  '<<< Prima cella per i risultati
'
myTim = Timer
Restr:
Range(Risult).Resize(2 + Lungh / 2, 2).Clear
myArr = Range(Iniz).Resize(Lungh, 1)
I = 0
Do
Retr:
    'aaa = LBound(myArr, 1)
    Ind1 = Int(Rnd() * Lungh) + 1
    CA = myArr(Ind1, 1): If CA = "" Then GoTo Retr
RetrB:
    Ind2 = Int(Rnd() * Lungh) + 1
    CB = myArr(Ind2, 1): If CB = "" Then GoTo RetrB
    If CA = CB Then
        DLock = DLock + 1
        If DLock < 40 Then
            GoTo Retr
            Else: GoTo Restr
        End If
        Else: DLock = 0
    End If
    myArr(Ind1, 1) = "": myArr(Ind2, 1) = ""
    Range(Risult).Offset(20, 0).End(xlUp).Offset(1, 0) = CA
    Range(Risult).Offset(20, 0).End(xlUp).Offset(0, 1) = CB
    I = I + 1
    If I >= Int(Lungh / 2) Then Exit Do
    If Timer > myTim + 30 Or (Timer < myTim And myTim > 30) Then
        MsgBox ("Tentativi di accoppiamento fallito; riprovare")
        Exit Do
    End If
Loop

End Sub

Personalizza le istruzioni in testa marcate <<< e poi mandala in esecuzione. Sai come fare?
I risultati (le coppie) verrano creati a partire da quanto specificato nell' istruzione Risult = "G1" (o come la modificherai).

Fai sapere, ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Coppie casuali da una lista di nr. con 1 condizi

Postdi Marama » 06/03/12 08:20

Perfetto e grazie Anthony la macro funziona benissimo, ho solo modificato la parte iniziale che invece dei nomi deve accoppiare in modo casule i codici di identificazione.
Altra domanda: nella stampa a video dei risultati degli accopiamenti sarebbe possibile stampare vicino ad ogni numero il rispettivo nome (già determinato come in questo esempio: coppia 1,Mario vs. 2,Pietro; ecc.).
Quando ho un po' di tempo provo a spulciare il post proposto da Flash, magari riesco a trovare già li la soluzione.
Grazie a tutti
Marama
Newbie
 
Post: 3
Iscritto il: 05/03/12 21:09

Re: [Excel] Coppie casuali da una lista di nr. con 1 condizi

Postdi Marama » 06/03/12 12:10

Ho guardato la selezione casuale sui tavoli da gioco, il concetto è perfetto ma meno complicato, dato che io ho bisogno di una sola coppia casuale e poi in base al punteggio vengono fatte le coppie successive per la finale.
Ora in quello che mi avete suggerito riesco a fare le coppie per ID ma per necessità di fianco all'ID ho bisogno del nome del cane che non è la stessa casella del nome del proprietario che serve come parametro/blocco per il primo accoppiamento casuale. Se a fianco al D1 (ID) aggiungo il D2 (nome del cane) l'accoppiamento casuale funziona ugualmente??
Poi capita che 1 proprietario abbia 6 cani e la momento ho solo 10 iscritti per quella razza, il sistema cosa mi combina? giustamente per regolamento i cani dello stesso proprietario non dovrebbero correre assieme ma in caso di necessità si accoppiano ugualmente, non so se mi spiego....

e proprio per pignoleria, si può fare che il risultato delle coppie avvenga in verticale e non in orizzontale cioè al posto di: 3 Filter-14 Notte
cosi:
3 Filter
14 Notte

Grazie mille :D
Marama
Newbie
 
Post: 3
Iscritto il: 05/03/12 21:09

Re: [Excel] Coppie casuali da una lista di nr. con 1 condizi

Postdi Flash30005 » 06/03/12 23:30

Credo che occorra un file di esempio con spiegazioni più esplicite
perché sono sicuro che hai le idee chiare su ciò che vorresti ottenere ma per realizzare un programma (macro) che soddisfi l'esigenza bisognerebbe analizzare meglio le "regole" da impostare

Attendo un esempio pratico su file

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel] Coppie casuali da una lista di nr. con 1 condizi

Postdi Anthony47 » 07/03/12 01:06

Questa variante di macro scrive Indice e Nominativo; inoltre puoi impostare se lo sviluppo sara' in verticale (come era versione precedente o orizzontale.
Codice: Seleziona tutto
Sub coppieV1()
Dim Iniz As String, Lungh As Integer, Risult As String
Dim I As Integer, myArr, myTim As Single

Iniz = "D1"    '<<< Inizio della lista nomi
Lungh = 20     '<<< N° di nomi
Risult = "G1"  '<<< Prima cella per i risultati
Verso = "V"    '<<< L' orientamento dell sviluppo; V=Verticale oppure H
'
myTim = Timer
Restr:
If Verso = "V" Then
Range(Risult).Resize(2 + Lungh / 2, 2).Clear     '***V
Else: Range(Risult).Resize(3, 2 + Lungh / 2).Clear   '***H
End If
'
Range(Risult) = " "
myArr = Range(Iniz).Resize(Lungh, 1)
I = 0
Do
Retr:
    'aaa = LBound(myArr, 1)
    Ind1 = Int(Rnd() * Lungh) + 1
    CA = myArr(Ind1, 1): If CA = "" Then GoTo Retr
RetrB:
    Ind2 = Int(Rnd() * Lungh) + 1
    CB = myArr(Ind2, 1): If CB = "" Then GoTo RetrB
    If CA = CB Then
        DLock = DLock + 1
        If DLock < 40 Then
            GoTo Retr
            Else: GoTo Restr
        End If
        Else: DLock = 0
    End If
    myArr(Ind1, 1) = "": myArr(Ind2, 1) = ""
If Verso = "V" Then
    Range(Risult).Offset(20, 0).End(xlUp).Offset(1, 0) = Range(Iniz).Offset(Ind1 - 1, -1) & " " & CA  '***H
    Range(Risult).Offset(20, 0).End(xlUp).Offset(0, 1) = Range(Iniz).Offset(Ind2 - 1, -1) & " " & CB  '***H
Else:
    Range(Risult).Offset(0, 20).End(xlToLeft).Offset(0, 1) = Range(Iniz).Offset(Ind1 - 1, -1) & " " & CA  '***V
    Range(Risult).Offset(0, 20).End(xlToLeft).Offset(1, 0) = Range(Iniz).Offset(Ind2 - 1, -1) & " " & CB  '***V
End If
    I = I + 1
    If I >= Int(Lungh / 2) Then Exit Do
    If Timer > myTim + 30 Or (Timer < myTim And myTim > 30) Then
        MsgBox ("Tentativi di accoppiamento fallito; riprovare")
        Exit Do
    End If
Loop
End Sub


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Coppie casuali da una lista di nr. con 1 condizione":


Chi c’è in linea

Visitano il forum: Nessuno e 47 ospiti