小学校2年生の九九の練習
小学校2年生になると九九を習います。大人になっても使う重要な教養の1つですね。
教え方はいろいろあるとは思いますが、自分で解答して自分で答え合わせが出来る、ランダムな九九の一覧表を作成するマクロを紹介します。マクロだけで完結しておらずExcelの書式設定や関数も利用していますので完成版もダウンロード(後述)できるようにしています。
ランダムな九九の表
九九の表は以下のようなものです。
太字の縦×横の掛け算になっています。上表が記入用、下表が解答です。A4で印刷して上下を真ん中で折って、解答を書いたら自分で答え合わせをできるようにしています。
表にはExcelで書式と関数を埋め込んでいます。太字が掛け算の元値で細字が縦横の掛け算結果で、例えばB2セルには数式「=$A2*B$1」が入力されています。下の表は太字部分も細字部分も上の表を参照しているだけで、例えば太字のA13セルは上のA2セルを参照(=A2)しているだけです。上の表の解答欄は白文字にして見えないようにしています。
印刷範囲外に「番号ランダム打ち換え」とあるのが太字部分の数字を書き換えるマクロを実行するボタンになります。
「番号ランダム打ち換え」ボタンを押す度に太字部分の1~9の並びが変わり、それに合わせて解答欄も書き換わります。あとは印刷して終わりです。
九九のランダム打ち換えマクロ
Excelのフォーマットは出来ている状態なので、あとは九九の数字をランダムにする部分をマクロにします。
関数がいくつかありますが、「番号ランダム打ち換え」ボタンが実行するのは同じ名前の「番号ランダム打ち換え」関数です。
内容はコメントに書いているので考え方だけ説明します。
Excelの九九の表には縦と横の数字があります。この縦と横に設定する数字(1~9)をランダムな並び順で取得して、それを表の縦と横に張り付けています。解答記入欄に縦×横の数式を入れているため、自動計算を行うようにしています。
一般的な1から9までの掛け算の組み合わせを出力するようにしていますが、例えば、4から12までの掛け算の組み合わせを作りたい場合は、69行目の最小値の1を4に書き換え、70行目の最大値の9を12に書き換えると、11×12などの2桁の掛け算を含む九九の表が作成できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
Sub 番号ランダム打ち換え() Dim sRow As String '// 縦用の1~9のランダム値(カンマ区切り) Dim sCol As String '// 横用の1~9のランダム値(カンマ区切り) '// 自動計算オフ Application.Calculation = xlCalculationManual '// 縦用ランダム値取得(例:"1,2,3,4,5,6,7,8,9,") Call GetRandomMultiTable(sRow) '// 横用ランダム値取得(例:"1,2,3,4,5,6,7,8,9,") Call GetRandomMultiTable(sCol) '// 縦用ランダム値を表にセット Call SetValueRow(sRow) '// 横用ランダム値を表にセット Call SetValueCol(sCol) '// 自動計算オン Application.Calculation = xlCalculationAutomatic End Sub '// 引数:の1~9のランダム値(例:"1,2,3,4,5,6,7,8,9,") Sub SetValueRow(s) Dim v As Variant '// 引数をカンマで分割した配列 Dim i As Integer '// ループカウンタ Dim r As Range '// セル '// 引数をカンマで分割して配列化 v = Split(s, ",") '// 基準セルを設定 Set r = Range("A2") '// 1~9をループ For i = 0 To UBound(v) - 1 '// セルに値をセット r.Offset(i, 0).Value = v(i) Next End Sub '// 引数:の1~9のランダム値(例:"1,2,3,4,5,6,7,8,9,") Sub SetValueCol(s) Dim v As Variant '// 引数をカンマで分割した配列 Dim i As Integer '// ループカウンタ Dim r As Range '// セル '// 引数をカンマで分割して配列化 v = Split(s, ",") '// 基準セルを設定 Set r = Range("B1") '// 1~9をループ For i = 0 To UBound(v) - 1 '// セルに値をセット r.Offset(0, i).Value = v(i) Next End Sub Sub GetRandomMultiTable(s) Dim iMin As Integer '// 最小値 Dim iMax As Integer '// 最大値 Dim result As String '// 最小値から最大値の範囲で算出した乱数値 Dim iCount As Integer '// 設定数 '// 最小値を1、最大値を9 iMin = 1 iMax = 9 iCount = 0 '// 疑似乱数列を初期化 Call Randomize Do '// 最小値から最大値の範囲の乱数を取得 result = Int((iMax - iMin + 1) * Rnd + iMin) '// 既に取得済みの場合 If InStr(1, s, result) > 0 Then '// 取得済みのため次の乱数値取得へ GoTo CONTINUE End If '// 取得済みのカウンターを加算 iCount = iCount + 1 '// 引数に乱数値文字をカンマと一緒に連結 s = s & CStr(result) & "," '// 1~9までが全て設定されている場合 If iCount >= 9 Then '// ループを抜ける Exit Do End If CONTINUE: Loop End Sub |
九九表のダウンロード
完成版は「multiplication-table.xlsm」を右クリックしてダウンロードしてください。