いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

(Gスプレッドシート)関数を使って抽選する

 Googleスプレッドシートで関数を使って抽選を行う方法、つまり多数の対象者からランダムに抽出を行う方法についてです。
 すべての対象者にランダムな順位を与える例と、一定数の当選者をランダムに決定する例を示します。

  • RANDARRAY関数やSORT関数などを使って抽選を行うことができます。

手順

関数を使わない抽選について

 まずは注意点です。スプレッドシートには「範囲をランダム化」という、データをランダムに並べ替えるメニューが用意されてます。
 次の記事で実例を紹介しています。たいていの抽選はこれで対応できますので、まずはご検討ください。

www.officeisyours.com

対象データの確認

f:id:accs2014:20200711104705p:plain:right:w450

 以下の例ではこのような表を対象として、10人の対象者を対象として各種の抽選を行います。
 「会員番号」や「氏名」の値、記録されている行番号などが抽選結果(当たり外れ)に影響しないよう、乱数のみに頼る抽選方法をとるものとします。

抽選結果を元の表の横に表示する場合

すべての対象者にランダムな順番を表示する例

f:id:accs2014:20200711104709p:plain:right:w450

 当選・落選の区別なく、すべての対象者にランダムな順番を与える例です。
 画像ではD3セルに式を入力することで結果を表示しています。
 式の内容は次のとおりです。

 D3セル

=SORT(SEQUENCE(10),RANDARRAY(10),)

 SEQUENCE関数で1から10の整数を生成し、RANDARRAY(10)で10個の乱数(0~1)を生成しています。
 そしてSORT関数により乱数に基づき並べ替え、整数の方だけを表示しています。
 万一RANDARRAY関数の値が重複することがあったとしても(かなり稀と考えられますが)、表示される整数が重複することはありません。
 なお最後のカンマは省略できません。これは昇順降順の明示が無意味なためSORT関数の第3引数を省略しているものの、カンマは省略できないためです。このとき第3引数はFALSEつまり降順とみなされます。

 また、結果は随時変化します。一定の結果として保存するときは値にして貼り付け(「特殊貼り付け」→「値のみ貼り付け」)を行ってください。以下の例でも同様です。

当選者のみにランダムな順番を表示する例

f:id:accs2014:20200711104714p:plain:right:w450

 一定の当選者数を定めて抽選し、当選者に対しては1から当選者数までの番号をランダムに与える例です。
 画像ではD3セルに式を入力することで3人だけを当選者として抽出し、ランダムに1から3の順番を与えています。
 式は次のとおりです。

 D3セル

=SORT(IF(SEQUENCE(10)<=3,SEQUENCE(10),""),RANDARRAY(10),)

 基本的には上記の例と同じですが、SEQUENCE関数で生成された整数のうち4以上のものを空文字列に置き換えたうえで並べ替えを行っています。

当選者のみに当選を意味する文字列を表示する例

 一定の当選者数を定めて抽選し、当選者に対しては当選を表す記号(文字列)だけを表示する例です。
 画像ではD3セルに式を入力することで3人だけを当選者として抽出し、「当」の文字を表示させています。

f:id:accs2014:20200711104718p:plain:right:w450

 D3セル

=SORT(IF(SEQUENCE(10)<=3,"当",""),RANDARRAY(10),)

 これも上記の例とほぼ同様です。SEQUENCE関数で生成された整数のうち3以下のものを「当」の文字に、4以上のものを空文字列に置き換えたうえで並べ替えを行っています。

抽選結果を別の表として表示する場合

すべての対象者をランダムに並べ替える例

f:id:accs2014:20200711104722p:plain:right:w550

 当選・落選の区別なく、すべての対象者をランダムに並べ替える例です。
 画像ではE3セルに式を入力することで結果を表示しています。
 式の内容は次のとおりです。

 E3セル

=SORT(B3:C12,RANDARRAY(10),)

 RANDARRAY関数により生成された10個の乱数をキーとして表全体を並べ替えています。

当選者のみをランダムな順番で表示する例

f:id:accs2014:20200711104726p:plain:right:w550

 一定の当選者数を定めて抽選し、当選者だけを表示する例です。ただし表示される順番はランダムとします。
 画像ではE3セルに式を入力することで3人だけを当選者として抽出して表示しています。
 式は次のとおりです。

 E3セル

=SORTN(B3:C12,3,0,RANDARRAY(10),)

 抽出される行数を絞り込むためSORTN関数を用いています。
 第2引数の「3」で抽出する行数(当選者数)を設定しています。
 また、第3引数の「0」により、万一乱数が重複しても必ず3行だけを抽出することを保証しています(同一順位の抽出モード)。

当選者をIDなどによりソートする例

f:id:accs2014:20200711104730p:plain:right:w550

 一定の当選者数を定めて抽選し、当選者だけを表示する例です。ただし元の表に含まれる値に基づきソートして表示させるものとします。
 画像ではE3セルに式を入力することで3人だけを当選者として抽出し、「会員番号」をキーとして昇順で表示させています。
 式は次のとおりです。

 E3セル

=SORT(SORTN(B3:C12,3,0,RANDARRAY(10),),1,TRUE)

 内側のSORTN関数の内容は上記の例と同じです。
 これをさらにSORT関数で囲み第2引数(並べ替えキー列)で「1」と指定することにより、並べ替え対象の1列目(B列の値に相当します)に基づき昇順でソートしています。
 SORTN関数の出力をSORT関数で再度並べ替えているわけですが、SORTN関数の出力はもはや実表(シート上に見える表)ではないため、並べ替えキーを「B3:B10」といったようには指定できません。そこで列番号により指定しています。