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

Q&A集[?]

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

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

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

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:2172
現在:7


Evaluate関数を、実現するには?

ページOpenOffice.org FAQの登録ページ
投稿者もとたか
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2008-06-10 15:03:51 (火)
OSVista
依存するページ
バージョン
edit/refer

メッセージ

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

ExcelVBAで使っていた、Evaluate関数が OpenOffice Calc のマクロで使えません。

Evaluate関数で、 "9+6" などという文字列を計算させて、結果 15を得たいのです。

OpenOfficeのマクロでは、どうすれば、実現できるのでしょうか?

宜しくお願いします。 いつもご対応いただき、感謝しております。


Evaluate メソッドは、OpenOffice.org には、存在しないそうです。

Tora (2008-06-11 04:20:06 (水))

Evaluate メソッド
http://msdn.microsoft.com/ja-jp/library/microsoft.office.tools.excel.worksheet.evaluate(VS.80).aspx

代替方法はいくつか考えられます。
・BASICのソースコードとして記憶させてしまう方法
・セルの数式として設定する方法

ところで、その "9+6" などという文字列は、

・ブックやシート上で、一つ、または、数個だけ。 (手作業っぽい方法でなんとかこなす)
・ブックやシード上で、数十個から数百個以上。  (機械的な方法でなんとかこなす)

・その文字列には、セルへの参照が含まれている。 9+6+A1 など
・その文字列には、セルへの参照は含まれていない。

全体として、どのようなことを、実現されたいのでしょうか。
・複数の数式をテキストファイルから読み込んで、自動的に計算し、計算結果をファイルに書き出す。
・クイズに使う。
などなど。

ふむふむ

ponkan (2008-06-11 12:43:24 (水))

謎々を出されているようで、あれなんですが敢えて文章で書いておきます。

(源列を対象セルから読み込む
∪榮句・接尾句、或いは数式以外の文字を取り除き
calcでの完全な関数式を文字列で作成する
し覯未鯑れたいセルに、関数を書き込む

sub formin(A,B,C) rem セルに関数を入れる
ThisComponent.Sheets(A).getCellRangeByName(B).formula = C
end sub


使うとしたらこんな感じです
formin(2,"J1","=""C5""&"":""&""J""&TEXT(COUNTA(E6:E1000)+5;0)")


△諒源列の処理は、数式以外の文字がどの程度あるかによって処理ボリュームが変わるので
研究して下さい。

忘れないうちに

ponkan (2008-06-19 17:57:01 (木))

忘れないうちに作ってみた。

sub reidai
mondai = "[問題:次の計算を行いなさい ""((2.3+4.5)*(75/3-2^2))-4"" 答え:____]"
ThisComponent.Sheets(0).getCellRangeByName("A10").string = mondai
test43("A10","A11")                                               rem 呼出方法のサンプル
end sub

sub test43(A,B) rem (元の文字列のあるセル byname,結果を入れるセル byname)
scell = ThisComponent.Sheets(0).getCellRangeByName(A)             rem シートはindex0固定
dcell = ThisComponent.Sheets(0).getCellRangeByName(B)
tes = scell.string
yt = "()+-*/^0123456789." : cou1 = len(tes)                       rem 全角文字は省いてある
for i = 1 to cou1
if cbool(instr(yt,left(tes,1))) then shiki = shiki + left(tes,1)  rem 捻くれて見た
Mid(tes,1,1,"")                                                   rem 判定終了文字を削る
next i
dcell.formula = "="+shiki : tes = dcell.value : dcell.value = tes
end sub

あまり実用性があるようにも見えないが、気のせいだろう。
因みに答えは138.8だったが、合っているのかは知らない。

お名前:
題名: