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: