ピボットテーブルのデータ範囲について

LibreOffice 6.2のcalcを使用しています。

別シートのデータからピボットテーブルを作成しています。
データを定期的に追加することから、ピボットテーブルのデータ範囲を可変にしたいと思っているところです。

  • ピボットテーブルのデータ範囲を名前付きの範囲に設定し
  • 名前付き範囲の設定で「参照範囲または数式」の欄に、エクセルで可変にするようにOFFSET関数で入力しましたが、名前の管理で範囲として認識されません。

ピボットテーブルのデータ範囲を可変にするには、どのようにしたらいいのかご教示願います。

エクセルで可変にするようにOFFSET関数で入力しましたが

詳しい情報がまったく書いていないので思いつきですが、OFFSET関数のシート参照の書き方が間違えてるとかではありませんか?

Excel: =Sheet!A1
Calc: =$Sheet1.A1

回答ありがとうござます。

〇 「入力規則」→「セルの範囲」→「ソース」欄に「OFFSET($データ.C10,0,0,10,1)」と入力すると、範囲をリストとして認識し表示になります。

〇 同じように、「名前付き範囲または式」→「管理」→「参照範囲又は数式」欄にOFFSET($データ.C10,0,0,10,1)と入力、「名前」を「計算範囲」とすると、名前として登録になります。

〇 この名前で、例えば別シートのA1に「=SUM(計算範囲)」と数式を入力すると計算をします。

〇 この名前を利用して、ピボットテーブルを作成しようと、「ソースと結果の貼り付け先」→「名前付きの範囲」に名前とした「計算範囲」が表示にならないので、ピボットテーブル範囲として利用できません。

以上のような状況です。

メモ(多分バグ。以下、解決はしない。)

「入力規則」→「セルの範囲」→「ソース」欄に「OFFSET($データ.C10,0,0,10,1)」と入力すると、範囲をリストとして認識し表示になります。

入力規則でCell Rangeを選択した場合、扱いとしてはSC_VALID_LIST

https://opengrok.libreoffice.org/xref/core/sc/source/ui/dbgui/validate.cxx?r=d56ee733#222

  1. ScValidationDataはScConditionEntryを継承している。

  2. ScConditionEntryはそのコンストラクタで、Compileメソッドを呼び出し、ScCompiler::CompileStringへ文字列を渡し、逆ポーランド記法のトークン配列ScTokenArrayを生成する。このCompileStringだけでは、数式の計算結果にならないことに注意する。

  3. ScFormulaCell::InterpretTailがその処理中、ScValidationData::IsDataValidを呼び出す。

  4. validat.cxx (revision 4304226d) - OpenGrok cross reference for /core/sc/source/core/data/validat.cxx

  5. validat.cxx (revision 4304226d) - OpenGrok cross reference for /core/sc/source/core/data/validat.cxx

  6. 別のScFormulaCellを作って計算かな?=> validat.cxx (revision 4304226d) - OpenGrok cross reference for /core/sc/source/core/data/validat.cxx

  • ScInterpreterやそれを利用するScFormulaCellが処理するときには、名前ではなく、「その名前が定義されたシート及びインデックスの組み合わせ」になっている。
  • その組み合わせに変換しているのが、ScCompiler::IsNamedRange( const OUString& rUpperName)で呼ばれているmaRawToken.SetName
  • ピボットテーブルのときには、計算結果が範囲になるかどうかのための計算をしておらず、式がトークン一つからなっており、bool ScTokenArray::IsValidReference( ScRange& rRange, const ScAddress& rPos ) constしかチェックしていない気がする(多分バグ)

回答ありがとうございました。

今後改善されることを期待して、この件は終了とします。

ありがとうございました。