文書更新:2019年06月18日(火) 午前10時37分27秒

Home > 備忘録 > libreoffice の macro(basic) > 内部関数を使う( 95 )

内部関数を使う

  1. 引数がない場合
  2. sub goukei	'合計を求める
    	Dim sheet,range As Object
    	Dim kei As Long
    	sheet=ThisComponent.CurrentController.Activesheet
    	range=sheet.getCellRangeByName("A1:C5")
    	kei=range.computeFunction(com.sun.star.sheet.GeneralFunction.SUM)	'内部関数Sum
    end sub
  3. 引数がある場合
  4. sub kauntoif	'Countif("A1:C5",5)
    	Dim faccess,range As Object
    	Dim args(1) As Variant
    	faccess=CreateUnoService("com.sun.star.sheet.FunctionAccess")
    	range=sheet.getCellRangeByName("A1:C5")
    	aArgs(0)=range
    	aArgs(1)=5
    	faccess.callFunction("COUNTIF",args())
    end sub
  5. 利用できる内部関数例
    • SUM - 合計
    • COUNT - 個数
    • COUNTNUMS - 数値データの数
    • AVERAGE - すべての数値の平均値
    • MAX - 数値の最大値
    • MIN - 数値の最小値
    • PRODUCT - すべての数値の積
    • STDEV - 標準偏差
    • VAR - 分散
    • STDEVP - 母集団全体の標準偏差
    • VARP - 母集団全体の分散

データを配列に取り込む

  1. 方法1
  2. sub torikomi
    	Dim sheet,range,cols,rows As Object
    	Dim col,row,mdata(2,4) As Long
    	sheet=ThisComponent.CurrentController.Activesheet
    	range=sheet.getCellRangeByName("A1:C5")
    	cols=range.Columns
    	rows=range.Rows
    	for col=0 to cols.getCount()-1
    		for row=0 to rows.getCount()-1
    			mdata(col,row)=sheet.getCellByPosition(range.getRangeAddress().StartColumn+col,range.getRangeAddress().StartRow+row)
    		next row
    	next col
    end sub
  3. 方法2
  4. sub torikomi
    	Dim sheet As Object
    	Dim col,row,mdata(2,4) As Long
    	Dim data1() As Variant
    	sheet=ThisComponent.CurrentController.Activesheet
    	data1=sheet.getCellRangeByName("A1:C5").getDataArray()
    	for row=0 to Ubound(data1)
    		for col=0 to Ubound(data1(row))
    			mdata(col,row)=data1(row)(col)	'取得したデータへのアクセス
    		next col
    	next row
    end sub

配列を function や sub の返り値にする

sub demo
	dim ndata() As String
	ndata=test		'test を呼ぶ
end sub
sub test(col,row) As Object		'Object 型として定義する
	Dim mdata=Array("aaaa","bbbb","cccc")
	test=mdata
end sub

クリックしたボタンの情報を取得する

  1. ボタンを作成する
  2. ボタンにマクロを割り当てる
  3. 下記のようなマクロをボタンに割り当てると、情報取得や背景色などの変更もできる
    sub demo(evnt As Object)
    	'取得
    	MsgBox "名前: " &  evnt.Source.getModel.Name & chr(10) & _
    		"タイトル: " & evnt.Source.getModel.Label & chr(10) & _
    		"タブの順序: " & evnt.Source.getModel.TabIndex
    	'変更
    	evnt.Source.getModel.BackgroundColor=RGB(255,0,0)
    	evnt.Source.getModel.TextColor=RGB(255,0,0)
    end sub

メソッド・プロパティーの表示

sub demo
	'様式
	MsgBox xxxxx.xxxxx.DBG_Methods
	MsgBox xxxxx.xxxxx.DBG_Properties
	'例
	MsgBox ThisComponent.DBG_Methods
	MsgBox ThisComponent.DBG_Properties
end sub

列幅・行高の調整

  1. 列幅の調整
  2. sub Demo
    	'※列幅の数値はmmの100倍
    	Dim objSheet As Object
    	objSheet=ThisComponent.CurrentController.Activesheet
    	objSheet.Columns.Width=350	'sheet全体(3.5mm)
    	objSheet.Columns(1).Width=1000		'B列のみ(10mm)
    	objSheet.getCellRangeByName("A:H").Columns.Width=750	'AからH列まで(7.5mm)
    end sub
  3. 行高の調整
  4. sub Demo2
    	'※行高の数値はmmの100倍
    	Dim objSheet As Object
    	objSheet=ThisComponent.CurrentController.Activesheet
    	objSheet.Rows.Height=530	'sheet全体(5.3mm)
    	objSheet.Rows(1).Height=1000		'2行のみ(10mm)
    	objSheet.getCellRangeByName("5:8").Rows.Height=750	'5から8行(7.5mm)
    end sub