ビンゴカードの仕様
ビンゴ - Wikipedia の記事 を参考にするとビンゴカードは以下の仕様を満たす必要があります。
- 5x5マスのカード
- 現れる数字の範囲は1~75
- 列によって番号の範囲が設定されている
列番号 | 第1列 | 第2列 | 第3列 | 第4列 | 第5列 |
---|---|---|---|---|---|
番号の範囲 | 1-15 | 16-30 | 31-45 | 46-60 | 61-75 |
ワークシートの数式
方針としては、15個のランダムに並べられた数列を5列用意して、そこから5行切り出すことで1枚のビンゴカードを作成します。
重複のない乱数列を作る方法の定番としては、RAND
を並べたセル範囲に対してRANK
を使って各セルの順位を計算する方法があります。
しかし今回はCHOOSECOLS
を使って、取り出した配列に対して、順位を計算させたいため、セル範囲を引数にとるRANK
は使えません。
代わりにSUM
と不等号計算を用いて順位を求める方法を使います。
[A1]5行15列の乱数マトリクス
=MAKEARRAY(15, 5, LAMBDA(r, c, RAND()))
[G1]列ごとにランク付けして、列ごとにオフセットを加算する
=LET(
nrow, ROWS(A1#),
ncol, COLUMNS(A1#),
MAKEARRAY(
nrow,
ncol,
LAMBDA(row_i, col_i,
LET(
ary, CHOOSECOLS(
A1#,
col_i
),
x, OFFSET(
A1,
row_i - 1,
col_i - 1
),
SUM((ary > x) * 1) + 1
)
)
) + {0, 15, 30, 45, 60}
)
[M1]5行5列を切り抜いて、真ん中をFREEスポットにする
=MAKEARRAY(
5,
5,
LAMBDA(r, c,
IF(
r & c = "33",
"FREE",
OFFSET(G1, r - 1, c - 1)
)
)
)