「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:1700
現在:2


数学関数の書き方

ページOpenOffice.org FAQの登録ページ
投稿者S-Osaka
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2010-09-11 12:04:53 (土)
OSwin vista
依存するページfaq/5/306
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

例えば・・、 workseetfunction.max(a,b)
max(a,b)
max(range( : ))
のような使い方の書き方はどうすればよいのでしょう?
またマクロで使える数学関数の一覧や使用例の一覧などはないのでしょうか?
一部の関数は見つけましたが、いろいろ試しても使い方がわかりません。
また、マクロで使える数学関数と表計算で使える数学関数は違うのでしょうか?
表計算で使う関数をマクロで使うことはできるのでしょうか?
書籍でも構いませんから参考資料を紹介してください。
よろしくお願いします。

追)
今 Option VBASupport 1 でやっていますが直接使いたいです。


シート関数

ike@九州 (2010-09-11 13:30:39 (土))

はにゃ?さんの処に記述があります
http://hermione.s41.xrea.com/pukiwiki/index.php?OOoBasic%2FGeneric%2Ffunction

問題はパラメータの渡し方ですよね
現状自己開拓しかないです
MAX( Sheet1.A1:A10 ) の場合

Sub Test
 Dim aArgs(0) As Variant
 oSheet = ThisComponent.getSheets().getByName( "Sheet1" )
 oRange = oSheet.getCellRangeByName( "A1:A10" )
 oProcessServiceManager = GetProcessServiceManager()
 oFunctionAccess = oProcessServiceManager.createInstance( _
     "com.sun.star.sheet.FunctionAccess" )
 
 sFunction = "MAX"
 aArgs(0) = oRange
 aResult = oFunctionAccess.callFunction( sFunction, aArgs() )
 print aResult
End sub

ないのですか?

S-Osaka (2010-09-11 13:58:53 (土))

いつもお世話になります。
事情が飲み込めないので初歩的なことがわかってないのですが・・・、
MaxとかCountと言った関数はcalcのマクロにはないという意味でしょうか?
この程度の処理なら条件文でかけると思いますが複雑な関数は使えないと言う意味でしょうか?
教えていただいたようなサンプルはいくつか見つけたのですが、上の例のようにrengeで指定した部分の計算ばかりですね。
変数a,b,cもしくはrengeでくくれない複数セルの比較はできないと言うことでしょうか?
よろしければ教えてください。

ありません

ike@九州 (2010-09-11 14:52:00 (土))

シート関数は上記の方法でないと利用出来ません。

なので、ご自分でFunction関数として用意するしかありません。
複数の要素は配列で与えます

Sub Test2
 Dim aArgs As Variant
 Dim aArgs2(2) As Variant
 
 oProcessServiceManager = GetProcessServiceManager()
 oFunctionAccess = oProcessServiceManager.createInstance( _
     "com.sun.star.sheet.FunctionAccess" ) 
 sFunction = "MAX"
 
 'Array関数を使用した場合
 a = 10
 b = 20
 c = 35   
 aArgs = Array(a,b,c)
 aResult = oFunctionAccess.callFunction( sFunction, aArgs)
 print aResult
 
 '一次配列に代入した場合
 oSheet = ThisComponent.getSheets().getByName( "Sheet1" )
 aArgs2(0) = oSheet.getCellRangeByName( "A1:A10" )
 aArgs2(1) = oSheet.getCellRangeByName( "B10:B20" )
 aArgs2(2) = oSheet.getCellRangeByName( "F1:F10" )
 aResult = oFunctionAccess.callFunction( sFunction, aArgs2)
 print aResult  
End sub

なるほど

S-Osaka (2010-09-11 15:59:24 (土))

目から魚がおちました。
ありがとうございました。

完了にします

M.Kamataki (2010-09-12 10:52:44 (日))

S-Osakaさん、コメントありがとうございます。ちなみに質問された方が納得されたら、「完了」にされてもかまいません。「当サイトの使い方/高度な使い方」をご覧ください。

関連質問

M.Kamataki (2010-09-12 10:56:11 (日))

依存するページにfaq/5/306を加えます。

お名前:
題名: