ゲイリーはワークシートに2つのリストを持っています。 1つはA列に、当社の余剰品目のリストが含まれ、もう1つはG列に名前のリストが含まれています。列B:Fには何もありません。ゲイリーは、アイテムのリストにランダムに名前を割り当てたいと考えています。列Gの各名前は1回だけ割り当てる必要があります。アイテムよりも多くの名前がある場合、一部の名前は使用されません。アイテムよりも名前が少ない場合、一部のアイテムには名前が関連付けられません。

これを行うにはいくつかの方法があります。ただし、おそらく最も簡単なのは、列Aの各項目に乱数を割り当てることです。

最初の項目がセルA1にあると仮定して、セルB1に次の項目を入力します。

=RAND()

セルB1の塗りつぶしハンドルをダブルクリックすると、列Aの各項目の右側に乱数(0から1の間)が表示されます。

次に、列Bのすべてのセルを選択し、Ctrl + Cを押してクリップボードにコピーします。 [形式を選択して貼り付け]を使用して、値を列Bのセルに貼り付けます(これにより、セルが数式から実際の静的な値に変換されます)

列Aと列Bを、列Bの値に基づいて昇順で並べ替えます。

行全体を見ると、名前(列G)にランダムに関連付けられたアイテム(列A)があります。

必須ではありませんが、同じ手順に従って、各名前の右側に乱数を追加してから、名前を並べ替えることもできます。 (アイテムをランダム化することで、各名前にランダムなアイテムが関連付けられていることを確認するのに十分であるため、必要ではないと言います。)

これまでに説明した手法は、ランダムペアリングをたまに行う必要がある場合に最適です。頻繁に行う必要がある場合は、マクロの方が適している場合があります。もちろん、使用できるさまざまなマクロベースのアプローチがあります。次のアプローチでは、アイテムリストが列Aにあり、名前リストが列Gにあることを前提としています。また、各列の行1にヘッダーセルがあることも前提としています。

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

アイテムよりも多くの名前がある場合、マクロはランダムにアイテムに名前を割り当てます。名前よりも多くのアイテムがある場合、ランダムにいくつかのアイテムを名前に割り当て、ランダムに「穴」(名前のないアイテム)を残します。それらを列Bに格納し、そこにあったものをすべて上書きします。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(5682)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice365のExcelに適用されます。