Jump to content

Macros/Calc/ba024

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


概要

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

説明

マクロでは、最大 3 つの列または行を使用して範囲を並べ替えることができます。追加の列または行を使用した並べ替えは、ソート記述子にソートフィールドを追加するのと同じくらい簡単です。次のマクロでは、リンクされた Calcファイル のセル範囲 $Sheet1.A1:H11 にあるクラスの成績表を使用して、2 つの列で並べ替える方法を示しています。成績表は、最初に「Quiz #1」のスコアで、次に「Quiz #2」の成績で昇順に並べ替えられます。

Code

Sub SortByQuizScores
  Dim oSheet
  Dim oRange
  Dim oSortFields(1) 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 範囲内の「Quiz #1」フィールドで並べ替え
  oSortFields(0).Field = 4
  oSortFields(0).SortAscending = True
  oSortFields(0).FieldType = com.sun.star.util.SortFieldType.NUMERIC

  REM 範囲内の「Quiz #2」フィールドで並べ替え
  oSortFields(1).Field = 5
  oSortFields(1).SortAscending = True
  oSortFields(1).FieldType = com.sun.star.util.SortFieldType.ALPHANUMERIC

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

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