Top > OOoBasic > Calc > address

セルのアドレス Edit

セルのアドレスにはいくつかのあらわし方があります。それをマクロで取り扱ってみます。

文字列 Edit

ユーザーに分かりやすい文字列としてアドレスを取得してみます。これには、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" のような文字列で表示します。ダイアログなどに範囲を表示する際などには便利です。

アドレス変換 Edit

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

インデックス Edit

セルの持つプロパティーに 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 の五つです。

列インデックスから列指定形式 Edit

列のインデックスからアルファベットの列形式を生成します。シート名が不要なときなどに利用できます。

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

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes