いきなり答える備忘録

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

(Excel)関数を使って抽選をする方法

 EXCELで、関数を使って抽選を行う方法についてです。
 すべての対象者にランダムな順位を与える例と、一定の数の当選者をランダムに決定する例を紹介します。

  • RANDARRAY関数やSORTBY関数などを使って、順位をつける抽選や当選者を決める抽選を行うことができます。

手順

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

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

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

 以下の例ではすべてこのような表を対象として、10人の対象者を対象として各種の抽選を行います。

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

 D3セル

=SORTBY(SEQUENCE(10),RANDARRAY(10))

 SEQUENCE関数により1から10の整数を生成し、RANDARRAY(10)により10個の乱数(0~1)を生成しています。
 そしてSORTBY関数により乱数に基づき並べ替え、整数の方を表示しています。表示される整数が重複することはありません。
 なお、昇順降順の指定は事実上結果に影響しないため省略しています。

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

f:id:accs2014:20200712110632p:plain:w750

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

 D3セル

=SORTBY(IF(SEQUENCE(10)>3,"",SEQUENCE(10)),RANDARRAY(10))

 基本的には上の例と同じですが、3を超える(4以上の)整数については空文字列に変換してからソートしています。
 よって1から3までの数字はどこかに表示されますが、他は空欄(空文字列)となります。

当選者のみに同一の文字列を表示する例

 対象者のうち一定数の者を当選者とし、当選を意味する同一の文字列を表示する例です。
 画像ではD3セルに式を入力することで3人だけを当選者として抽出し、「当選」の文字を表示しています。
 式は次のとおりです。

f:id:accs2014:20200712110637p:plain:w750

 D3セル

=SORTBY(IF(SEQUENCE(10)>3,"","当選"),RANDARRAY(10))

 これも基本的には上の例と同じですが、3を超える(4以上の)整数については空文字列とし、3以下の数字は「当選」の文字列に変換してからソートしています。
 よって「当選」がどこか3か所に表示され、他は空欄(空文字列)となります。

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

すべての対象者をランダムな順位で並べ替えて表示する例

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

f:id:accs2014:20200712110641p:plain:w550

 E3セル

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

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

当選者のみをランダムな順位で並べ替えて表示する例

f:id:accs2014:20200712110645p:plain:w750

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

 E3セル

=FILTER(SORTBY(B3:C12,RANDARRAY(10)),SEQUENCE(10)<=3)

 SORTBY関数の内側は1つの例と同じで、つまり基本的に上の例と同じ方法で抽選しています。
 さらにFILTER関数とSEQUENCE関数を組み合わせることで抽選結果のうち上から3行だけを抽出しています。

当選者のみをIDなどの順番でソートして表示する例

f:id:accs2014:20200712110649p:plain:w750

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

 E3セル

=SORT(FILTER(SORTBY(B3:C12,RANDARRAY(10)),SEQUENCE(10)<=3),1)

 FILTER関数の内側は上記の例と同じで、つまり1つ上の例と同じ方法で3人の当選者を決めています。
 さらにSORT関数を用いて抽選結果を表の1列目、つまり「会員番号」でソートして表示しています。