Giocare con un mazzo completo (Microsoft Excel)
Excel è ottimo per generare numeri casuali, ma è meno eccezionale per riempire un intervallo di celle con numeri casuali in cui nessun numero particolare viene ripetuto due volte. Ad esempio, potresti voler popolare 52 celle con i numeri da 1 a 52, in ordine casuale. (Questo è molto simile alla scelta delle carte da un mazzo in ordine casuale, dove una carta particolare può essere scelta solo una volta. Quindi, il titolo per questo suggerimento.)
Ovviamente non esiste una funzione Excel incorporata per fornire questa capacità, quindi sei lasciato a lavorare con le macro. Fortunatamente, una tale macro non è così difficile da creare. La seguente macro farà bene il trucco:
Sub FillRand() Dim nums() As Integer Dim maxval As Integer Dim nrows As Integer, ncols As Integer Dim j As Integer, k As Integer Dim Ptr As Integer Randomize Set s = Selection maxval = s.Cells.Count nrows = s.Rows.Count ncols = s.Columns.Count ReDim nums(maxval, 2) 'Fill the initial array For j = 1 To maxval nums(j, 1) = j nums(j, 2) = Int((Rnd * maxval) + 1) Next j 'Sort the array based on the random numbers For j = 1 To maxval - 1 Ptr = j For k = j + 1 To maxval If nums(Ptr, 2) > nums(k, 2) Then Ptr = k Next k If Ptr <> j Then k = nums(Ptr, 1) nums(Ptr, 1) = nums(j, 1) nums(j, 1) = k k = nums(Ptr, 2) nums(Ptr, 2) = nums(j, 2) nums(j, 2) = k End If Next j 'Fill in the cells Ptr = 0 For j = 1 To nrows For k = 1 To ncols Ptr = Ptr + 1 s.Cells(j, k) = nums(Ptr, 1) Next k Next j End Sub
Questa macro utilizza una matrice bidimensionale (nums) per determinare quali numeri utilizzare e l’ordine in cui devono essere utilizzati. Verso l’inizio della macro la matrice viene riempita con un numero statico (da 1 al numero di celle) e un numero casuale compreso tra 1 e il numero di celle. Questo secondo numero viene quindi utilizzato per ordinare l’array. Una volta che l’array è stato memorizzato, è semplice posizionare i numeri originali nelle celle.
A proposito, il motivo per cui viene utilizzato un array bidimensionale è perché la funzione Rnd che VBA utilizza per generare numeri casuali può restituire valori duplicati. Pertanto, anche se la seconda dimensione della matrice può contenere duplicati, quando la matrice viene finalmente ordinata, la prima dimensione non avrà duplicati.
Per utilizzare la macro, inizia selezionando le celle che desideri vengano riempite con valori sequenziali in ordine casuale. Quando si esegue la macro, l’intervallo viene riempito. Ad esempio, se selezioni dieci celle e quindi esegui la macro, quelle celle vengono riempite con i numeri da 1 a 10, in ordine casuale.
_Nota: _
Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (8269) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 ed Excel in Office 365. Puoi trovare una versione di questo suggerimento per la vecchia interfaccia del menu di Excel qui: