ExcelBootエクセルブート関数

本ページには広告が含まれています。

Excelで新規ブックの作成、既存ファイルを開く処理を関数化したものです。引数を指定しなかった場合は新規ブックを開き、引数を指定した場合はそのパスのブックを開きます。

構文
  1. Excel = ExcelBoot( path )
引数
path 省略可
開くファイルのパス名
戻り値
Excel オブジェクト

プログラム

UWSC
//////////////////////////////////////////////////
// 【引数】
//   path : 開くファイルのパス名 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION ExcelBoot(path = "")
	DIM Excel = CREATEOLEOBJ("Excel.Application")
	Excel.Visible = TRUE
	IFB path = "" THEN
		Excel.Workbooks.Add
	ELSE
		DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
		IFB FSO.GetParentFolderName(path) = "" THEN
			path = GET_CUR_DIR + "\" + path
		ENDIF
		Excel.Workbooks.Open(path)
	ENDIF
	RESULT = Excel
FEND

解説

  1. 2行目
    UWSC
    	DIM Excel = CREATEOLEOBJ("Excel.Application")
    Excel オブジェクトを生成しExcelに代入します。
  2. 3行目
    UWSC
    	Excel.Visible = TRUE
    Excelを表示します。
  3. 4,6,12行目
    UWSC
    	IFB path = "" THEN
    		…
    	ELSE
    		…
    	ENDIF
    pathが空文字列ならば5行目>>>、そうでなければ7行目>>>
  4. 5行目
    UWSC
    		Excel.Workbooks.Add
    ワークブックを追加します。
  5. 7-11行目
    UWSC
    		DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
    		IFB FSO.GetParentFolderName(path) = "" THEN
    			path = GET_CUR_DIR + "\" + path
    		ENDIF
    		Excel.Workbooks.Open(path)
    親フォルダ名を取得できなければカレントディレクトリとpathを繋げて絶対パスにし、そのパスにあるファイルを開く。
  6. 13行目
    UWSC
    	RESULT = Excel
    Excel オブジェクトを戻り値として返す。

使い方

新規ブックの作成

新規ブックを作成し、生成したExcel オブジェクトExcelに代入します。

UWSC
DIM Excel = ExcelBoot()

指定したパスのブックを開く

生成したExcel オブジェクトExcelに代入し、「D:\Documents\Book1.xlsx」を開きます。

UWSC
DIM Excel = ExcelBoot("D:\Documents\Book1.xlsx")

プログラム実行例

罫線を引く

UWSC
CONST xlEdgeTop = 8
CONST xlDiagonalUp = 6
CONST xlDouble = -4119
CONST xlDash = -4115
CONST xlContinuous = 1

DIM Excel = ExcelBoot()

WITH Excel
	.Range("B2").Borders.LineStyle = xlContinuous
	.Range("B4").Borders(xlEdgeTop).LineStyle = xlDash
	.Range("B6").Borders(xlDiagonalUp).LineStyle = xlDouble
	.Range("D2:F6").Borders.LineStyle = xlContinuous
ENDWITH

//////////////////////////////////////////////////
// 【引数】
//   path : 開くファイルのパス名 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION ExcelBoot(path = "")
	DIM Excel = CREATEOLEOBJ("Excel.Application")
	Excel.Visible = TRUE
	IFB path = "" THEN
		Excel.Workbooks.Add
	ELSE
		DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
		IFB FSO.GetParentFolderName(path) = "" THEN
			path = GET_CUR_DIR + "\" + path
		ENDIF
		Excel.Workbooks.Open(path)
	ENDIF
	RESULT = Excel
FEND
使用関数

相対座標

UWSC
DIM Excel = ExcelBoot()

WITH Excel.Range("E5")
	FOR r = -3 TO 3
		FOR c = -3 TO 3
			DIM Range = .Offset(r, c)
			Range.Value = "(" + r + ", " + c + ")"
			IF r = 0 AND c = 0 THEN Range.Value = "基準セル"
		NEXT
	NEXT
ENDWITH

//////////////////////////////////////////////////
// 【引数】
//   path : 開くファイルのパス名 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION ExcelBoot(path = "")
	DIM Excel = CREATEOLEOBJ("Excel.Application")
	Excel.Visible = TRUE
	IFB path = "" THEN
		Excel.Workbooks.Add
	ELSE
		DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
		IFB FSO.GetParentFolderName(path) = "" THEN
			path = GET_CUR_DIR + "\" + path
		ENDIF
		Excel.Workbooks.Open(path)
	ENDIF
	RESULT = Excel
FEND
結果
.png
使用関数

2軸のグラフを作成する

UWSC
CONST xlLine = 4
CONST xlColumnClustered = 51
CONST xlMarkerStyleCircle = 8
CONST xlValue = 2
CONST xlSecondary = 2

DIM Excel = ExcelBoot("東京の気温と降水量(2019年).xlsx")
DIM SheetName = "Sheet1"

DIM Charts = Excel.Charts.Add
DIM Series

Charts.ChartArea.ClearContents

Series = Charts.SeriesCollection.NewSeries

WITH Series
	WITH Charts.Axes(xlValue)
		.HasTitle = TRUE
		.AxisTitle.Caption = "気温[℃]"
	ENDWITH
	.ChartType = xlLine
	.MarkerStyle = xlMarkerStyleCircle
	.XValues = Excel.Worksheets(SheetName).Range("B5:B16")
	.Values = Excel.Worksheets(SheetName).Range("C5:C16")
	.Name = Excel.Worksheets(SheetName).Range("C4")
	.Format.Line.ForeColor.RGB = 255
	.MarkerBackgroundColor = 255
ENDWITH

Series = Charts.SeriesCollection.NewSeries

WITH Series
	.ChartType = xlLine
	.MarkerStyle = xlMarkerStyleCircle
	.XValues = Excel.Worksheets(SheetName).Range("B5:B16")
	.Values = Excel.Worksheets(SheetName).Range("D5:D16")
	.Name = Excel.Worksheets(SheetName).Range("D4")
	.Format.Line.ForeColor.RGB = 16711680
	.MarkerBackgroundColor = 16711680
ENDWITH

Series = Charts.SeriesCollection.NewSeries

WITH Series
TEXTBLOCK
	WITH Charts.Axes(xlValue)
		.HasTitle = TRUE
		.AxisTitle.Caption = "降水量[mm]"
	ENDWITH
ENDTEXTBLOCK
	.ChartType = xlColumnClustered
	.XValues = Excel.Worksheets(SheetName).Range("B5:B16")
	.Values = Excel.Worksheets(SheetName).Range("E5:E16")
	.Name = Excel.Worksheets(SheetName).Range("E4")
	.Format.Line.ForeColor.RGB = 10341600
	.AxisGroup = xlSecondary
ENDWITH

//////////////////////////////////////////////////
// 【引数】
//   path : 開くファイルのパス名 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION ExcelBoot(path = "")
	DIM Excel = CREATEOLEOBJ("Excel.Application")
	Excel.Visible = TRUE
	IFB path = "" THEN
		Excel.Workbooks.Add
	ELSE
		DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
		IFB FSO.GetParentFolderName(path) = "" THEN
			path = GET_CUR_DIR + "\" + path
		ENDIF
		Excel.Workbooks.Open(path)
	ENDIF
	RESULT = Excel
FEND
使用関数

ソート

人口の多い順にソートします。

使用したファイルをダウンロードできます。

[download "/example/510/都道府県別人口.xlsx"]
UWSC
CONST xlDown = -4121
CONST xlSortOnValues = 0
CONST xlDescending = 2
CONST xlSortNormal = 0
CONST xlYes = 1
CONST xlGuess = 0
CONST xlTopToBottom = 1
CONST xlPinYin = 1

DIM Excel = ExcelBoot("D:\Documents\都道府県別人口.xlsx")

WITH Excel.ActiveSheet
	WITH .Sort
		WITH .SortFields
			.Clear
			.Add(Excel.Range("C2").End(xlDown), xlSortOnValues, xlDescending, xlSortNormal)
		ENDWITH
		.SetRange(Excel.Range("A1").CurrentRegion)
		.Header = xlYes
		.MatchCase = FALSE
		.Orientation = xlTopToBottom
		.SortMethod = xlPinYin
		.Apply		
	ENDWITH
ENDWITH

//////////////////////////////////////////////////
// 【引数】
//   path : 開くファイルのパス名 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION ExcelBoot(path = "")
	DIM Excel = CREATEOLEOBJ("Excel.Application")
	Excel.Visible = TRUE
	IFB path = "" THEN
		Excel.Workbooks.Add
	ELSE
		DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
		IFB FSO.GetParentFolderName(path) = "" THEN
			path = GET_CUR_DIR + "\" + path
		ENDIF
		Excel.Workbooks.Open(path)
	ENDIF
	RESULT = Excel
FEND
使用関数
解説

指定したシートが存在するか

Sheet1〜Sheet5のシートが存在するか調べます。

存在しなければExcel.Sheets(SheetName)でエラーを出すので、存在有無を確認できます。

UWSC
DIM Excel = ExcelBoot()

FOR n = 1 TO 5
	TRY
		DIM SheetName ="Sheet" + n
		DIM Worksheet = Excel.Sheets(SheetName)
		PRINT SheetName + "は存在します"
	EXCEPT
		PRINT SheetName + "は存在しません"
	ENDTRY
NEXT

//////////////////////////////////////////////////
// 【引数】
//   path : 開くファイルのパス名 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION ExcelBoot(path = "")
	DIM Excel = CREATEOLEOBJ("Excel.Application")
	Excel.Visible = TRUE
	IFB path = "" THEN
		Excel.Workbooks.Add
	ELSE
		DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
		IFB FSO.GetParentFolderName(path) = "" THEN
			path = GET_CUR_DIR + "\" + path
		ENDIF
		Excel.Workbooks.Open(path)
	ENDIF
	RESULT = Excel
