Jump to content

Macros/Calc/ba023

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


概要

このページでは、1つの列の値に基づいてテーブルをソートする LibreOffice Basic マクロを提供します。これは、7.0 Calc ガイドの第13章 ("Calc as a Database"(データベースとしてのCalc))から抜粋した例です。

説明

Calcマクロでは、範囲オブジェクトに対して sort() メソッドを呼び出すことによって、範囲内のデータが並べ替えられます。範囲に対して並べ替え操作が呼び出されると、sort descriptor と呼ばれるプロパティの配列が sort メソッドに渡されます。記述子のプロパティには、sort fields が含まれます。これは、行または列の 1 つに含まれるデータに従って範囲を並べ替える方法を Calc に通知する構造体です。

たとえば、次のマクロでは、セル範囲 $Sheet1.A1:H11 内のクラスの成績表が、「Average 列」(H 列)に従って降順に並べ替えられます。リンクされた Calcファイル には、このような成績表が含まれています。
注意: SortField 変数の フィールド インデックス値は、選択した範囲から相対的に数えられます。たとえば、選択した範囲が C1:H11 の場合、C 列のフィールドインデックスは 0 になります。


Code

Sub SortAverageGrade
  Dim oSheet
  Dim oRange
  Dim oSortFields(0) as new com.sun.star.util.SortField
  Dim oSortDesc(0) as new com.sun.star.beans.PropertyValue

  oSheet = ThisComponent.Sheets(0)
  REM 並べ替えの基準となる範囲を設定
  oRange = oSheet.getCellRangeByName("A1:H11")

  REM 範囲内の「Average」フィールド(H列)で降順に並べ替えます。
  oSortFields(0).Field = 7
  oSortFields(0).SortAscending = FALSE

  REM 使用するソートフィールドを設定
  oSortDesc(0).Name = "SortFields"
  oSortDesc(0).Value = oSortFields()
  
  REM 範囲を並べ替えます!
  oRange.Sort(oSortDesc())
End Sub

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