

VBA100本ノックをパクります
001:コピー&貼り付け BasicとPython
VBA100ノック 1本目
「Sheet1」のA1:C5のセル範囲を、「Sheet2」のA1:C5にコピーしてください。
値も数式も書式も全てコピーしてください。
ただしSelectメソッドは使用禁止
※行高と列幅の設定はしなくて良い。
Google先生に聞いてコピペです。Basic:
Sub M100_01()
Dim oSheet1 as Object
Dim oSheet3 as Object
oSheet1=ThisComponent.Sheets.getByName("Sheet1")
oSheet3=ThisComponent.Sheets.getByName("Sheet3")
oRangeAddress = oSheet1.getCellRangeByName("A1:C5").getRangeAddress()
'コピーする範囲を指定しています
oCellAddress = oSheet3.getCellRangeByName("A1").getCellAddress()
'貼り付け位置を指定しています
oSheet3.copyRange(oCellAddress, oRangeAddress)
'貼り付けしています
End Sub
列幅はコピーされません。
Python :
def aaa(args=None):
oDoc = XSCRIPTCONTEXT.getDocument()
oSheet1 =oDoc.Sheets[0] #大かっこ 角型の括弧 [ ] のこと
oSheet2 =oDoc.Sheets[3]
oRangeAddress = oSheet1.getCellRangeByName("A1:C5").getRangeAddress()
#コピーする範囲を指定しています
oCellAddress = oSheet2.getCellRangeByName("A1").getCellAddress()
#貼り付け位置を指定しています
oSheet2.copyRange(oCellAddress, oRangeAddress)
#貼り付けしています
002 : コピー貼り付け 数式は除く
#VBA100本ノック 2本目
「Sheet1」のA1:C5のセル範囲を、「Sheet2」のA1:C5にコピーしてください。
数式は消して値でコピー、書式もコピーしてください。
数式を取得する
sub test()
doc=thiscomponent
oSheet1=ThisComponent.Sheets.getByName("Sheet1")
oCell=oSheet1.getCellRangeByName("b1")
msgbox oCell.formula
end sub

操作を録画し、マクロに
「ツール」>「マクロ」>「マクロの記録」順番にクリックします。

マクロ記録のアイコンがないとき:
「ツール」>「オプション」と選択します。

「LibreOffice」>「詳細」>「マクロの記録~」 チェックを入れる

記録したマクロコード
Sub testMain
rem ----------------------------------------------------------------------
rem 変数宣言
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Nr"
args1(0).Value = 1
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$A$1:$C$5"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
rem ---------------------------------------------------
rem Sheetの変更
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Nr"
args4(0).Value = 2
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args4())
rem ----------------------------------------------------------------------
rem シート2のセルに移動
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "ToPoint"
args6(0).Value = "$A$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args6())
rem ----------------------------------------------------------------------
dim args7(5) as new com.sun.star.beans.PropertyValue
args7(0).Name = "Flags"
args7(0).Value = "SVDT"
args7(1).Name = "FormulaCommand"
args7(1).Value = 0
args7(2).Name = "SkipEmptyCells"
args7(2).Value = false
args7(3).Name = "Transpose"
args7(3).Value = false
args7(4).Name = "AsLink"
args7(4).Value = false
args7(5).Name = "MoveMode"
args7(5).Value = 4
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args7())
end sub
003 : 値をクリアする
VBAだと
Range("A1").CurrentRegion.Offset(1, 1).ClearContents



コメント