2017-10-11 19 views
1

職場での売掛金を追跡するために使用するLibreOffice Calcスプレッドシートがあります。各シートには請求書とそのステータス(有料、未払いなど)と各請求書に関する情報が記載されています。私は各シートから特定のデータをリストする要約シートを作成しようとしています。手動でシートを作成するのは簡単ですが、プロセスを「自動化」しようとしています。ファイルにアカウントを追加したり削除したりするときに、新しいシートを追加する(または削除する)と、要約ページが自動更新されます。インデックス番号でシートを参照する

LibreOfficeは、各シートに何らかの種類の式で参照できるインデックス番号を割り当てていますが、その中のセルから値を取得するときにそのインデックス番号を参照するための関数を見つけることができません。 Sheet(2)のような関数は2番目のシートを参照することが期待されますが、そうではありません!

間接関数とアドレス関数をうまく使用しようとしましたが、私がこれらの関数を理解していないのか、それとも私が達成しようとしているものに適切でないのか分かりません。

答えて

1

これは、Calcでは長時間欠けています。推奨される解決策は、ユーザー定義関数を記述することです。スプレッドシートの数式は、インデックス番号でシートにアクセスするのではなく、基本式でシートにアクセスします。

以下の機能は、https://ask.libreoffice.org/en/question/16604/how-do-i-access-the-current-sheet-name-in-formula-to-use-in-indirect/です。

Function SheetName(Optional nSheet) 
If IsMissing(nSheet) Then 
    SheetName = ThisComponent.getCurrentController().getActiveSheet().getName() 
Else 
    SheetName = ThisComponent.getSheets().getByIndex(nSheet-1).getName() 
EndIf 
End Function 

次に、このような最初のシートセルA1の相対アドレスを取得します。

=ADDRESS(1,1,4,,SHEETNAME(1)) 

少し異なる機能がhttps://forum.openoffice.org/en/forum/viewtopic.php?f=9&t=49799に与えられています。

+1

ありがとうございました!私はいくつかの同様の機能を見ていたが、誰も動作するように見えなかった。これは完全に機能します。これを使用する他の人は、indirect()関数でaddress()関数をラップして、指定されたセルの値を取得します。 –

+0

この関数を使用したファイルを開いたばかりで、ロード時にBASICランタイムエラーが発生します。 「プロパティまたはメソッドが見つかりません:getSheets」と表示されます。エラーポップアップをクリアすると、関数が使用されている各セルに!REFエラーが発生します。ただし、数式を変更して元に戻すと、再び機能します。何か案は? –

+0

標準モジュールからファイル固有のモジュールに関数を移動して問題を解決しました。 –

関連する問題