1. 下図の通り、A1~A6に入力された文字を昇順に並べる例である。
この例では、先頭行は列見出しではなく、データであるものとする。
Sub ExampleSort()
Dim objSheet As Object
Dim objRange As Object
Dim objSortDesc(1) As New com.sun.star.beans.PropertyValue
Dim objSortFields(0) As New com.sun.star.util.SortField
objSheet = ThisComponent.CurrentController.ActiveSheet
objRange = objSheet.getCellRangeByName("A1:A6")
'
'A列をキーに昇順で並べ替えを行う
objSortFields(0).Field = 0 '(註1)objSortFields(0).SortAscending = True '(註2)
'
'並べ替えキーの設定
objSortDesc(0).Name = "SortFields"objSortDesc(0).Value = objSortFields()
'
'「列見出し」がない場合
objSortDesc(1).Name = "ContainsHeader"objSortDesc(1).Value = False
'
'並べ替えの実行
objRange.sort(objSortDesc())
End Sub
結果は下図の通り :
(註1) の objSortFields(0).Field で指定している値は列番号である。列番号は
0 から始まるので、並べ替えのキーがA 列である為、値に 0 を指定している。
(註2) の objSortFields(0).SortAscending では、並べ替えを昇順/降順いずれ
で行うかを指定している。昇順の場合は True、降順の場合は False を指定
する。
2. 次の例では、指定した範囲の先頭が列見出しである場合についてである。
下図のように、A1 ~ A7 に入力された文字の並べ替えを行いたいが、1.
の場合と異なり、この例では先頭行が列見出しになっている。
Sub ExampleSort2()
Dim objSheet As Object
Dim objRange As Object
Dim objSortDesc(1) As New com.sun.star.beans.PropertyValue
Dim objSortFields(0) As New com.sun.star.util.SortField
objSheet = ThisComponent.CurrentController.ActiveSheet
objRange = objSheet.getCellRangeByName("A1:A7")
'
'A列をキーに昇順で並べ替えを行う
objSortFields(0).Field = 0
objSortFields(0).SortAscending = True
'
'並べ替えキーの設定
objSortDesc(0).Name = "SortFields"
objSortDesc(0).Value = objSortFields()
'
'「列見出し」がある場合
objSortDesc(1).Name = "ContainsHeader"
objSortDesc(1).Value = True '(註3)
'
'並べ替えの実行
objRange.sort(objSortDesc())
End Sub
結果は下図の通り :
列見出しがある範囲の並べ替えを行う場合は、(註3) のようにプロパティ
値として True を指定する。
3. 最後は、複数列をキーにして並べ替えを行う場合を考える。
下図の通り、A1 ~ B14 の範囲の文字を、
第 1 キー : A 列
第 2 キー : B 列
で並び替える。並び順はいずれも昇順とする。また、列見出しはないもの
とする。
Sub ExampleSort3()
Dim objSheet As Object
Dim objRange As Object
Dim objSortDesc(1) As New com.sun.star.beans.PropertyValue
Dim objSortFields(0) As New com.sun.star.util.SortField
objSheet = ThisComponent.CurrentController.ActiveSheet
objRange = objSheet.getCellRangeByName("A1:B14")
'
'並べ替えの第1キーはA列。並び順は昇順
objSortFields(0).Field = 0
objSortFields(0).SortAscending = True
'
'並べ替えの第2キーはB列。並び順は昇順
objSortFields(1).Field = 1 '(註1)
objSortFields(1).SortAscending = True '(註2)
'
'並べ替えキーの設定
objSortDesc(0).Name = "SortFields"
objSortDesc(0).Value = objSortFields()
'
'「列見出し」がない場合
objSortDesc(1).Name = "ContainsHeader"
objSortDesc(1).Value = False
'
'並べ替えの実行
objRange.sort(objSortDesc())
End Sub
結果は下図の通り :
今回の例では、並べ替えのキーとしてB 列も指定しなければならないので、
(註1) の objSortFields(1).Field でB 列の列番号である 1 を指定し、(註2)
の objSortFields(1).SortAscending では、第 2 キーの並び順を指定している。
0 件のコメント:
コメントを投稿