値が入った Excel シートがあります (このシートはカスタム Perl スクリプトによって生成されていますが、問題はそこにあるとは思いません)。その中に、次の数式があります:
=sum(indirect(concatenate(address(6,column()),":",address(17,column()))))
この数式の目的はSUM()
、現在の列の6行目から17行目までのセルの値を取得することです。Gnumeric スプレッドシートファイルを開いたらすぐに動作します。しかしExcel(2003と2008の両方)ではそして2007 以降では、ファイルを開くと、#VALUE!
この数式のフィールドにエラーが発生し、INDIRECT
値を指定して呼び出すと$B$6:$B$17
エラーが発生することが示されます。
ここに問題の問題点があります。フィールドを編集し( 経由F2
)、いいえ変更して Enter キーを押すと、値が更新されます。また、ファイルを .xlsx (Excel 2007 形式) として保存すると、開いたときに値が更新されるようです。残念ながら、xlsx
使用しているモジュールで を作成できるかどうかはわかりません。また、多くのクライアントはおそらくそれを使用できないでしょう。
何か提案はありますか? 毎月、各クライアントの 200 以上のファイルを編集するのは現実的ではないので、何か見落としている点があればお知らせください。
答え1
バニラ Sum 関数を挿入すると、それは機能しますか? つまり、問題は間接 / アドレスの組み合わせのコンポーネントまで追跡できますか?
OFFSET を使用して合計する範囲を作成してみましたか? たとえば、次のようになります。
=SUM(OFFSET(B6,0,0,12,1))
答え2
藁にもすがる思いかもしれないが、R1C1スタイルのリファレンスを試してみるのもいいだろう
=SUM(INDIRECT("R["&7-ROW()&"]C:R["&17-ROW()&"]C",FALSE))
または、数式が常に19行目にある場合は、参照スタイルをR1C1に設定します。
Application.ReferenceStyle = xlR1C1
次に、数式を次のように入力します。
=SUM(R[-13]C:R[-2]C)
アップデート:
ReferenceStyleを設定する必要を回避するには、
<YourCellReference>.FormulaR1C1 = "=SUM(R[-13]C:R[-2]C)"
答え3
おそらく、次のようにしてスプレッドシート全体の再計算を強制できるでしょう:
http://msdn.microsoft.com/en-us/library/bb687891.aspx
マクロの名前を変更し、その後スプレッドシートの名前を再度変更すると、問題なく動作するはずです。pearlscript の最後に実行できるでしょうか? 申し訳ありませんが、pearl についてはあまり詳しくありません。
または、ホットキー CTRL+ALT+F9 を使用し、それが機能する場合は、次の関数で VBA を使用します。アプリケーション.CalculateFull
答え4
Excel ではTools | Calculations
計算モードを設定できます。「自動」に設定すると、ファイルを開いたときにも、Excel はすべてのフィールドの数式の結果を自動的に更新します。
計算設定は個々のワークシートごとに設定することもできるので、Perl スクリプトで手動更新モードを設定することも可能です。