マクロ/Calc/ba026

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


    Other languages:

    概要

    このページでは、簡単な標準フィルターを作成する LibreOffice Basic マクロ プロシージャについて説明します。 7.0 Calc ガイドの第 13 章 ("データベースとしての Calc") から抜粋した例です。

    説明

    マクロでは、データ範囲のフィルタリングは、範囲または範囲が含まれるシートで filter() メソッドを呼び出すことによって実行されます。 ソート記述子 と同様に、 フィルタ記述子 には、シートの最初の行または列にフィルタリングしないヘッダーが含まれているかどうかなど、現在のシートのフィルタ設定が含まれます。 フィルタ記述子 は、シートまたはセル範囲で createFilterDescriptor() メソッドを呼び出すことによって生成できます。

    createFilterDescriptor(Empty)
    フィルタ記述子を作成します。ブール フラッグ Empty が TRUE に設定されている場合、空のフィルタ記述子が作成されます。 Empty が FALSE の場合、記述子には現在のオブジェクト (データベース範囲など)の以前の設定が入力されます。

    ソート記述子と同様に、フィルター記述子もこのメソッドを使用して作成し、変更してフィルター メソッドに引数として渡すことができます。以下のマクロは、ドキュメントの最初のシートに簡単な標準フィルターを作成することで、このプロセスを示しています。

    Note pin.svg

    Note:
    シートで filter メソッドが呼び出されると、シート内のすべての空の行が非表示になります。範囲で filter が呼び出されると、範囲自体の空の行のみが非表示になります。

    Code

    Sub SimpleSheetFilter()
      Dim oSheet       ' フィルターが含まれるシート。
      Dim oFilterDesc  ' フィルター記述子。
      Dim oFields(0) As New com.sun.star.sheet.TableFilterField
      
      oSheet = ThisComponent.getSheets().getByIndex(0)
      
      REM 引数がTrueの場合、空のフィルタを作成します
      REM 記述子。引数がFalseの場合 
      REM 以前の設定の記述子。
      oFilterDesc = oSheet.createFilterDescriptor(True)
      
      With oFields(0)
        REM 接続プロパティを使用
        REM 前のフィールドに接続する方法。これは
        REM 最初のフィールドなので、必須ではありません。
        '.Connection = com.sun.star.sheet.FilterConnection.AND
        '.Connection = com.sun.star.sheet.FilterConnection.OR
    
        REM フィールドプロパティはゼロベースの列です
        REM フィルターする番号。セルがある場合は、
        REM .Field = oCell.CellAddress.Column を使用できます。
        .Field = 5	' クイズ #2 の成績フィールド
    
        REM 数値または文字列を使用して比較しますか?
        .IsNumeric = True
    
        REM NumericValueプロパティを使用 
        REM 上記の通り、 .IsNumeric = True であるためです。
        .NumericValue = 80
    
        REM IsNumeric がFalseの場合、 
        REM StringValue プロパティが使用されます。
        REM .StringValue = " 文字列"
    
        REM 有効な演算子には EMPTY, NOT_EMPTY, EQUAL,
        REM NOT_EQUAL, GREATER, GREATER_EQUAL, LESS,
        REM LESS_EQUAL, TOP_VALUES, TOP_PERCENT,
        REM BOTTOM_VALUES、および BOTTOM_PERCENT
        .Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL
      End With
      
      REM フィルタ記述子は以下をサポートします
      REM プロパティ: IsCaseSensitive, SkipDuplicates,
      REM UseRegularExpressions, 
      REM SaveOutputPosition, Orientation, ContainsHeader, 
      REM CopyOutputData, OutputPosition、および MaxFieldCount.
      oFilterDesc.setFilterFields(oFields())
      oFilterDesc.ContainsHeader = True
      oSheet.filter(oFilterDesc)
    End Sub

    この Calc spreadsheet には上記の LibreOffice Basic コードが含まれています。