Che ne dici di un titolo di suggerimento? Il titolo si riferisce al fatto che potrebbe essere necessario popolare un intervallo di celle con una serie di numeri in ordine casuale. Ad esempio, potresti voler popolare 52 celle con i numeri da 1 a 52, in ordine casuale. (Sarebbe simile a pescare carte da un mazzo mescolato, da qui il titolo del 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 memorizzato l’array, è semplice inserire 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 attraverso la seconda dimensione della matrice possono essere presenti duplicati, quando la matrice è 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 (2280) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: