[[20091006192711]] 『関数のセルの#VALUEがエンター押下で消えるわけ』(kur) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『関数のセルの#VALUEがエンター押下で消えるわけ』(kur)

javaでPOIを利用してエクセルデータを作成しています。

セルに=ROUND(SUMPRODUCT($F3:$F19,J3:J19)/1000,0)という関数を入力したところ

できあがったExcelでは#VALUEと表示されました。

しかし、該当セルを選択してエンターキーを押下すると、

正常な数値が表示されました。

他の関数=IF(R19<>0,O19/R19,0)などは、最初からきちんと数値が表示されます。

関数の内容は何も変更していないのですが、原因が判りません。

恐れ入りますが、お力を貸しくださりませ。

[エクセルのバージョン]
Excel2000
[OSのバージョン]
WindowsXP


 > できあがったExcelでは#VALUEと表示されました。
 「できあがったExcel」とは何ですか?

 > 該当セルを選択してエンターキーを押下すると、正常な数値が表示されました。
 このことを具体的に説明してください。

 (ていおう)2009/10/6 19:42


さっそくのコメントありがとうございます。

 > 「できあがったExcel」とは何ですか?

 javaを実行して作成されたExcelデータのことです。

 >> 該当セルを選択してエンターキーを押下すると、正常な数値が表示されました。
 > このことを具体的に説明してください。

 #VALUEと表示されているセルにカーソルを合わせ、エンターキーを押下しました。

 内容は何も変更していません。

 どうか、ご教示お願いいたします。

 (kur)

 >javaでPOIを利用してエクセルデータを作成しています。 

 POIがどんなものか分かりませんが、
 単純な数式は、正しく評価してくれたとしても、
 複雑な数式についても、同様の結果が得られる保証はないと思います。

 とりあえず、少しずつ複雑度を上げてチェックしてみてはいかがでしょうか?

 (1) =F3*J3
 (2) =PRODUCT(F3,J3)
 (3) =SUMPRODUCT(F3,J3)
 (4) =SUMPRODUCT($F3:$F19,J3:J19)
 (5) =ROUND(1000/1000,0)
 (6) =ROUND(SUMPRODUCT($F3:$F19,J3:J19)/1000,0)

 (半平太) 2009/10/06 20:48

 半平太さま、ご教示ありがとうございます。

 本日は無理なのですが、明日、早速試してみます。
 =IF(R19<>0,O19/R19,0)はできているので、途中まではできそうな気がします。
 ただ、選択してエンターキーを押下すると、正常に表示されるので、
 それを回避する方法を探しています。

 もし、他にも何かございましたら、ご指導お願いいたします。

 (kur) 2009/10/06 21:16

 再び『POIがどんなものか分かりませんが、』、エラーが出ているのは、再計算がなされていない状況のように感じます。

 『F9キーを押す』とか、『Ctrl+Alt+F9キーを押す』とかして、再計算させれば、エラーが解消するような気がしますが。

 (半平太) 2009/10/06 21:52

 半平太さま、再びアドバイスありがとうございます。

 「POI」とは、「javaからExcelなどのMicrosoft OLE 2複合ドキュメントを取り扱うAPI群」です。

 ちょっと調べたところ、使える関数と使えない関数があるとのことなので、そのせいかもしれません。

 セル内には計算式が入っていて、ファイルを開いた時点で数値が表示されるようにしたいのですが、

 POIのバージョンなども関係あるようですが、今回使いたい関数はNGなのかもしれません。

 (残念ながら、使える関数の一覧などには辿り着けておりません。)

 もう少し調べて、色々試してみます。

 (kur) 2009/10/07 14:37


 >セル内には計算式が入っていて、ファイルを開いた時点で数値が表示されるようにしたいのですが、

 エクセルファイルの ThisWorkbook モジュール の方に
 こんなのを仕込んで置く訳にはいかないですか?
   ↓
 Private Sub Workbook_Open()
       Application.CalculateFullRebuild
 End Sub

 (半平太) 2009/10/07 15:20

 半平太さま、アドバイスありがとうございます。

 残念ながら、「POI」の制限によりますと

 『マクロの生成はできません。今現在、マクロのサポートの計画はありません。
   マクロを含んだワークブックの読み込みはサポートしていますが、これらのワークブックへの書き込みを行おうとすると失敗します。
   理由は、マクロは複合ドキュメント内部の特殊なファイルシステムで保存されているからであり、このファイルシステムは、現在、ファイルが再書き込みを行う際に保持されないのです。』

 とのことです。マクロは使えないようです。

 せっかくお知恵を貸してくださったのに、残念です。

 引き続き、色々試してみます。

 2009/10/07 16:38

 ここの解説に、以下の記述があります。
  ↓
 検索条件とバージョンによる検索結果の違いについて
http://www.kenzo30.com/ex_kisotyu/ex_ks_tyukyuxb3_2_1.htm

 『エクセルは仕様によって、下位のバージョンで作成したファイルを開く時、再計算して開きますが、
  上位のバージョンで作成したファイルは自動的に再計算をしないで開くのです。
  再計算キー「F9」を押しても再計算しません。・・・』

 これを逆用して、まずXL97バージョンで作った雛形エクセルファイルを用意し、
 それにJAVAから数式を書き込むようにすれば、あとで
 XL2000以上のバージョンのエクセルで開いたとき自動的に再計算してくれるかも知れません。

 ・・・上手くいくか自信はないです。 ^_^;

 (半平太) 2009/10/07 19:04

 半平太さま、またまたありがとうございます。

 > エクセルは仕様によって、下位のバージョンで作成したファイルを開く時、再計算して開きますが、
 > 上位のバージョンで作成したファイルは自動的に再計算をしないで開くのです。

 ということは、POIで使用できない関数か、あるいはエクセルのバージョンの問題、となりますね。

 それから、ご意見いただいておきながら恐縮なのですが、

 > これを逆用して、まずXL97バージョンで作った雛形エクセルファイルを用意し、

 システム的な問題ではなく、環境の制限で、雛形エクセルファイルを用意することができません。
 重ね重ね、申し訳ございません。
 現在、列を追加して、計算を2段階に分けようか検討中です。

 (kur) 2009/10/07 20:43

 > ということは、POIで使用できない関数か、あるいはエクセルのバージョンの問題、となりますね。

 まったくノーアイデアです。

 単なる推測ですが、、
  POIで対応できる関数に限界があるか、配列を扱ったものには対応できないか、どちらかだと思っています。
  あと、計算順序(チェーン)が構築できなくて、依存関係のあるものには対応できない可能性も少しありそうです。
  いずれも、そちらで実験すれば解明できることだと思います。

  再計算の問題は、上の欠点をオープン時にエクセルの機能でカバー出来るかも知れない、程度のことで二次的な事柄と考えます。
  もっとも、自動再計算でこの問題が解決するのかどうかさえ定かでありません。
  このテスト結果を教えていただいていないので。。。
   ↓
 >『Ctrl+Alt+F9キーを押す』とかして、再計算させれば、エラーが解消するような気がしますが。

 いずれにしても、私が関われる問題ではなさそうなので、私はこれでドロップアウトさせていただきます。

 (半平太) 2009/10/07 23:27

 半平太さま、助言ありがとうございます。

 > POIで対応できる関数に限界があるか、配列を扱ったものには対応できないか、どちらかだと思っています。
 確かに、関数は使えるものと使えないものがあるようです。
 ただ、何が使えて、何が使えないのかが明確になっていない状況です。

 それから

 > このテスト結果を教えていただいていないので。。。
   ↓
 >>『Ctrl+Alt+F9キーを押す』とかして、再計算させれば、エラーが解消するような気がしますが。

 の件ですが、今更ながらご報告いたしますと、再計算はされませんでした。
 アドバイスくださったのに、ご報告が遅れてしまい、申し訳ございませんでした。

 予定していた関数を使用せずに計算できるよう、改修することとします。

 この度は、ありがとうございました。

 (kur) 2009/10/08 9:37


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.