用EXECEL的VBE编写小学混合加减法自动习题集

     用EXECEL的VBE编写小学混合加减法自动习题集

  虽然不用VBE也能够只用EXECEL表格做出加减法自动习题。但是有一个弊端,只要在表格任意单元格上按了回车键,或者退格键,整个表格都会刷新,因此根本不适合在电脑上答题,而只能把表格打印出来手填答题。

    因此,考虑用VBE编写一个。

    对于小学一年级的小朋友来说,要限制在20以内的加减法运算,因此程序上要做一定的边界值判断。别的不多说了,先上图。

用EXECEL的VBE编写小学混合加减法自动习题集

上图中只有I列要写算法表达式,J列则要把字体设置成白色(上图为了给大家查看方便,是设置成了黑色).其它各列都不用做任何修改。

以第3行为例,I列的算法表达式为:=IF(H3="","?",IF(H3=J3,"正确","不对")),意思很明显,就不解释了。

完成以上工作之后,打开VB控件,选择“按钮”控件。把标题改为“出题"(见上图).

然后在VBE的编程界面,输入如下代码:

Private Sub CommandButton1_Click()
Dim a1 As Integer, a2 As Integer, a3 As Integer, a4 As Integer, a5 As Integer
Dim b1 As Integer, b2 As String, b3 As Integer, b4 As String
Randomize '对随机数生成器做初始化
Range("H3:H23") = "" '先清除以前的结果.循环5次,所以这里是H3:H7
n = 20 '设定计算结果在这个值以内
For i = 1 To 20 '一次出20道题
a1 = Int(Rnd() * (n - 10)) + 1 + 9 '生成1至N的整数
 
b1 = Int(Rnd() * 2) + 1 '生成1到2的整数,对应加减乘除符号
If a1 < 10 Then b1 = 1  '+
If a1 > (n - 2) Then b1 = 2
10:
 a2 = Int(Rnd() * n) + 1 '生成1至n的整数
'下面是求值过程,如果值大于n,就返回上面第10语句行重新取数
'加法
If b1 = 1 Then b2 = "+": a2 = Int(Rnd() * (n - a1)) + 1: a3 = a1 + a2:
'减法
If b1 = 2 Then b2 = "-": If a1 > a2 Then a3 = a1 - a2
'避免计算结果为负数
If a2 > a1 Then t = a1: a1 = a2: a2 = t: a3 = a1 - a2 'A3保存中间计算结果
b3 = Int(Rnd() * 2) + 1
If a3 < 10 Then b3 = 1:
If a3 > (n - 2) Then b3 = 2:

20:
 a4 = Int(Rnd() * n) + 1 '生成1至n的整数
'下面是求值过程,如果值大于n,就返回上面第20语句行重新取数
'加法
If b3 = 1 Then b4 = "+": a4 = Int(Rnd() * (n - a3)) + 1: a5 = a3 + a4:
'减法
If b3 = 2 Then b4 = "-": a4 = Int(Rnd() * a3) + 1: a5 = a3 - a4:
'避免计算结果为负数
'显示到表格中
Cells(i + 2, 1) = i: Cells(i + 2, 2) = a1: Cells(i + 2, 3) = b2: Cells(i + 2, 4) = a2: Cells(i + 2, 5) = b4: Cells(i + 2, 6) = a4: Cells(i + 2, 7) = "=" '列出算式
'写入答案到第10列中,即J列中。
Cells(i + 2, 10) = a5
Next
End Sub

点击保存.这个小工具就做好了.