Jump to content

Macros/Calc/ba029

From The Document Foundation Wiki
This page is a translated version of the page Macros/Calc/ba029 and the translation is 100% complete.


概要

このページでは、高度なフィルタを作成する LibreOffice Basic マクロを提供します。これは、7.0 Calc ガイドの第13章 ("Calc as a Database"(データベースとしてのCalc))から抜粋した例です。

説明

マクロを使用して高度なフィルタを適用する操作は、標準フィルタを設定する操作と似ています。主な違いは、フィルタ抽出条件を含むセル範囲を使用してフィルタ記述子が作成されることです。次のマクロでは、createFilterDescriptorByObject メソッドを使用してこれを行う方法を示します。セル範囲 $Sheet1.A1:H11 のクラス成績表をデータ範囲として使用し、セル範囲 $Sheet2.A1:H3 を抽出条件の範囲として使用します。リンクされた Calcファイル には、このようなデータ範囲と抽出条件範囲が含まれます。

Code

Sub AdvancedRangeFilter()
  Dim oSheet     'Calcドキュメントのシート
  Dim oRanges    '名前付き範囲のプロパティ
  Dim oCritRange 'フィルタ条件を含む範囲
  Dim oDataRange '抽出するデータが含まれている範囲
  Dim oFiltDesc  'フィルター記述子

  REM フィルタ条件を含む範囲
  oSheet = ThisComponent.getSheets().getByIndex(1)
  oCritRange = oSheet.getCellRangeByName("A1:H3")

  REM 名前付き範囲から、 
  REM フィルタ条件を含む範囲を取得することもできます。
  REM oRanges = ThisComponent.NamedRanges
  REM oRange = oRanges.getByName("AverageLess80")
  REM oCritRange = oRange.getReferredCells()

  REM フィルタを適用するデータ
  oSheet = ThisComponent.getSheets().getByIndex(0)
  oDataRange = oSheet.getCellRangeByName("A1:H11")

  oFiltDesc = oCritRange.createFilterDescriptorByObject(oDataRange)
  oDataRange.filter(oFiltDesc)
End Sub

この Calc ファイル には、上記のLibreOffice Basic コードが含まれています。