Macros/Calc/ba029
Appearance
TDF LibreOffice Document Liberation Project Community Blogs Weblate Nextcloud Redmine Ask LibreOffice Donate
概要
このページでは、高度なフィルタを作成する 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 コードが含まれています。