返信ありがとうございます。
仰る通り範囲名を全てグローバルにするのは、一番の解決方法だと思います。(範囲名が多すぎて、まだ実践できてはいないのですが……)
LibreOffice Calc のローカル範囲名の参照自体にバグがあるのか、それともローカルの範囲名参照ではトークンの扱いが異なるのかは今もって不明です。
返信ありがとうございます。
仰る通り範囲名を全てグローバルにするのは、一番の解決方法だと思います。(範囲名が多すぎて、まだ実践できてはいないのですが……)
LibreOffice Calc のローカル範囲名の参照自体にバグがあるのか、それともローカルの範囲名参照ではトークンの扱いが異なるのかは今もって不明です。
おそらく、LibreOffice内部で、処理順を追い越しているのだと思われます。
・各シートの定義
・範囲名の定義
これらが、複雑に入り混じってしまい、必要なタイミングで「まだ読み出されていない」状況が発生しているのだと予想します。
これを、バグとして修正の要望を出しても、問題が複雑過ぎて当面解決が期待できないようにも思えます。
修正要望を出すには、「最小限の要素で」再現させるサンプルシートを作成する必要がありますが、今回は複雑過ぎて再現させられる気がしません。。
そのため、仕様として割り切って、今の実装で動作するように作りを変更するのが現実的です。
うまく動く実装を、マクロなどで補いながら作ってみるのが良いと思うのです。
マクロの利用を検討されてはどうでしょうか?
Flat XML 形式で保存すると、以下のようなテキストファイルで作成され、テキストエディタで一括置換もできますよ。
変数名のリファクタリングに活用できないでしょうか?
〜略〜
<office:spreadsheet>
<table:calculation-settings table:automatic-find-labels="false" table:use-regular-expressions="false" table:use-wildcards="true"/>
<table:table table:name="Sheet1" table:style-name="ta1">
<table:table-column table:style-name="co1" table:default-cell-style-name="Default"/>
<table:table-row table:style-name="ro1">
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>サンプル</text:p>
</table:table-cell>
</table:table-row>
</table:table>
<table:named-expressions/>
</office:spreadsheet>
</office:body>
</office:document>
返信ありがとうございます。ご指摘通り、複雑な計算にはマクロが相応しいと考えてはいるのですが、お恥ずかしながらマクロについて全く無知で、学習も進んでいません。
作成開始時点でマクロも選択肢に入れていれば良かったのですが、その時点ではこのバグについて知らなかったため関数と範囲名のみで作成してしまったのが運の付きでした。
ファイルが複雑になっているため、マクロで書き直すのはかなり骨の折れる作業で、当方の時間的余裕からも難しいかなと感じております。ただ今後、機能を追加するなどの際はマクロなども検討していきたいと思います。
ありがとうございます。まだできていないのですが、何れご指摘いただいた方法で変数名の置換について行なってみたいとは思います。もし上手くいきましたら、こちらでご報告したいと思います。