📝概要
📥ツールのダウンロード
📘画面構成
💡このツールのポイント
「○より△大きい・小さい」を体感で理解できる
毎回ちがう問題が自動で作られる
正解・不正解がその場でわかる
負の数を「使わずに言い換える」練習ができる
数直線で位置を確認しながら答えを導ける
ボタンひとつで何度でも挑戦できる
💻コード紹介
Excelで「○より△大きい(小さい)数」を自動で作り出す学習ツールです。
毎回ちがう問題ができるので、負の数のしくみをくり返し練習できます。
数直線といっしょに、数の変化を目で見てわかりやすく学べます。
ツールは下記ページからダウンロードすることができます。
なお、ダウンロードページは2026/07/08に公開となっておりますので、
それまでリンクがございません。
noteへ
なお、こちらからダウンロードできるExcelファイルには、ブックの保護とシートの保護をかけています。
ブックの保護を解除し非表示シートを表示したり、
仕組みを見るためにシートの保護を解除する場合は、下記パスワードを使用してください。
パスワード:math1234
負の数を使った“増える・減る”の感覚を、数直線で視覚的に学べるツールです。
数字の変化が目で見えるので、文章だけでは分かりにくい負の数の動きをつかみやすくなります。
Excelがランダムに問題を作るため、何度でも新しい問題に挑戦できます。
反復練習に向いていて、理解の定着を助けます。
入力した答えが正しければ緑、不正解なら赤で表示されます。
自分の考え方が合っているかどうか、すぐに確認できます。
「1より−5大きい数」などの表現を、
負の数を使わずにどう言い換えるかを学べるようになっています。
文章理解と計算の両方を鍛えられる仕組みです。
数直線上に「A」を置くことで、
“どこにある数なのか”を視覚的に確認できます。
計算だけでなく、数の位置関係の理解にもつながります。
「もう一度挑戦する」ボタンで、すぐに新しい問題へ。
短時間でサッと使える、学習しやすい構造になっています。
Option Explicit
Public Const PW As String = "math1234"
Sub makeQes()
'【変数】
'このファイルとシート
Dim wb As Workbook 'このファイル
Dim wsQes As Worksheet '数の大小関係シート
Dim wsSet As Worksheet '設定シート
'操作する数値と文字列
Dim ArrBaseNum() As Long 'ベースナンバーのもととなる数値を格納する配列
Dim ArrNegativeNum() As Long 'アのもととなる数値を格納する配列
Dim ArrLargeSmallNumBase() As Long 'イのもととなる数値化したものを格納する配列
Dim cnt As Long '上記3種類のデータ数
Dim baseNum As Long 'ベースナンバー
Dim negativeNum As Long 'アの負の数
Dim positiveNum As Long 'ウの正の数
Dim largeSmallNumBase As Long 'イを数値化したもの(大きい数:0、小さい数:1)
Dim largeSmallNumReverse As Long 'エを数値化したもの(大きい数:0、小さい数:1)
Dim largeSmallBase As String 'イの文字列
Dim largeSmallReverse As String 'エの文字列
Dim ansNum As Long '解答の数値
'セル
Dim rngBaseNum As Range '数の大小関係シート:ベースナンバー
Dim rngNegetiveNum As Range '数の大小関係シート:アの負の数
Dim rngLargeSmallBase1 As Range '数の大小関係シート:イの大きい数/小さい数
Dim rngPositiveNum As Range '数の大小関係シート:ポジティブナンバー
Dim rngLargeSmallBase2 As Range '数の大小関係シート:大小の数2
Dim rngNumberLine As Range '数の大小関係シート:数直線
Dim rngOutputAns As Range '数の大小関係シート:解答入力欄
Dim rngPosiNum As Range '設定シート :ウの正の数
Dim rngLargeSmallReverse As Range '設定シート :エの大きい数/小さい数
Dim rngAnsNum As Range '設定シート :解答
'乱数
Dim aRnd As Long
'行/列
Dim low As Long '行
Dim col As Long '列
'カウンタ変数
Dim i As Long
Dim j As Long
'【動作】
'動作が速くなるコード
With Application
.ScreenUpdating = False '画面遷移→しない
.EnableEvents = False 'イベントの発生→しない
.Calculation = xlCalculationManual '再計算→手動
.Cursor = xlWait 'カーソル→ウェイト
.DisplayAlerts = False '確認ダイアログボックスの表示→なし
End With
'このファイルとシートを変数格納
Set wb = ThisWorkbook
With wb
Set wsQes = .Sheets("数の大小関係")
Set wsSet = .Sheets("設定")
End With
'数の大小関係シート
With wsQes
'シートを保護する
.Protect Password:=PW, UserInterfaceOnly:=True
'名前付きセルの情報を変数に代入する
Set rngBaseNum = .Range("ベースナンバー")
Set rngNegetiveNum = .Range("ネガティブナンバー")
Set rngLargeSmallBase1 = .Range("大小の数1")
Set rngPositiveNum = .Range("ポジティブナンバー")
Set rngLargeSmallBase2 = .Range("大小の数2")
Set rngNumberLine = .Range("数直線")
Set rngOutputAns = .Range("解答入力欄")
'文字列の情報をクリアする
rngPositiveNum.ClearContents
rngLargeSmallBase2.Value = ""
rngNumberLine.ClearContents
rngOutputAns.ClearContents
End With
'設定シート
With wsSet
Set rngPosiNum = .Range("ウ")
Set rngLargeSmallReverse = .Range("エ")
Set rngAnsNum = .Range("解答")
End With
'配列にベースナンバー、もととなる数値、大きい数/小さい数の全データを格納する
cnt = 0
For i = 1 To 19 'i:ベースナンバー(このiから-10をしたものを配列に格納する)
If i <> 10 Then 'iから-10をしたものを配列に格納するので0は避けたい
For j = 2 To 8
'大きい数
If Abs((i - 10) - j) > 0 And Abs((i - 10) - j) <= 10 Then
ReDim Preserve ArrBaseNum(cnt)
ReDim Preserve ArrNegativeNum(cnt)
ReDim Preserve ArrLargeSmallNumBase(cnt)
ArrBaseNum(cnt) = i - 10 'ベースナンバー
ArrNegativeNum(cnt) = j * (-1) 'もととなる数値
ArrLargeSmallNumBase(cnt) = 0 '大きい数/小さい数を数値化したもの
cnt = cnt + 1
End If
'小さい数
If Abs((i - 10) + j) > 0 And Abs((i - 10) + j) <= 10 Then
ReDim Preserve ArrBaseNum(cnt)
ReDim Preserve ArrNegativeNum(cnt)
ReDim Preserve ArrLargeSmallNumBase(cnt)
ArrBaseNum(cnt) = i - 10 'ベースナンバー
ArrNegativeNum(cnt) = j * (-1) 'もととなる数値
ArrLargeSmallNumBase(cnt) = 1 '大きい数/小さい数を数値化したもの
cnt = cnt + 1
End If
Next j
End If
Next i
cnt = cnt - 1
'上記で作成したものに対し、乱数を発生させ、
'発生させた乱数に対する数値や文字列を変数に代入する
'さらに、セルに値を代入する
'乱数
aRnd = Int(Rnd() * (cnt + 1))
'ベースナンバー
baseNum = ArrBaseNum(aRnd)
rngBaseNum.Value = baseNum
'アの数値(負の数)
negativeNum = ArrNegativeNum(aRnd)
rngNegetiveNum.Value = negativeNum
'イの数値
largeSmallNumBase = ArrLargeSmallNumBase(aRnd)
'イの文字列
If largeSmallNumBase = 0 Then
largeSmallBase = "大きい数"
Else
largeSmallBase = "小さい数"
End If
rngLargeSmallBase1.Value = largeSmallBase
'ウの数値(正の数)
positiveNum = Abs(negativeNum)
rngPosiNum.Value = positiveNum
'エの数値と文字列
If largeSmallNumBase = 0 Then
largeSmallNumReverse = 1
largeSmallReverse = "小さい数"
Else
largeSmallNumReverse = 0
largeSmallReverse = "大きい数"
End If
rngLargeSmallReverse.Value = largeSmallReverse
'解答
If largeSmallNumBase = 0 Then
rngAnsNum.Value = baseNum + negativeNum
Else
rngAnsNum.Value = baseNum - negativeNum
End If
'もとに戻すコード
With Application
.ScreenUpdating = True '画面遷移→する
.EnableEvents = True 'イベントの発生→あり
.Calculation = xlCalculationAutomatic '再計算→自動
.Cursor = xlDefault 'カーソル→動かす
.DisplayAlerts = True '確認ダイアログボックスの表示→あり
End With
wsQes.Activate
wb.Save
MsgBox "出題が完了しました。流れにしたがって作業を進めてください。"
End Sub
① まず、出題に必要なセルを準備する
ツールが使う「ベースの数」「負の数」「大小の向き」「答え欄」などのセルを読み込み、前回の内容をきれいにリセットします。
これで、いつでも新しい問題を作れる状態になります。
② 出題候補となる数の組み合わせをすべて作る
「ベースとなる数(−9〜9の0以外)」と「負の数(−2〜−8)」を組み合わせて、
・大きい数になる場合
・小さい数になる場合
の両方をチェックし、成立する問題だけを配列に保存します。
この段階で“安全な問題リスト”が完成します。
③ ランダムに1問を選び、問題を作る
作成した問題リストの中から、Excelがランダムに1つ選びます。
選ばれた問題から、「ベースナンバー」「負の数(ア)」「大きい/小さい(イ)」
「正の数(ウ)」「反対向き(エ)」「正しい答え」を決定し、シートに反映します。
④ 学習シートに値を書き込み、問題が完成
選ばれた内容が「数の大小関係」シートに書き込まれ、
学習者はそのまま問題に取り組める状態になります。
数直線や答え欄もクリアされているので、毎回まっさらな問題になります。
⑤ Excelの動作を元に戻し、出題完了
画面更新や再計算の設定を通常に戻し、
最後に「出題が完了しました」というメッセージを表示します。