Windowsでも再現しました。
シートをまたいで参照する場合は
範囲をドキュメント(グローバル)に変更し
数式のシート名.範囲名となっている部分からシート名を削除
してみてはどうでしょうか?
ご返信ありがとうございます。ご指摘いただいた「範囲をドキュメント(グローバル)に変更」ついて試してみましたが、中々に難しいと感じました。
calc-kaikeicho.ots にて「日付」という範囲名は「仕訳帳」シートの中にも、「繰越処理」シートの中にもそれぞれ別々に異なる値で定義されています。「ヘッダー」や「フッター」の範囲名に至ってはそれぞれで全シート分定義されています。
同じ名前の範囲名を全て「ドキュメント(グローバル)」に変更すると範囲名同士が衝突してしまい、どれか1つの値が採用されて、それ以外の範囲名の値が消えてしまうようなのです。
当方の方では未だ、このエラーについて解決できておりません。更なるご知見などございましたら、ご教示頂ければ誠に幸いでございます。よろしくお願い致します。
一部変更で見えるエラーが出なくなったのでご報告です。
範囲は当初どおりシート内です。
勘定科目一覧表.科目名 INDEX(勘定科目一覧表.内容,0,1) 勘定科目一覧表.分類 INDEX(勘定科目一覧表.内容,0,2) 勘定科目一覧表.祖先分類1 INDEX(勘定科目一覧表.内容,0,3) 勘定科目一覧表.祖先分類2 INDEX(勘定科目一覧表.内容,0,4) 勘定科目一覧表.合計残高 INDEX(勘定科目一覧表.内容,0,5) 勘定科目分類表.分類名 INDEX(勘定科目分類表.内容,0,1) 勘定科目分類表.親分類 INDEX(勘定科目分類表.内容,0,2) 合計残高試算表.種別 INDEX(合計残高試算表.内容,0,1) 合計残高試算表.勘定科目 INDEX(合計残高試算表.内容,0,5)
ありがとうございます。ご指摘通り入力したらエラーが表示されなくなるのを確認しました。素晴らしいです。
ひとまずこれで解決ではあるのですが、エラーが生じた原因について引き続き調査を続けたいと思います。
何も解決しませんが、マクロ利用がOKなら、エラー表示を出さない当面の簡単な対応策として、
「ファイルを開くときのイベントに、適当な名前付き範囲を作って直ぐに削除するだけのマクロを実行する」ことを提案します。
とりあえずエラーのない状態で開くことは出来ます。
AIに訊けば3秒で作ってくれるマクロで十分です。マクロを学習する必要はありません。
Ask_88398_OpeningMacro.ods (442.8 KB)
ファイルには以下のマクロが有り、開くときマクロを許可すれば自動的に実行されます。
最初に開くときは許可しないで、怪しいマクロでないことを確認し、再度開くときにマクロを許可することを勧めます。
仕込んでいるマクロは以下です。
Sub RangedNameNewRemove
rem 仮の範囲名を作って、すぐに削除するだけ
Dim oNR As Object, oCA As new com.sun.star.table.CellAddress
oNR = ThisComponent.NamedRanges
oNR.addNewByName("Z_Y_X", "A", oCA, 0)
oNR.removeByName("Z_Y_X")
End Sub
「NamedRange」にするつもりで、間違えましたが、そのままにします。
ご返信ありがとうございます。マクロを有効にしてファイルを開いたところ、前述のエラーなどの問題が解消されました。
この方法ですと、表計算自体の範囲名を弄ることなく、また LibreOffice Calc 本体のバグが解消された際には、再びマクロのみを取り除けばいいなど、利点が大きいですね。
今までマクロの使用は躊躇していたのですが、当面の間はこの方法で行きたいと思います。
以下のバージョンでも検証したのですが、前述と同様の結果となりました。未だに解決方法が見いだせないので、更なる解答をお待ちしております。
Version: 7.3.2.2 / LibreOffice Community
Build ID: 30(Build:2)
CPU threads: 1; OS: Linux 4.15; UI render: default; VCL: x11
Locale: ja-JP (ja_JP.UTF-8); UI: ja-JP
Ubuntu package version: 1:7.3.2~rc2-0ubuntu0.18.04.1~lo2
Calc: threaded
たとえば、参照を循環させると、このようなエラーになりますが、
どこかで同じようなロジカルな間違いはないかな。。と考えたのですが、
もしそうだとすると、何をやってもエラーは解決しないので、
今回の問題はもっと別の部分にありそうですね。。。
1.名前の付け方に間違いがある?
2.名前の定義よりも先に、名前の参照が起きている?
3. 範囲を設定し直すことで解決できないか??
4. 範囲名が復活しないと、どうやっても動かない???
他に考えられる原因はないものでしょうか???
名前の定義前に、その名前を利用しようとしている。。とかですかね。。
ご返信ありがとうございます。一応確認した限りでは、未定義の範囲名を参照するのはないと思います。(時間がある時にもう一度確認してみたいと思います。)
今回の問題は範囲名の数式選択し、何も変更せず、 「ok」でエラーが解決するのが、最大の謎です。
表示されるエラーメッセージは、以下のようです。
525
#NAME?
無効な名前(Err:525 セルの代替表示は #NAME?)
識別子を評価できませんでした。たとえば、参照が有効でない、
ドメイン名が有効でない、列または行の項目欄がない、
マクロがない、小数位区切りが正しくない、アドインが見つからないなどです。
他にも、Calcの制限ぽいものを見つけました。
数式の最大トークン (数式を解析した後の内部データ単位) 数は
4096/sizeof(pointer) (32ビットプログラムでは1024、
64ビットプログラムでは512)[2]です。
これは数式内の文字数や関数の数に1:1で対応するものではありませんが、
その複雑さは制限されます(複雑すぎる数式ではエラーが発生します)
あまり複雑な数式では、エラーが出る可能性があるということだと思います。
シンプルに、マクロ等で実現する方が、安全かもしれません。
https://help.libreoffice.org/latest/ja/text/scalc/05/02140000.html?DbPAR=CALC
https://wiki.documentfoundation.org/Faq/Calc/022/ja
ここに記載がありました。
数式の最大トークン (数式を解析した後の内部データ単位) 数は
4096/sizeof(pointer) (32ビットプログラムでは1024、
64ビットプログラムでは512)[2]です。
これは数式内の文字数や関数の数に1:1で対応するものではありませんが、
その複雑さは制限されます(複雑すぎる数式ではエラーが発生します)
上記については、翻訳が古くて更新しましたので数字は変わりましたが、複雑な場合に問題が起こるケースはありそうでです。
https://wiki.documentfoundation.org/Faq/Calc/022/ja
皆様回答ありがとうございます。全てのご回答を拝見しております。
一つずつ順を追って確認しているため、返信が遅くなり申し訳ございません。
改めて見直したのですが「未定義の範囲名の参照」については確認出来ませんでした。
さらにエラーに関する調査を行いたいと思います。
引き続き個人的に調査してみたのですが、特定のシート内の範囲名をそのシート外から参照すると、起動時にエラーが生じるような気がします。
「仕訳帳」シート内で「勘定科目一覧表」内の各種範囲名を参照すると、起動時にエラーになります。ここでの 勘定科目一覧表.a
と b
は 勘定科目一覧表.科目名
と全く同一の数式です。ただし b
は参照範囲がグローバルです。勘定科目一覧表.a
と b
は検証用に定義した範囲名です。
仕訳帳では 勘定科目一覧表.a
はエラーですが、b
はエラーになりません。
一方で、「勘定科目一覧表」シート内で、「勘定科目一覧表」内の各種範囲名を参照しても、起動時にエラーが全く生じていません。
このことから、参照範囲がグローバルの場合には問題が生じず、別のシートの範囲名を参照すると問題が生じるように思われます。
当方の環境では以上のような結果となったのですが、皆様の環境では写真のような同様の結果となりますでしょうか。今回検証に使用したシートはダウンロード可能です。もしよろしければ検証していただければ幸いです。
test.ods (437.9 KB)
シート名:項目名の、例えば「項目名」をユニークにしたら回避出来ないか、などと考えましたが、複雑すぎてこちらで試せません。。
同じ名前がシート違いで沢山ありますよね?
。。。と思ったら、勘定科目一覧表.aでもエラーでしたね。。
参考にならずすみません。
各項目を、グローバルにしつつ、ユニークな名前にして衝突を防げばいけるのかな???
返信ありがとうございます。
仰る通り範囲名を全てグローバルにするのは、一番の解決方法だと思います。(範囲名が多すぎて、まだ実践できてはいないのですが……)
LibreOffice Calc のローカル範囲名の参照自体にバグがあるのか、それともローカルの範囲名参照ではトークンの扱いが異なるのかは今もって不明です。