OpenOffice.org Calc Basic
OpenOffice.org Basic > OpenOffice.org Calc Basic
OpenOffice.org 表計算ソフト Calc での Basic を使ったマクロの解説。
セル内で使用する関数の定義
関数の定義の仕方
予約語 'Function' を用いて定義した関数は、ワークシート内で数式関数としても利用可能である。
このため、下記の様に、マクロで関数を定義した場合、ワークシート内では '=SUM(A1:F1)' などと同様、 '=HelloWorld()' などとして利用できる。
Function HelloWorld ()
print "Hello World!"
End Function
引数の与え方と受け取る値
引数は、数値、文字列、単体セル、範囲などの形式で与えることができる。
'=foo(12)' では数値、 '=foo("Hello")' では文字列、 '=foo(A1)'では、セルA1 の値、 '=foo(A1:F1)'では、A1からF1までの各セルの値からなる2次元の配列が渡される。
これを表にまとめると、以下のようになる。
呼び出し方 | 受け取る値 |
---|---|
=foo(123) | 数値 |
=foo("Hello") | 文字列 |
=foo(A1) | セル'A1'の値。 |
=foo(A1:F1) | A1からF1までの各セルの値からなる2次元配列。添字は1から始まる。 |
数値
シート内で、'=foo(12)' などとして数値を受け取ると、 関数定義での引数の型指定を省いた場合、'Double' として扱われる。 また、'Long'、'Integer' など、引数に対する型宣言を伴った関数定義をした場合には、宣言通りの型として値が受け渡される。
文字列
シート内で、'=foo("文字列")' などとして値を受け取ると、 関数定義での引数の型指定を省いた場合、'String' として扱われる。
セル単体
シート内で、'=foo(A1)'などとして値を受け取ると、 関数定義での引数の型指定を省いた場合、 セルA1の値が数値であれば 'Double'、文字列であれば 'String' として受け渡される。 また、Long や Integer など、型指定をした上での受け取りも可能である。
範囲
シート内で、'=foo(A1:F1)' などと、範囲を指定する場合、 範囲内のセルの値が展開され、1からの数を添字とする2次元配列として受け渡される (OpenOffice.org 1.1.3)。 このため、範囲 'A1:F2' は2行6列の配列となり、 セル'A1'の値は、配列(1, 1)へ、セル'F2'の値は、配列(2, 6)に格納される。
下記に、'=foo(A1:F1)' などとして使用し、各セルの値を出力するプログラムを記載する。
FUNCTION Foo(C)
DIM rows AS LONG
DIM cols AS LONG
DIM i AS LONG, j AS LONG
rows = UBound(C(), 1)
cols = UBound(C(), 2)
FOR i = 1 TO rows
FOR j = 1 TO cols
PRINT C(i, j)
NEXT j
NEXT i
END FUNCTION
セルの値にアクセスする方法
getCellByPosition(x, y) または getCellRangeByName("aCellName") を用いることが出来る。
Dim Sheet As Object
Sheet = ThisComponent.Sheets(0)
Sheet.getCellByPosition(0, 0).String = "文字列"
Sheet.getCellRangeByName("A1").Value = 3.14
OpenOffice.org APIリファレンス getCellByName getCellByPosition