Calcマクロ100本ノック

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

コメント

タイトルとURLをコピーしました