*セルのアドレス [#r0c606a8] セルのアドレスにはいくつかのあらわし方があります。それをマクロで取り扱ってみます。 #contents **文字列 [#bae4b587] ユーザーに分かりやすい文字列としてアドレスを取得してみます。これには、com.sun.star.sheet.SheetCellRange サービスを使用します。 Sub celladdresses_1 Dim oSelection As Object, oCellRangeAddress As Object oSelection = ThisComponent.CurrentController.Selection oCellRangeAddress = ThisComponent.createInstance( _ "com.sun.star.sheet.SheetCellRanges" ) oCellRangeAddress.insertByName( "", oSelection ) MsgBox oCellRangeAddress.getRangeAddressesAsString() End Sub 上のコードは選択範囲のアドレスを "A1:B3" のような文字列で表示します。ダイアログなどに範囲を表示する際などには便利です。 *** アドレス変換 [#na4b434d] 3.2 付近からはセルのインデックスから文字列でのアドレスへ変換するサービスがあります。 Sub CellAddressConversion oAddrConv = ThisComponent.createInstance("com.sun.star.table.CellAddressConversion") aAddr = CreateUnoStruct("com.sun.star.table.CellAddress") aAddr.Row = 5 oAddrConv.Address = aAddr msgbox oAddrConv.PersistentRepresentation msgbox oAddrConv.UserInterfaceRepresentation End Sub 以下はセル範囲用。 Sub CellRangeAddressConversion oRangeAddrConv = ThisComponent.createInstance("com.sun.star.table.CellRangeAddressConversion") aAddr = CreateUnoStruct("com.sun.star.table.CellRangeAddress") aAddr.StartRow = 5 aAddr.EndRow = 7 oRangeAddrConv.Address = aAddr msgbox oRangeAddrConv.PersistentRepresentation msgbox oRangeAddrConv.UserInterfaceRepresentation End Sub **インデックス [#ga0b594f] セルの持つプロパティーに ''CellAddress'' があります。これはセルのアドレスを struct として取得します。取得する struct は .table.CellAddress です。また,これはインデックスとして "0" を基準として取得します。 Sub celladdresses_2 Dim oCell As Object oCell = ThisComponent.Sheets(0).getCellRangeByName( "A1" ) With oCell.CellAddress MsgBox "Sheet: " & .Sheet & Chr(10) & _ "Column: " & .Column & Chr(10) & _ "Row:" & .Row End With End Sub この struct の element は ''Sheet'', ''Column'', ''Row'' の三つです。 セル範囲では ''RangeAddress'' があります。これはシートオブジェクトでも使用できます。取得する struct は .table.RangeAddress です。 Sub celladdresses_3 Dim oCell As Object oCell = ThisComponent.Sheets(0).getCellRangeByPosition( 0, 0, 0, 4 ) With oCell.RangeAddress MsgBox "Sheet: " & .Sheet & Chr(10) & _ "StartColumn: " & .StartColumn & Chr(10) & _ "StartRow:" & .StartRow & Chr(10) & _ "EndColumn: " & .EndColumn & Chr(10) & _ "EndRow: " & .EndRow End With End Sub この struct の element は ''Sheet'', ''StartColumn'', ''StartRow'', ''EndColumn'', ''EndRow'' の五つです。 ** 列インデックスから列指定形式 [#a8bbfad9] 列のインデックスからアルファベットの列形式を生成します。シート名が不要なときなどに利用できます。 Function ConvertToColumn(nColumn As Long) As String nCol = nColumn nMod = nCol mod 26 sAddr = chr(65 + nMod) nCol = (nCol - nMod) / 26 While nCol > 26 nMod = nCol mod 26 sAddr = chr(65 + nMod - 1) & sAddr nCol = (nCol - nMod) / 26 WEnd If nCol >= 1 Then sAddr = chr(65 + nCol - 1) & sAddr ConvertToColumn = sAddr End Function |