Distribuzione casuale di numeri selezionati
Hai un problema con Excel? 
Distribuzione casuale di numeri selezionati
di Migua Ing data: 22/01/2016 12:53:30
Salve a tutti, vi presento il mio problema e spero che qualcuno di voi mi possa dare una mano perchè non ne vengo più fuori...
Avendo un Insieme numerico M =1,2,...,1088 ; devo selezionare manualmente un sottoinsieme L= 1,2,...,n e ridistribuire tale sottoinsieme L in X colonne ( ogni colonna deve avere i numeri del sottoinsieme L, ma distribuiti in maniera casuale).
Distribuzione casuale di numeri selezionati
di Migua Ing data: 22/01/2016 12:55:13
Salve a tutti, vi presento il mio problema e spero che qualcuno di voi mi possa dare una mano perchè non ne vengo più fuori...
Avendo un Insieme numerico M =1,2,...,1088 ; devo selezionare manualmente un sottoinsieme L= 1,2,...,n e ridistribuire tale sottoinsieme L in X colonne ( ogni colonna deve avere i numeri del sottoinsieme L, ma distribuiti in maniera casuale).
di Luca73 data: 22/01/2016 13:32:16
Ciao
Quanti sono i numeri dell'insieme M?
Come selezioni "manualmente"?
Quanti sono i numeri del sottoinsieme L?
Come/dove sono sono scritti i numeri di L e M?
Allega un file, rendi la vita più semplice.
Ciao
Luca
di Migua Ing data: 22/01/2016 13:51:30
I numeri dell'insieme M vanno da 1 a 1088 (come scritto in precedenza);
Selezione manualmente vuol dire che dovrei creare una colonna dove vado a scrivere 20 numeri selezionati ( che vanno da 1 a 1088) in modo tale da creare il sottoinsieme L ( che va da 1 a 20 ).
Riguardo l'ultima domanda " Come/dove sono sono scritti i numeri di L e M? " : L ed M possono essere scritti in colonne separate.
di Migua Ing data: 22/01/2016 14:02:53
Nel file allegato, si vede la colonna L ( che rappresenta il sottoinsieme di M ) e le colonne P ( che sono le generazioni casuali dei numeri presenti in L). Secondo te, è possibile creare questo meccanismo in VBA,? inserendo come parametri:
- il numero di componenti del sottoinsieme L
- selezionare ( se L=20) , venti numeri che fanno parte dell'insieme M ( che va da 1 a 1088).
- il numero delle colonne P ( dove verranno ridistribuiti in maniera random i venti numeri selezionati precedentemente del sottoinsieme L.
di Luca73 data: 22/01/2016 16:00:26
Ciao
una considerazione se dovessi chiedere nuovamente aiuto: allegare file per semplificare la vita non equivale ad allegare un immagine dello stesso.
Ti propongo una piccola macro. la quale ti preleva i valori dalla colonna A righe da 1 a 20 e li mette in riga 1 da colonna D a W
Ciao
Luca
Sub RiempiVettoreCasuale()
Dim Index As Integer
Dim Posizione As Integer
Dim Vettore(1 To 20, 1 To 2)
Dim InputV(1 To 20)
Dim Index2 As Integer
Dim Index1 As Integer
Dim Contatore As Integer
Randomize
For Index = 1 To 20
Vettore(Index, 1) = Index ' Inizializza la prima componente del vettore con numeri sequenziali
InputV(Index) = Range("A1").Offset(Index - 1, 0) ' riempi il vettore di origine
Next Index
For Index1 = 1 To 20
Posizione = Int(((20 + 1 - Index1) - 1 + 1) * Rnd + 1) ' crea la posizione casuale tra 1 e il numero massimo di celle libere
Contatore = 1 ' inizializzo il contatore di celle libere
For Index2 = 1 To 20
If Vettore(Index2, 1) = Posizione Then ' se siamo alla posizione casuale
Vettore(Index2, 2) = InputV(Index1) ' inserisco il valore
Vettore(Index2, 1) = "OK" 'elimino la posizione libera
ElseIf Vettore(Index2, 1) <> "OK" Then 'se la posizione │ libera
Vettore(Index2, 1) = Contatore ' aggiorno il numero di posizione della cella libera
Contatore = Contatore + 1 ' aggiorno il contatore
End If
Next
Next
For Index = 1 To 20
Range("b1").Offset(0, Index - 1 + 2) = Vettore(Index, 2) 'scrivo nelle celle il valore
Next Index
End Sub
|
di Migua Ing data: 22/01/2016 17:10:05
La macro che hai condiviso è perfetta, era quello che cercavo, Luca sei un grandeeeee!!!!!!
Premetto che ho attivato la macro con il pulsante ActiveX, quindi ogni volta che schiaccio il pulsante mi genera una distribuzione casuale dei numeri da me inseriti nella colonna A, sovrapponendosi alla riga generata precedentemente.
Quindi, a fronte di questo fatto vorrei evitare la sovrapposizione e scrivere una nuova riga ogni qualvolta schiaccio il pulsante (in questo caso nel secondo loop andrà a scrivere, sempre dalla colonna D a W ma in riga 2). In modo tale da mantenere le serie generate precedentemente.
Secondo te, è di facile modifica?
Ciao.
Vuoi Approfondire?