Quantcast
Channel: なんでもエクセル(Nandemo Excel)
Viewing all articles
Browse latest Browse all 60

関数/数式:縦横が重複しない組み合わせをランダムに作る

$
0
0

当番表やローテーションが被らないよう、ランダムに組み合わせたいと考えた時、従来であれば数式でやるのはそれなりに大変だったんですが、Microsoft365ならそうでもないなと思った次第です。

例えば、5×5の枠に1~5の5つの数字を、縦横(斜めは除外)に重複しないようランダムで配置する場合で考えてみましょう。画像の場合なら、縦横の合計は全て「1+2+3+4+5」で「15」になるはずです。また重複を省いた数値の個数は「5」にならないといけません。

とりあえず、「1~5」の数字を横方向にだけ被らないように埋めるのなら簡単です。


=LAMBDA(n,MOD(SEQUENCE(n,n,0),n)+1)(5)

横だけ揃いました。ここから縦も揃える場合は、1行ごとに1個ずつ数字をずらして配置すればいいです。


=LAMBDA(n,TAKE(MOD(SEQUENCE(n,n+1,0),n)+1,,n))(5)

きれいに1個ずつズレましたね。これでひとまず、縦横が揃いました。

あとはこれをランダムに組み替えるだけです。縦横の位置をずらさないようにそれぞれソートをかけます。


=LAMBDA(n,SORTBY(SORTBY(TAKE(MOD(SEQUENCE(n,n+1,0),n)+1,,n), RANDARRAY(n)),RANDARRAY(,n)))(5)

SORTBY関数を縦横別々に2回かけるのがミソですね。

この方法を応用すれば、画像のような当番表をランダムに組み替えることもできますね。


Viewing all articles
Browse latest Browse all 60

Trending Articles