LibreOfficeCalcのVBでシートやセルを操作する


選択中のセル情報を取得する。

ThisComponent.CurrentSelection.RangeAddress.StartRow
ThisComponent.CurrentSelection.RangeAddress.EndRow
ThisComponent.CurrentSelection.RangeAddress.StartColumn
ThisComponent.CurrentSelection.RangeAddress.EndColumn

セルを選択する。

Dim dispatcher As Object
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Dim args(0) as new com.sun.star.beans.PropertyValue
args(0).Name = "ToPoint"
args(0).Value = "$A$4"
dispatcher.executeDispatch(ThisComponent.CurrentController.Frame, ".uno:GoToCell", "", 0, args())

セルを選択する。

ThisComponent.CurrentController.Select(ThisComponent.Sheets.getByIndex(0).getCellByPosition(0, 5))
ThisComponent.CurrentController.Select(ThisComponent.Sheets.getByName("シート名").getCellRangeByName("A2:C2"))

セルから数値の取得と、セルに数値をセットする。

ThisComponent.Sheets.getByIndex(0).getCellByPosition(0, 5).getValue()
ThisComponent.Sheets.getByName("シート名").getCellRangeByName("A2").setValue(1234)

セルから文字列の取得と、セルに文字列をセットする。

ThisComponent.CurrentController.ActiveSheet.getCellByPosition(3, 0).getString()
ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B1").setString("test1")

セルに関数をセットする。

ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B5").setFormula("=SUM(B1:B4)")

セルの行と列番号を取得する。

ThisComponent.Sheets.getByIndex(0).getCellByPosition(4, 0).CellAddress.Column
ThisComponent.Sheets.getByName("シート名").getCellByPosition(3, 0).CellAddress.Row

セルの文字に色付けする。

ThisComponent.Sheets.getByIndex(0).getCellByPosition(4, 0).CharColor = rgb(255,0,0)
ThisComponent.Sheets.getByName("シート名").getCellRangeByName("A1:A2").CharColor = rgb(255,0,0)

セルの背景に色付けする。

ThisComponent.Sheets.getByIndex(0).getCellByPosition(4, 0).CellBackColor = rgb(0,255,0)   
ThisComponent.Sheets.getByName("シート名").getCellRangeByName("A1:A2").CellBackColor = rgb(0,255,0)

範囲を指定してセルをコピーする。

Dim sheet As Object
sheet = ThisComponent.Sheets.getByIndex(0)
'選択範囲をコピーする
sheet.copyRange(sheet.getCellRangeByName("コピー先").getCellAddress(), sheet.getCellRangeByName("コピー元").getRangeAddress())
'行をコピーする
sheet.copyRange(sheet.getCellRangeByName("A1").getCellAddress(), sheet.Rows(1).getRangeAddress())

指定範囲の内容や書式をすべてクリアする。

ThisComponent.Sheets.getByIndex(0).getRows.getByIndex(4).clearContents(511)

指定範囲の値のみをクリアする。

ThisComponent.Sheets.getByName("シート名").getRows.getByIndex(6).clearContents(7)

指定範囲を削除する。
(第二引数:1=UP、2=LEFT)

Dim sheet As Object
sheet = ThisComponent.Sheets.getByName("シート名")
sheet.removeRange(sheet.getCellRangeByName("A3:D10").RangeAddress, 1)

行を選択する。

ThisComponent.CurrentController.Select(ThisComponent.Sheets.getByIndex(0).getRows.getByIndex(0))

行を追加する。

ThisComponent.Sheets.getByName("シート名").getRows.insertByIndex(3, 1) '挿入位置/追加行数

行を削除する。

ThisComponent.Sheets.getByIndex(0).getRows.removeByIndex(3, 1) '削除位置/削除行数

列を選択する。

ThisComponent.CurrentController.Select(ThisComponent.Sheets.getByIndex(0).getColumns.getByIndex(0))

列を追加する。

ThisComponent.Sheets.getByName("シート名").getColumns.insertByIndex(3, 1) '挿入位置/追加列数

列を削除する。

ThisComponent.Sheets.getByIndex(0).getColumns.removeByIndex(3, 1) '削除位置/削除列数

入力規則を削除する。

ThisComponent.Sheets.getByIndex(0).getColumns.getByIndex(5).Validation.Type = 0

印刷範囲を設定する。

ThisComponent.CurrentController.ActiveSheet.setPrintAreas(Array(sheet.getCellRangeByName("A1:E30").getRangeAddress()))

現在のシートを取得する。

ThisComponent.CurrentController.ActiveSheet

シートの存在を確認する。

ThisComponent.Sheets.hasByName("シート名")

シートを選択する。

ThisComponent.CurrentController.Select(ThisComponent.Sheets.getByName("シート名").getCellRangeByName("A1"))

シートを追加する。

ThisComponent.Sheets.insertNewByName("新規シート名", 0)

シートを削除する。

ThisComponent.Sheets.removeByName("シート名")

シートをコピーする。

ThisComponent.Sheets.copyByName("コピー元", "新しいシート名", 0) '先頭に追加
ThisComponent.Sheets.copyByName("コピー元", "新しいシート名", ThisComponent.Sheets.getCount()) '末尾に追加

シートを保護、解除する。

sheet.Protect("password")
sheet.Unprotect("password")

自動再計算を無効にする。

ThisComponent.enableautomaticCalculation(False)