100マス計算3年割算編問題作成ワークシート
3年生の割算では、はじめは被除数の十の位が除数よりも小さいパターンを学び、次にそのような制限が ない割算に進むようです。そこで、このファイルでは両方のパターンの問題が作成できるように、ワークシートを 分けてあります。制限のない場合は次のような問題表示になります。
被除数の十の位が除数よりも小さいパターンは次のようになります。
問題作成自体は関数をセルに設定することでできるのですが、解答の表示・非表示を
切り替えようとするならば、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)