FEND
結果
プレーンテキスト
Sheet1は存在します
Sheet2は存在します
Sheet3は存在します
Sheet4は存在しません
Sheet5は存在しません
使用関数

人口の上位3位取得

上位3位まで赤文字にする。

使ったファイルのダウンロードは下記リンクからできます。

[download "/example/510/都道府県別人口.xlsx"]
UWSC
DIM Excel = ExcelBoot("都道府県別人口.xlsx")

CONST xlDown = -4121
CONST xlTop10Top = 1

WITH Excel
	.Range("A:E").EntireColumn.AutoFit
	FOR col = 3 TO 5
		DIM Top10 = .Range(.Cells(2, col), .Cells(48, col)).FormatConditions.AddTop10
		WITH Top10
			.Rank = 3
			.TopBottom = xlTop10Top
			.Font.Color = 255
			.Font.Bold = TRUE
		ENDWITH
	NEXT
ENDWITH

//////////////////////////////////////////////////
// 【引数】
//   path : 開くファイルのパス名 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION ExcelBoot(path = "")
	DIM Excel = CREATEOLEOBJ("Excel.Application")
	Excel.Visible = TRUE
	IFB path = "" THEN
		Excel.Workbooks.Add
	ELSE
		DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
		IFB FSO.GetParentFolderName(path) = "" THEN
			path = GET_CUR_DIR + "\" + path
		ENDIF
		Excel.Workbooks.Open(path)
	ENDIF
	RESULT = Excel
FEND
結果
.png
使用関数

九九の表を作る

UWSC
DIM Excel = ExcelBoot()

WITH Excel
	DIM Cells1 = .Cells(2, 2)
	DIM Cells2 = .Cells(11, 11)
	.Range(Cells1, Cells2).Borders.LineStyle = xlContinuous

	DIM size = 25
	.Cells.ColumnWidth = size * (.Range("A1").ColumnWidth / .Range("A1").Width)
	.Cells.RowHeight = size

	.Range("B2:B11").Interior.Color = 255 + 204 * 256 + 255 * 65536
	WITH .Range("B3")
		.Value = 1
		.AutoFill(.Resize(9), xlLinearTrend)
	ENDWITH

	.Range("B2:K2").Interior.Color = 255 + 204 * 256 + 255 * 65536
	WITH .Range("C2")
		.Value = 1
		.AutoFill(.Resize(, 9), xlLinearTrend)
	ENDWITH

	.Range("C3").Value = "=$B3*C$2"
	.Range("C3").AutoFill(.Range("C3:K3"), xlFillDefault)
	.Range("C3:K3").AutoFill(.Range("C3:K11"), xlFillDefault)

	.Range("B2:K2").Borders(xlEdgeBottom).LineStyle = xlDouble
	.Range("B2:B11").Borders(xlEdgeRight).LineStyle = xlDouble
	.Range(Cells1, Cells2).BorderAround(xlContinuous, xlThick)

ENDWITH

//////////////////////////////////////////////////
// 【引数】
//   path : 開くファイルのパス名 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION ExcelBoot(path = "")
	DIM Excel = CREATEOLEOBJ("Excel.Application")
	Excel.Visible = TRUE
	IFB path = "" THEN
		Excel.Workbooks.Add
	ELSE
		DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
		IFB FSO.GetParentFolderName(path) = "" THEN
			path = GET_CUR_DIR + "\" + path
		ENDIF
		Excel.Workbooks.Open(path)
	ENDIF
	RESULT = Excel
FEND
結果
.png
使用関数

関連記事

XLOPEN関数 (スクリプト関数)
XLOPEN関数は、Excelまたは OOoのCalcを起動する関数です。第一引数に読み込むファイル名(新規の場合は省略)、第二引数に起動フラグ、第三引数以降にパラメータ(パスワードや読み込み専用)を指定します。
XLSETDATA関数 (スクリプト関数)
Excelのセルに値を代入します。
XLSHEET関数 (スクリプト関数)
PageSetup オブジェクト
Excel のシートの印刷設定を表すオブジェクトです。シートの用紙サイズ、余白、方向、印刷タイトルなど、印刷に関連する設定を管理するのに使用されます。
Application オブジェクト
Excel全体を表すオブジェクトです。Excel全体に対しての操作、設定変更をしたい場合に使います。
Border オブジェクト
上下左右一つひとつの罫線を表します。
Characters オブジェクト
オブジェクトに含まれる文字列の文字を表します。
Charts オブジェクト
指定されたブックまたは作業中のブックにあるすべてのグラフシートのコレクションです。
Comment オブジェクト
セルに関連付けられたコメントを表します。
FullSeriesCollection オブジェクト
グラフのデータ系列を表すコレクション。