読者です 読者をやめる 読者になる 読者になる
スポンサーリンク

OOo CalcのBasicマクロで,セルの行・列番号を変換して,"A1"等のセル番地・アドレス表現文字列を取得する方法

OpenOffice Basic OpenOffice.org calc サンプルコード

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


OpenOffice Basicマクロで,
Calcのセルの座標を,「A1」などのアドレス表現(セル番地)に変換するサンプルコード。

つまり列番号をアルファベットにするということ。


Excel VBAだと セル.Address というメソッドだけで簡単に取得できるのだが,
Calcだと手軽な方法はない。

しかし下記のコードで,Calcでも確実にアドレス表現を取得できる。

Calcのサンプルコード

行番号・列番号から,セルの番地表現に変換するコード:

' CellAddressConversionに行番号と列番号を渡す方法
oAddrConv = ThisComponent.createInstance("com.sun.star.table.CellAddressConversion")
aAddr = CreateUnoStruct("com.sun.star.table.CellAddress")
aAddr.Row = 0 ' 行番号
aAddr.Column = 0 ' 列番号
oAddrConv.Address = aAddr

msgbox oAddrConv.UserInterfaceRepresentation 
' "A1"


シート名付きで,セルの「絶対アドレス」表現に変換するコード:

' 行番号と列番号を渡す
cell = ThisComponent.Sheets( 0 ).getCellByPosition( 0, 0 )
	
msgbox cell.AbsoluteName 
' シート名が含まれる。 "$Sheet1,$A$1"


セル範囲(range)を行番号と列番号で指定し
そのアドレス表現を得る方法:

' getCellRangeByPositionで取得したrangeのRangeAddressを使う方法
oRangeAddrConv = ThisComponent.createInstance("com.sun.star.table.CellRangeAddressConversion")
oCellRange = ThisComponent.Sheets.getCellRangeByPosition(0, 0, 1, 1, 0)
oRangeAddrConv.Address = oCellRange.RangeAddress

msgbox oRangeAddrConv.UserInterfaceRepresentation 
' "A1:B2"

コードの解説

ところで上記のコードでは,
getCellRangeByPositionで四隅を指定して
番号だけでrangeを取得している。

必要なのは行番号と列番号だけだ。

この関数があれば,わざわざ A1:C5 のようなアドレス表現を使わなくても
セル範囲を直接,オブジェクトとして取得できる。

なので,OOo Calcでは,無理して
アルファベットによるセル番地を使う必要はない。

参考資料:

AddinBox/VBAユーザーの為のOpenOffice.org 備忘録:.Address(False,False) が、また一苦労
http://blog.livedoor.jp/addinbox/arch...

  • Excel/VBA では
    • セル範囲のアドレスを "B2:D5" のように取得するには セルオブジェクト.Address ( False, False )
  • OOo.Calc/Basic では
    • 基本的にセルを「列インデックス, 行インデックス」で 扱うのがベースとなっており、元々、A1形式での扱いは不得手


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

  • アドレス変換 Edit 3.2 付近からはセルのインデックスから文字列でのアドレスへ変換するサービスがあります。


faq/6/229 - OpenOffice.org Q&A
http://oooug.jp/faq/index.php?faq%2F6...

  • getCellRangeByPosition 後の"C2:E5"スタイルでの「セルアドレスの取得」

Excel VBAの場合:

Rangeのプロパティ(Address)|ExcelマクロVBA入門
http://excel-ubara.com/excelvba1/EXCE...

  • Range("A1").Address(False, False)
    • 「A1」と表示されます。

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