Giocare con un mazzo completo (Microsoft Excel)
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: