Willekeurig toewijzen van namen aan Items

Gary heeft twee lijsten in een werkblad. Een van hen, in kolom A, bevat een lijst van overtollige artikelen in ons bedrijf en de andere, in kolom G, bevat een lijst met namen. Er is niets in de kolommen B: F. Gary willen namen toewijzen, willekeurig, om de lijst met items. Elke naam van kolom G mag slechts één keer worden toegekend. Als er meer namen dan items, dan is een aantal namen zal niet wennen. Als er minder namen dan items, dan sommige items zullen geen aanverwante namen.

Er zijn een paar manieren waarop dit kan worden gedaan. Misschien is de makkelijkste, is echter om een ​​willekeurig getal gewoon toewijzen aan elk item in kolom A. In de veronderstelling dat het eerste item zit in cel A1, zet u het volgende in cel B1:

= RAND ()

Dubbelklik op de vulgreep in cel B1, en je moet eindigen met een willekeurig getal (tussen 0 en 1) aan de rechterkant van elk item in kolom A.

Nu, selecteert u alle cellen in kolom B en druk op Ctrl + C om te kopiëren naar het klembord. Gebruik Plakken speciaal om de waarden terug te krijgen in die cellen in kolom B. plakken (Dit zet de cellen van formules om werkelijke statische waarden.)

Sorteer de kolommen A en B in oplopende volgorde op basis van de waarden in kolom B. Als je kijkt over de rijen, dan heb je nu items (kolom A) willekeurig geassocieerd met een naam (kolom G).

Ook al is het niet nodig is, kunt u ook dezelfde stappen volgen om een ​​willekeurig nummer toe te voegen aan het recht van elke naam en vervolgens sorteren van de namen. (I zeggen het is niet nodig omdat randomiseren van de items voldoende om te verzekeren dat er willekeurige items Bij elke naam moet zijn.)

De techniek tot nu toe besproken werkt geweldig als je naar de willekeurige koppeling slechts eenmaal in een tijdje. Als u nodig hebt om het te vaak te doen, dan is een macro kan een betere aanpak. Er zijn natuurlijk vele verschillende macro-benaderingen kon gebruiken. De volgende aanpak gaat uit van de lijst van objecten is in kolom A en de naam van de lijst in kolom G. Het veronderstelt ook dat er zijn header cellen in rij 1 voor elke kolom.

Sub AssignNames ()
Set srItems = Range ("A2"). CurrentRegion
Stel srNames = Range ("G2"). CurrentRegion
NameCount = srItems.Rows.Count - 1
Itemcount = srNames.Rows.Count - 1

'Willekeurig Namen
ReDim tempArray (NameCount, 2)
Voor x = 0 Om NameCount - 1
tempArray (x, 0) = Range ("G2"). Offset (x, 0)
tempArray (x, 1) = Rnd ()
Volgende x

'Bubble Sort
Voor i = 0 Om NameCount - 2
Voor j = i Om NameCount - 1
Als tempArray (i, 1)> tempArray (j, 1) dan
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
Volgende j
Volgende i

'AssignNames
Range ("B2") = "Toegewezen"
AssignCount = NameCount
Als NameCount> Itemcount Dan AssignCount = Itemcount
Voor x = 0 Om AssignCount
Range ("B2"). Offset (x, 0) = tempArray (x, 0)
Volgende x
End Sub

Als er meer namen dan items van de macro wijst willekeurig namen om items. Als er meer items zijn dan namen zij wijst willekeurig enkele items naar namen en laat willekeurig "gaten" (items zonder namen). Het slaat hen in kolom B, overschrijven wat er was.

ExcelTips is uw bron voor kosteneffectieve Microsoft Excel training. Deze tip (5682) is van toepassing op Microsoft Excel 2007, 2010 en 2013.