LibreOffice Calc データの範囲を得る
2015年1月2日
2016年2月24日
当然ながら、マクロでデータの入っているセルの範囲を指定することは多い。
そこで、以下はデータの入っているセルの範囲を得るマクロ。
Visual Basic
1 2 3 4 5 6 7 8 9 10 |
Sub GetLastCellPosition() Dim objSheet As Object Dim objRange As Object Dim objCursor As Object objSheet = ThisComponent.CurrentController.Activesheet objRange = objSheet.getCellRangeByName("A1") objCursor = objSheet.createCursorByRange(objRange) objCursor.gotoEndOfUsedArea(True) Msgbox(objCursor.Rows.Count & " : " & objcursor.Columns.Count, 0, "データのある最終の行:列") End Sub |
実行すると、以下のように、現在のシート上でデータの入っている一番右下のセルの番地を表示する窓が開く。
これを、データを並び替えるマクロに組み込んでみた。
Visual Basic
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Sub subSortRange Dim aSortFields(2) as New com.sun.star.util.SortField Dim aSortDesc(0) as New com.sun.star.beans.PropertyValue Dim objSheet As Object Dim objRange As Object Dim objCursor As Object objSheet = ThisComponent.CurrentController.Activesheet objRange = objSheet.getCellRangeByName("A1") objCursor = objSheet.createCursorByRange(objRange) objCursor.gotoEndOfUsedArea(True) oDocument = ThisComponent oSheets = oDocument.Sheets oSheet = oSheets.getByIndex(0) oRange = oSheet.getCellRangeByPosition(0,0,objCursor.Columns.Count-1,objCursor.Rows.Count-1) 'range aSortFields(0).Field = 3 aSortFields(0).SortAscending = True 'sort ascending by column D aSortFields(1).Field = 6 aSortFields(1).SortAscending = False 'then sort descenting by column G aSortFields(2).Field = 2 aSortFields(2).SortAscending = True 'then sort ascending by column C aSortDesc(0).Name = "SortFields" aSortDesc(0).Value = aSortFields() oRange.Sort(aSortDesc()) End Su |
これで、データの件数を変更しても、マクロを書き直さなくて済むようになった。
- sahara
- NEUTRINO(歌声生成AI)を試す。 2025年4月3日
- BASIC PITCHとWaveform Freeを使って鼻歌をMIDI音源で鳴らす。 2025年4月1日
- LMMS 1.2.2でWAVファイルを鳴らしてみる。 2025年3月29日
- LMMS 1.2.2でテンポを変更する。 2025年3月29日
- LMMS 1.2.2でMIDIデータを鳴らすまで。 2025年3月29日