Jump to content

Macros/Calc/ba028

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


概要

このページでは、2つの列をフィルタリングし、正規表現を使用する LibreOffice Basic マクロを提供します。これは、7.0 Calc ガイドの第13章 ("Calc as a Database"(データベースとしてのCalc))から抜粋した例です。

説明

次のマクロは、2 つの列をフィルタし、正規表現を使用するフィルタを示しています。この例では、filter メソッドがシートではなく範囲に対して呼び出されていることに注意してください。

次のマクロは、セル範囲 $Sheet1.A1:H11 のクラスの成績表を、「 Test #1」の点数が 90% 以下で、生徒名が「B」で始まる名前でフィルタします。リンクされた Calcファイル には、このような成績表が含まれています。

Code

Sub SimpleRangeFilter()
  Dim oSheet          ' フィルターが含まれるシート
  Dim oRange          ' フィルタされる範囲
  Dim oFilterDesc     ' フィルター記述子
  Dim oFields(1) As New com.sun.star.sheet.TableFilterField
  
  oSheet = ThisComponent.getSheets().getByIndex(0)
  oRange = oSheet.getCellRangeByName("A1:H11")
  
  REM argument が True の場合、 
  REM 空のフィルタ記述子が作成されます。
  oFilterDesc = oRange.createFilterDescriptor(True)

  REM 内容が文字「B」で始まるセルを表示するように、 
  REM フィールドを設定します。
  With oFields(0)   
    .Field = 0              ' フィルタ列 A (学生の名前)。
    .IsNumeric = False      ' 数字ではなく文字列を使用します。
    .StringValue = "b.*"    ' 「B」で始まるすべての名前
    .Operator = com.sun.star.sheet.FilterOperator.EQUAL
  End With
  REM 少なくとも1つの条件を必要とするフィールドを設定します。
  REM この新しい条件には、 
  REM 90 以下の値が必要です。
  With oFields(1)
    .Connection = com.sun.star.sheet.FilterConnection.OR
    .Field = 6              ' Filter column G (Test #1 grades).

フィルター列 G (Test #1 の成績)
    .IsNumeric = True       ' 番号を使用
    .NumericValue = 90      ' 90 点未満
    .Operator = com.sun.star.sheet.FilterOperator.LESS_EQUAL
  End With

  oFilterDesc.setFilterFields(oFields())
  oFilterDesc.ContainsHeader = True
  oFilterDesc.UseRegularExpressions = True
  oRange.filter(oFilterDesc)
End Sub

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