スポンサーリンク

OpenOffice calcのBasicマクロで,簡単に列をソートするサンプルコード

Excel/Wordオフィス製品のTipsまとめへ

OOo Calcで,シート内の任意の列をソートするマクロのサンプルコード。

' 列をASCでソート
Sub MySortAsc
	' ソートを実行するシート番号と列番号
	sheet_index = 0
	column_index = 0

	' ソート範囲
	sort_range = "B7:X561"

	' ソート準備
	Dim sort_info(1) As New com.sun.star.beans.PropertyValue
	Dim sort_fields(0) As New com.sun.star.util.SortField
	
	' ソート範囲
	oSheet = ThisComponent.Sheets( sheet_index )
 	oCellRange = oSheet.getCellRangeByName( sort_range )

	' 何番目の列をどういう優先順位でソートするか
 	sort_fields(0).Field = column_index ' 列番号,0始まり
 	sort_fields(0).SortAscending = True ' ASCかどうか
	sort_info(0).Name = "SortFields"
 	sort_info(0).Value = sort_fields()

 	' range内に列のヘッダを含むかどうか
 	sort_info(1).Name = "ContainsHeader"
	sort_info(1).Value = False

	' 範囲を選択してソート実行
	ThisComponent.getCurrentController().select( oCellRange )
	oCellRange.sort( sort_info() )

End Sub

コードの説明

このマクロを実行すると,
指定したシートの指定した列をキーにして
指定した範囲がソートされる。

シート上にマクロ呼び出しのボタンを置いておけば,楽にソート実行できて便利だ。

マクロでソートするための参考資料:

OOoBasic/Calc/sort - ...?
http://hermione.s41.xrea.com/pukiwiki...

  • セル範囲の内容の並べ替えを行うメソッドは sort です。


【解決しました】Calcで指定範囲をSORTするマクロ (トピック) • OpenOffice.org コミュニティーフォーラム
https://forum.openoffice.org/ja/forum...

  • 指定範囲とSORT-Key列(できれば複数)を引数で渡せばSORTしてくれるプロシージャが、かなりの時間は掛かったけれど一応完成しました。


Andreas' Technical Tidbits: LibreOffice calc: automatically sort data upon data entry
http://ajhaupt.blogspot.jp/2013/08/li...

  • The first macro 'SortRange' sorts a range by its second column in descending order using the first row as header i.e. not part of the actual sort. The macro gets a range object as parameter and thus could be used for any range.


Excel/Wordオフィス製品のTipsまとめへ