Macros/Calc/ba028
Appearance
TDF LibreOffice Document Liberation Project Community Blogs Weblate Nextcloud Redmine Ask LibreOffice Donate
概要
このページでは、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コードが含まれています。