滝の音

滝の音

名こそ流れてなお聞こえけれ

計算プリントを自動生成する その1 足し算を1問つくろう

はじめに

タイトルの通り「計算プリントを自動生成する」について書きます。
今回は「足し算を1問つくろう」です。 いつもどおりVBAで作ります。

taki-no-oto.hatenablog.com

手順

数字を2つランダムに決める
それらの合計値を求める
計算式を文字列で表す

計算プリントを自動生成する上での肝は3番です。
計算結果を文字列として表現する。
ここがいつまでも付きまとう課題です。

手動でやってみる

手順 具体例
数字を決める 4,9
合計値を求める 13
計算式で表す 4+9=13

手動なら簡単ですよね。
じつは自動でも簡単です笑

自動でやってみる

上の手順を自動で行ってくれる関数を書きました。

Function Int_Addition_Ver1() As String
'----------------------------------
'1ケタの二つの数を定義する
'それらの和を求める
'計算式を文字列にして戻す
'----------------------------------

'----------------------------------
'扱う変数の定義
'----------------------------------
 Dim num1 As Integer    '指定する数値
 Dim num2 As Integer    '指定する数値
 Dim num3 As Integer    '計算結果
 Dim ans As String      'strに戻す値

'----------------------------------
'num1とnum2の定義
'----------------------------------
 num1 = Rnd_Num(1, 9)
 num2 = Rnd_Num(1, 9)
 
'----------------------------------
'num3を求める
'----------------------------------
 num3 = num1 + num2
 
'----------------------------------
'計算式を文字列にする
'----------------------------------
 ans = "a+b=c"
 ans = Replace(ans, "a", num1)
 ans = Replace(ans, "b", num2)
 ans = Replace(ans, "c", num3)
 
'----------------------------------
'文字列を戻す
'----------------------------------
 Int_Addition_Ver1 = ans
End Function

Rnd_Num

自作の関数です。

Function Rnd_Num(ByVal num1, ByVal num2) As Integer
'-------------------------------------------------
'rnd_numの機能
'num1 =< x <= num2 を満たすxをランダムで生成
'-------------------------------------------------

'-----------------------------
'変数の定義
'-----------------------------
 Dim tmp As Integer '数値を入れ替えるための変数
 
'-----------------------------
'num2 < num1の場合の処理
'-----------------------------
 If num2 < num1 Then
    tmp = num1
    num1 = num2
    num2 = tmp
 End If
 
'-------------------------------------------------
'戻り値
'-------------------------------------------------
 Rnd_Num = Int(Rnd() * (num2 - num1 + 1)) + num1
 
End Function

乱数でシンプルにもかけるのですが
数字の範囲を選択できたほうが都合がよいのでこの方式で。

Replace

これはもともと入っている関数です。
文字列の置換に使います。

まとめ

今回は手順を自動化するところまで。
計算問題は作れましたが、まだ表示がされていませんね。

次回は足し算を20問作ります。
ここで表示も扱うので、とりあえずプリントらしきものが生成されます。