目次
前
次
数列での活用
数列は、数字の羅列になっています。
規則性を持った数字の羅列には、どんな
性質があるのかを見てみます。
初項1、公差2、項数128の等差数列を
作って、グラフを描いてみます。
マクロを使わないで実現すると、次の操作を
すればよいでしょう。
- セルB2に、1を設定
- セルB3に、数式「B2+1」を設定
- セルB3の内容をセルB4からB129にコピー
- セルC2に、初項1を設定
- セルC3に、数式「C2+2」を設定
- セルC3の内容をセルC4からC129にコピー
- B列をx軸、C列をy軸として、折れ線グラフ描画
- B列をx軸、C列をy軸として、積重ねグラフ描画
画面は、以下のようになります。
これは、等差数列の例ですが、グラフで
見ると、直線を描く式を扱っているとの
理解ができます。
初項、公差を変えて、グラフ描画すると
どうなるのかを、マクロで実験してみる
としましょう。
パラメータは、初項、公差なので、この
2パラメータを格納するセルを決めて
おきます。
初項 $B$1
公差 $C$1
セルを絶対指定するので、行と列の前に$を付加。
等差数列を求めるセルは、C列になっているので
次のように式を書いて格納。
C2 // =$B$1
C3 // =C2+$C$1
変化させるのは、初項、公差だけなので
C2には、$B$1を絶対指定します。
漸化式の方は、公差だけを絶対指定。
マクロで再計算させるためには、セル$B$1、$C$1に
格納する値を利用し、計算式をコピーするのが簡単。
項数を指定すれば、一般項の計算式を利用して
計算結果をC列に格納するだけになります。
ワークシートで各値を入力するセルを指定。
各値を格納するセル位置を次のように決めます。
等差数列の一般項は、次式で導けます。
第2項、第3項がどういう値になるのかを
計算するのは、マクロの役目。
マクロは、次のようにまとめられます。
Dim objS As Object
Dim a1 As Integer
Dim d As Integer
Dim n As Integer
Dim i As Integer
Dim a As Integer
'
' get Values from worksheet cells
'
' LibreOffice Calc
objS = ThisComponent.CurrentController.ActiveSheet
a1 = objS.getCellRangeByName("B1").Value
d = objS.getCellRangeByName("C1").Value
n = objS.getCellRangeByName("E1").Value
' calculate
'
a = a1
for i = 1 to n
a = a + d
next i
' store
objS.getCellRangeByName("C2").Value = a
このマクロでは、結果を$C$2に格納するとしています。
使ってみると、以下となります。
等比数列を扱ってみます。
等比数列は、等差数列の公差を、公比にかえて
加算を乗算に変えたと考えます。
差が比になるだけなので、マクロでは記号が
「+」から「*」になるだけ。
Dim objS As Object
Dim a1 As Integer
Dim r As Integer
Dim n As Integer
Dim i As Integer
Dim a As Integer
'
' get Values from worksheet cells
'
' LibreOffice Calc
objS = ThisComponent.CurrentController.ActiveSheet
a1 = objS.getCellRangeByName("B1").Value
r = objS.getCellRangeByName("C1").Value
n = objS.getCellRangeByName("E1").Value
' calculate
'
a = a1
for i = 1 to n
a = a * r
next i
' store
objS.getCellRangeByName("C2").Value = a
ただし、これだけでは、不十分です。
初項、公比が0では、何も起きないので
0でない値を入れるように、チェックを
入れます。
初項、公比を入力したなら、ともに0でないことを
確認してから、計算します。
Dim objS As Object
Dim a1 As Integer
Dim r As Integer
Dim n As Integer
Dim i As Integer
Dim a As Integer
'
' get Values from worksheet cells
'
' LibreOffice Calc
objS = ThisComponent.CurrentController.ActiveSheet
a1 = objS.getCellRangeByName("B1").Value
r = objS.getCellRangeByName("C1").Value
n = objS.getCellRangeByName("E1").Value
' check
i = a1 * r
if i = 0 then
' send error message
MsgBox("parameters must be not zero !")
else
' calculate
'
a = a1
for i = 1 to n
a = a * r
next i
' store
objS.getCellRangeByName("C2").Value = a
end if
等比数列の場合、初項、公比は浮動小数点をもつ数値で
あることも多く、変数宣言でfloatを指定して対応する
こともあります。
初項、公比を与えて、マクロで計算させてみます。
問題なく、計算できました。
初項か公比を0にしてみると、メッセージが出ます。
初項を0にしたときは、以下。
マクロを実行するときに、メッセージボックスを使い
不適切なパラメータ指定をしていることへ警告を出す
ことも可能と覚えておくと、余計な神経を使わないで
済みます。
目次
前
次