Assegnazione casuale di nomi agli elementi (Microsoft Excel)
Gary ha due elenchi in un foglio di lavoro. Uno di loro, nella colonna A, contiene un elenco di articoli in eccedenza nella nostra azienda e l’altro, nella colonna G, contiene un elenco di nomi. Non c’è niente nelle colonne B: F. Gary vorrebbe assegnare nomi, in modo casuale, all’elenco degli elementi. Ciascun nome della colonna G deve essere assegnato una sola volta. Se ci sono più nomi che elementi, alcuni nomi non verranno utilizzati. Se sono presenti meno nomi rispetto agli elementi, alcuni elementi non avranno nomi associati.
Ci sono un paio di modi per farlo. Forse il più semplice, però, è semplicemente assegnare un numero casuale a ciascun elemento nella colonna A.
Supponendo che il primo elemento si trovi nella cella A1, inserire quanto segue nella cella B1:
=RAND()
Fai doppio clic sul quadratino di riempimento nella cella B1 e dovresti finire con un numero casuale (tra 0 e 1) a destra di ogni elemento nella colonna A.
Ora seleziona tutte le celle nella colonna B e premi Ctrl + C per copiarle negli Appunti. Usa Incolla speciale per incollare nuovamente i valori in quelle celle nella colonna B. (Questo converte le celle dalle formule ai valori statici effettivi.)
Ordina le colonne A e B in ordine crescente in base ai valori nella colonna B.
Se guardi attraverso le righe, ora avrai elementi (colonna A) associati in modo casuale a un nome (colonna G).
Anche se non è necessario, puoi anche seguire questi stessi passaggi per aggiungere un numero casuale a destra di ogni nome e quindi ordinare i nomi. (Dico che non è necessario perché la randomizzazione degli elementi dovrebbe essere sufficiente per garantire che ci siano elementi casuali associati a ciascun nome.)
La tecnica discussa finora funziona alla grande se devi eseguire l’accoppiamento casuale solo una volta ogni tanto. Se hai bisogno di farlo abbastanza spesso, una macro potrebbe essere un approccio migliore. Ci sono, ovviamente, molti approcci basati su macro diversi che potresti usare. Il seguente approccio presuppone che l’elenco degli elementi si trovi nella colonna A e l’elenco dei nomi nella colonna G. Presuppone inoltre che siano presenti celle di intestazione nella riga 1 per ogni colonna.
Sub AssignNames() Set srItems = Range("A2").CurrentRegion Set srNames = Range("G2").CurrentRegion NameCount = srItems.Rows.Count - 1 ItemCount = srNames.Rows.Count - 1 'Randomize Names ReDim tempArray(NameCount, 2) For x = 0 To NameCount - 1 tempArray(x, 0) = Range("G2").Offset(x, 0) tempArray(x, 1) = Rnd() Next x 'Bubble Sort For i = 0 To NameCount - 2 For j = i To NameCount - 1 If tempArray(i, 1) > tempArray(j, 1) Then tempItem = tempArray(j, 0) tempName = tempArray(j, 1) tempArray(j, 0) = tempArray(i, 0) tempArray(j, 1) = tempArray(i, 1) tempArray(i, 0) = tempItem tempArray(i, 1) = tempName End If Next j Next i 'AssignNames Range("B2") = "Assigned" AssignCount = NameCount If NameCount > ItemCount Then AssignCount = ItemCount For x = 0 To AssignCount Range("B2").Offset(x, 0) = tempArray(x, 0) Next x End Sub
Se sono presenti più nomi che elementi, la macro assegna casualmente i nomi agli elementi. Se ci sono più elementi che nomi, assegna casualmente alcuni elementi a nomi e lascia casualmente dei “buchi” (elementi senza nome). Li memorizza nella colonna B, sovrascrivendo ciò che era lì.
_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 (5682) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 e Excel in Office 365.