[半保護]  このページは半保護の方針に基づき、非ログインユーザー・新規利用者の編集が制限されています。一時解除を含めた解除等の対応については「半保護の方針」を参照ください。

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

参考URL

このページ「OpenOffice.org Calc Basic」は、まだ書きかけです。加筆・訂正など、協力いただける皆様の編集を心からお待ちしております。また、ご意見などがありましたら、お気軽にトークページへどうぞ。