100マス計算3年割算編問題作成ワークシート
3年生の割算では、はじめは被除数の十の位が除数よりも小さいパターンを学び、次にそのような制限が ない割算に進むようです。そこで、このファイルでは両方のパターンの問題が作成できるように、ワークシートを 分けてあります。制限のない場合は次のような問題表示になります。

100マス計算割算問題作成シート
被除数の十の位が除数よりも小さいパターンは次のようになります。

被除数の制限あり
問題作成自体は関数をセルに設定することでできるのですが、解答の表示・非表示を
切り替えようとするならば、BASICで操作することになります。
セルに設定する関数は、
C2セルの被除数の生成は、=ROUNDDOWN((RAND())*80+10,0)
E2セルの除数の生成は、制限付きの場合は
=ROUND(RAND()*ROUNDDOWN((99-C2)/20,0)+ROUNDDOWN((C2)/10,0)+1,0)
制限なしの場合は
=ROUNDDOWN(RAND()*7.5+2,0)
G2セルの解答(商と余り)の生成は、
=FIXED(INT(C2/E2),0)&" ・・・ "&FIXED(MOD(C2,E2),0)
といった感じでしょうか。
あとは生徒への配布のためには解答を非表示にして印刷することになります。その処理は表の下部に
ボタンを用意して切り替えるようにしています。ボタンそれぞれには、Sub ChangeWhiteChar (文字色白)と
Sub ChangeBlackChar (文字色黒)を割り当てています。また、異なる問題を生成できるように再作成ボタン
でSub recalc を呼び出し、シートの再計算を行うことで異なる問題を生成します。
Sub ChangeWhiteChar、Sub ChangeBlackChar、Sub recalc は以下に示します。
またCalcのファイルも掲載しておきます。
100マス割り算 LibreOffice Calcファイル 100DivQuiz.ods
' by Kom. 2013
Sub ChangeWhiteChar
Dim oDoc as Object, oCtrl as Object
Dim oDispatcher as Object
dim oProp(0) as new com.sun.star.beans.PropertyValue
Dim oSheet as Object
Dim oSelRange as Object
oDoc = ThisComponent.CurrentController.Frame
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
'自動更新をOFF
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper") '
oProp(0).Name = "AutomaticCalculation"
oProp(0).Value = false ' ON : true / OFF : false
oDispatcher.executeDispatch(oDoc, ".uno:AutomaticCalculation", "", 0, oProp())
'Active Sheetを取得
oSheet = ThisComponent.CurrentController.ActiveSheet
'G,M,S,Y=6,12,18,24
ThisComponent.addActionLock() ' 処理速度改善のため画面更新抑制
for i=6 to 24 step 6 'G,M,S,Y列に対して色変更
oSelRange = oSheet.getColumns().getByIndex(i)
oSelRange.CharColor = RGB( 255, 255, 255 )
next i
ThisComponent.removeActionLock() ' 画面更新抑制解除
End Sub
Sub ChangeBlackChar
Dim oDoc as Object, oCtrl as Object
Dim oDispatcher as Object
'Dim oProp(0) as new com.sun.star.beans.PropertyValue
dim oProp(0) as new com.sun.star.beans.PropertyValue
Dim oSheet as Object
Dim oSelRange as Object
oDoc = ThisComponent.CurrentController.Frame
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
'自動更新をOFF
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper") '
oProp(0).Name = "AutomaticCalculation"
oProp(0).Value = false ' OFF : false
oDispatcher.executeDispatch(oDoc, ".uno:AutomaticCalculation", "", 0, oProp())
'G,M,S,Y=6,12,18,24
'Active Sheetを取得
oSheet = ThisComponent.CurrentController.ActiveSheet
ThisComponent.addActionLock() ' 処理速度改善のため画面更新抑制
for i=6 to 24 step 6 'G,M,S,Y列に対して色変更
oSelRange = oSheet.getColumns().getByIndex(i)
oSelRange.CharColor = RGB( 0, 0, 0 ) '黒色
next i
ThisComponent.removeActionLock() ' 画面更新抑制解除
End Sub
Sub recalc
dim oDoc as object
dim dispatcher as object
dim oProp(0) as new com.sun.star.beans.PropertyValue
oDoc = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(oDoc, ".uno:Calculate", "", 0, oProp())
setAutoRecalc
End Sub
Sub setAutoRecalc
'自動計算ON
Dim oDoc as Object, oCtrl as Object
Dim oDispatcher as Object
dim oProp(0) as new com.sun.star.beans.PropertyValue
oDoc = ThisComponent.CurrentController.Frame
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper") '
oProp(0).Name = "AutomaticCalculation"
oProp(0).Value = true
oDispatcher.executeDispatch(oDoc, ".uno:AutomaticCalculation", "", 0, oProp())
End Sub
OpenOfficeマクロプログラミング―「Writer」「Calc」「Base」…OOoをBasicで便利に! (I・O BOOKS)
