電卓問題

教材

シンプルな同じ桁数の電卓問題

今回は電卓やパソコン入力練習用の計算問題を作成します。

四則演算で使用したRANDBETWEEN関数を利用して、今回も問題が自動で作成されるようにします。

5桁の数の足し算問題

まずはシンプルに10個の5桁の数の足し算の問題を作ります。

改めてRANDBETWEEN関数の使い方を確認します。

RANDBETWEEN関数は、指定した数字の範囲内で整数の乱数を発生させる関数でしたね。

例えば、指定したセル(ここでは「D1」セル)に1~100の間の数字を自動で一つ表示したいときは、「D1」セルに「=RANDBETWEEN(1,100)」と入力すると1~100の間の整数を一つ表示します。

RANDBETWEEN関数
指定した範囲内のランダムな整数を返します

今回は5桁の数の足し算の問題を作りたいので、「B1」セル~「B10」セルに「=RANDBETWEEN(10000,99999)」と入力します。

RANDBETWEEN(10000,99999)を10個作ります
RANDBETWEEN(10000,99999)を10個作ります

これを10個並べれば問題自体は完成ですが、答え合わせのために答えを計算しておきましょう。

合計を表示するにはSUM関数を使用します。SUM関数は数値の合計を計算してくれます。

「=SUM(1,2,3)」と入力すれば1+2+3の結果が出ます。今回のように合計したいセルが並んでいれば、「=SUM(B1:B10)」のように範囲での指定が可能です。

SUM関数で答えを計算します
SUM関数で答えを計算します

もし患者さんに答えを提示したくないようであれば、答えの文字の色を白くして見えなくしちゃいましょう。

あとはこれを5,6問コピーして体裁を整えれば、ちょうどA4用紙一枚くらいになります。

完成図
完成図。A4サイズです。

フォントサイズは26ptで列、行の幅を適当に整えるとこんな感じになります。

桁数を簡単に変えられるようにします

これでも使えますが、桁数を変えたいときに一つ一つのセルを編集するのは大変です。

そこで、四則演算でも行ったように、RANDBETWEEN関数の範囲を、そとのセルで管理しましょう。

ここでは「P2」セルに最小値を、「Q2」セルに最大値を設定します。これをRANDBETWEEN関数が参照するようにします。

先ほどはRANDBETWEEN(10000,99999)と最小値、最大値を直書きしましたが、今度は「=RANDBETWEEN($P$2,$Q$2)」と最小値のところに「P2」セルを、最大値のところに「Q2」セルを指定します。

列番号、行番号の前に「$」マークがついているのは、コピー&ペーストして複製したときにも必ず指定した列、行のセルを読みに行きなさいという意味です(詳しく知りたい方は「絶対参照」で調べてみてください)。

RANDBETWEEN関数の範囲を外のセルで設定します
RANDBETWEEN関数の範囲を外のセルで設定します

これで、「P2」セル、「Q2」セルの数値を変えれば、一括で問題の桁数を変えられるようになりました。

異なる桁数の数が混じった問題を作りたい

さて、ここまでは同じ桁数の数を並べてきました。次は異なる桁数の数がある程度まんべんなく混じるようにしてみます。

仮に、先ほど範囲指定した「P2」セル(最小値)に「1」、「Q2」セル(最大値)に「99999」を入れると、1~99999の中から1つ数字が選ばれるので、もちろん一桁や二桁の数も混じります。

ただ、これでは一桁の数は1~9の9個、二桁の数は10~99の90個しかないのに対し、五桁の数は10000~99999と9万個あるので、ほぼ五桁の数になります。

そこでひと工夫。

いくつかの「範囲」を作っておき、ランダムにその「範囲」を選択するようにしてみます。

そのためには少しややこしいのですが、便利な関数、VLOOKUP関数を使用します。

VLOOKUP関数

VLOOKUP関数は、指定した範囲(一覧表)から検索したいキーに対応する値を拾ってくれる関数です。

まずは、次のような一覧表を作成します。

RANDBETWEEN関数の範囲の一覧表
RANDBETWEEN関数の範囲の一覧表

この表から、例えばNo2を指定したら、No2の最小値・最大値を、No3を指定したらNo3の最小値・最大値を拾ってくるようにしたいです。そこでVLOOKUP関数を使用します。説明より使ってみましょう。

VLOOKUP関数で指定したNoの最小値・最大値の値を拾います
VLOOKUP関数で指定したNoの最小値・最大値の値を拾います

「A2」セルに検索したい「No」を入力します。「B2」セルに「=VLOOKUP(A2,E1:G4,2,FALSE)」と入力します。これは「左上E1セル~右下G4セルの表の一番左端の列(No列)を上から検索していき、検索したい値A2完全一致した行の2列目(E列から1列目、2列目・・・と数えます)を返します。」の意味になります。VLOOKUP関数では指定した表の一番左端の列を検索するので、左端に検索用のキー列を作ります。

さて、これで検索したいNoを指定すると、その範囲(最小値、最大値)を拾うことができるようになりました。

一覧表から範囲をランダムに拾って数字を作ります

では、改めて、計算問題の作成に戻ります。

少しややこしいので先に作ってしまいましょう。

まず次のような数値の範囲を指定する表を作ります。

RANDBETWEEN関数の範囲の一覧表
RANDBETWEEN関数の範囲の一覧表です

次に、ひとつひとつのRANDBETWEEN関数の「範囲」をこの表からランダムに選べるようにします。

そのために先ほど5桁の数字を表示させたB列の隣の空白のC列に「=RANDBETWEEN(1,5)」と入力します。

空白の列に範囲を指定するRANDBETWEEN関数を入力します
空白の列に範囲を指定するRANDBETWEEN関数を入力します

そして、「B1」セルには「=RANDBETWEEN(VLOOKUP(C1,$P$1:$R$6,2,FALSE),VLOOKUP(C1,$P$1:$R$6,3,FALSE))」と入力します。青字が最小値緑字が最大値です。C列に表示されたNoを元に一覧表から最小値、最大値を拾っています。C列は文字を白にすれば見えなくなります。

これをコピーして体裁を整えれば完成です。

範囲の表は、

範囲の一覧表の一例です
範囲の一覧表の一例です

このようにすれば、確率的には4桁が8個、5桁が2個くらいになるはずです。

マイナスも入れられます
もちろんマイナスも入れられます

このようにすれば、マイナスも組み込めます。

※注意点:最初がマイナスになることもあるので、マイナスにしたくなければ、一行目の範囲の指定セル(例えば「C1」セル)は「=RANDBETWEEN(1,5)」ではなく「5」とかに固定してしまうのもよいかと思います。

完成図です。
完成図です。

お疲れさまでした。

<2022.11.24追記>
サンプルファイルを載せました。こちらからダウンロードしてください。