
1 つの列に 100 個の名前が入った MS Excel シートがあります。
別のシートには、10 x 10 のセルのグリッドがあり、その列からランダムに名前を割り当てたいと考えています。
これを実現する比較的簡単な方法はありますか、それとも VBA タイプの作業が必要になりますか?
答え1
これは、1 から 100 までのランダムな順序番号を作成するヘルパー列を使用して実行できます。名前を A2:A101 に入力します。B2 には次のものを入力します。
=AGGREGATE(15,7,ROW($1:$100)/(COUNTIFS($B$1:B1,ROW($1:$100))=0),RANDBETWEEN(1,100-COUNT($B$1:B1)))
そして書き写します。
これにより、AGGREGATE 内の k が である 1 から 100 までの数字がランダムに選択されますRANDBETWEEN(1,100-COUNT($B$1:B1))
。 はCOUNTIFS($B$1:B1,ROW($1:$100))=0
重複が発生しないようにします。
次に、INDEX/MATCH を使用して値を検索します。これをグリッドの右上隅に配置します。
=INDEX($A:$A,MATCH((ROW($A1)-1)*10+COLUMN(A$1),$B:$B,0))
上下にドラッグすると、最初の行で 1 ~ 10 が検索され、2 番目の行で 11 ~ 20 が検索されます。また、ルックアップ列はランダム化されているため、ランダムになります。
次に、10 をコピーして 10 をコピーします。
Office 365 Excel をお持ちの場合は、INDEX/MATCH を次の動的バージョンに置き換えて、10x10 を自動的にスピルすることができます。
=INDEX(A:A,MATCH(SEQUENCE(10,10),B:B,0))
答え2
名前が列 A に保存されていると仮定します。
- 列Bに次の数式を適用します。
=RAND()
- 結果の値をコピーして列Bに貼り付け、数式を上書きします。
- 列Cに数式を適用します
=RANK(B2, $B$2:$B$101)
。これにより、各名前に1~100の番号を割り当てることができます。 - 10x10 グリッドの上に、1 ~ 10 の数字を追加します。10x10 グリッドの左側でも同じことを行います。これらは行ヘッダーと列ヘッダーとして機能します。
ここで、行ヘッダーが でE2:E11
、列ヘッダーが であると仮定しますF1:O1
...
=INDEX($A$2:$A$101, MATCH(($E2-1)*10+F$1, $C$2:$C$101,0))
セルF2に数式を入力し、10x10のグリッドに沿ってドラッグします。