目次

マクロデバッグ

 マクロは、プログラムそのものなので
 BASICコードを1行ずつ実行し、前後で
 どんなことがおきているかを観測する
 ことがデバッグになります。

 使うボタンは、以下。




 BASICコードを1行ごとに実行するには
 ステップボタンをクリック。

 ステップボタンは、これ。



 「ステップイン」ボタンと呼ばれます。

 自前の関数や手続きは、内部まで詳細に
 動作をトレースするか、結果だけを必要
 とするかで、使うボタンが異なります。

 内部動作までトレースするときは、次の
 ボタンを使って、ブレークポイントを
 設定します。



 ブレークポイントは、高速動作を中断(ブレーク)
 するときに、どの行かをシステムに伝える役目が
 あります。

 ブレークポイントは、トレースを中断して
 命令実行前後の変数値の差異を見るときや
 条件指定の正否を判断するときに利用。

 結果のみが必要なら、次のボタンを使います。



 「ステップオーバー」ボタンと呼ばれています。

 ブレークポイントを設定しているときと
 そうでないときでは、動作が変わります。

 ブレークポイントを設定している場合
 上のボタンで一気呵成にコードを実行
 しても、中断されてしまいます。

 変数の値を参照したいときには、「メガネ」ボタンを
 クリックした後に、変数名を入力。



 等差数列の値の変化と等差数列の和(等差級数)を
 求める処理を例に、マクロを使ってみます。

 等差数列の一般項と等差級数の式は以下。




 変数n、初項a、公差dを与えると、第n項目が
 計算され級数がわかるよう、マクロを作成します。

 変数n、初項a、公差dの値は、セルに格納しますが
 絶対指定でセルを参照します。

 変数n、初項a、公差dが与えられたときに、一般項と級数を
 求めるには、次のBasicコードを適用。

  Dim objS As Object
  Dim n   As Integer
  Dim d   As Integer
  Dim sum As Integer
  Dim i   As Integer
  Dim a0  As Integer
  Dim a   As Integer
  '
  ' get Values from worksheet cells
  '
  ' LibreOffice Calc
  objS = ThisComponent.CurrentController.ActiveSheet
  a0 = objS.getCellRangeByName("B2").Value
  d  = objS.getCellRangeByName("B3").Value
  n  = objS.getCellRangeByName("B4").Value
  ' Microsoft Excel
  ' a0 = Range("B2").Value
  ' d  = Range("B3").Value
  ' n  = Range("B4").Value
  '

  ' calculate
  '
  sum = 0 
  for i = 1 to n
    a = a0 + (i-1) * d
    sum = sum + a
  next i
  ' store
  ' LibreOffice Calc
  objS.getCellRangeByName("D2").Value  = a
  objS.getCellRangeByName("D3").Value  = sum
  ' Microsoft Excel
  'Range("D2").Value = a
  'Range("D3").Value = sum

 セルは、次のように使います。



 B列には、パラメータを入力し、マクロで
 計算した後、D列に結果を格納。

 マクロを動かすには、パラメータ入力後に
 トリガーを与えなければなりません。

 マクロの実行は、spreadsheetにより異なります。

 LibreOfficeのCalcでは、「ツール」の中にある
 「マクロ実行」を選択。



 さらに実行するマクロを選びます。



 「実行」をクリックすると、結果が表示されます。



 どんな計算になっているのかを、1ステップごとに
 実行して確認するには、次のように操作します。

 LibreOfficeのCalcでは、「ツール」の中にある
 「マクロ管理」を選択。

 操作は、次のようになります。





 値を確認したい変数は、「オブザーバー」の右の欄に
 入力していけば、必要な数だけ並べられます。



 「ステップイン」のボタンをクリックしていくと
 「オブザーバー」で指定して変数がステートメント
 実行で、どうなるのかを示してくれます。



 マクロの実行を途中で放棄するには、「■」をクリック。



 このマクロでは、D列をクリアする処理が欠けているので
 次の2行を入れておきます。

  '
  ' LibreOffice Calc
  objS.getCellRangeByName("D2").Value = 0
  objS.getCellRangeByName("D3").Value = 0
  ' Microsoft Excel
  ' Range("D2").Value = 0 
  ' Range("D3").Value = 0 

 ExcelとCalcでは、ステップ動作でモニタする
 変数表示に違いがあります。

 Excelでは、以前に指定した変数名ほど、下に配置。
 Calcでは、以前に指定した変数名ほど、上に配置。


目次

inserted by FC2 system