Sheets.Addアド メソッド

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

新しいワークシート・グラフ・またはマクロ シートを作成します。新しいワークシートがアクティブ シートになります。

BeforeAfterを共に省略すると、作業中のシートの直前に新しいシートが追加されます。

矛盾がなくてもBeforeAfterを同時に指定するとエラーが発生します。

構文
  1. Sheets = Sheets.Add( Before, After, Count, Type )
引数
Before (Sheets オブジェクト = EMPTYPARAM)省略可
指定したオブジェクトのシートの直前に、新しいシートを追加します。
After (Sheets オブジェクト = EMPTYPARAM)省略可
指定したオブジェクトのシートの直後に、新しいシートを追加します。
Count (Integer = 1)省略可
追加するシートの数を指定します。既定値は、選択したシートの数です。
Type (XlSheetType = xlWorksheet)省略可
ワークシートの種類を指定します。
戻り値
追加したシートのSheets オブジェクト

Sheets オブジェクトを返すメソッド・プロパティ

Sheets.Add メソッド
アクティブなブック内のすべてのグラフシートを表すSheetsコレクションを返します。
Sheets.Add メソッド
アクティブなブック内のすべてのワークシートを表すSheetsコレクションを返します。
Sheets.Add メソッド
新しいワークシート・グラフ・またはマクロ シートを作成します。新しいワークシートがアクティブ シートになります。

定数一覧

XlSheetType 列挙

名前説明
xlWorksheet-4167ワークシート
xlDialogSheet-4116ダイアログ シート
xlChart-4109Chart
xlExcel4MacroSheet3Excel バージョン 4 マクロ シート
xlExcel4IntlMacroSheet4Excel バージョン 4 International Macro シート
UWSC
CONST xlWorksheet = -4167
CONST xlDialogSheet = -4116
CONST xlChart = -4109
CONST xlExcel4MacroSheet = 3
CONST xlExcel4IntlMacroSheet = 4

使い方

シート追加

引数をすべて省略した場合、アクティブシートの直前にシートを1枚追加します。

UWSC
DIM Sheets = Excel.Sheets
Sheets.Add()

Countのみ値を指定した場合、アクティブシートの直前にシートを指定した枚数(例では2枚)追加します。

シートは1枚ずつ左側に追加されていきます。

UWSC
DIM Sheets = Excel.Sheets
Sheets.Add(Count:=2)

FOR文で書き換えると以下のような処理になります。

UWSC
DIM Sheets = Excel.Sheets
FOR i = 1 TO Count
	Sheets.Add()
NEXT

先頭に追加

一番左のシートのインデックス番号は1なので、その直前(Before)に挿入することで先頭に追加することができます。名前付き引数のBefore:=は記述しなくても大丈夫です。

UWSC
WITH Excel
	DIM Sheets = .Sheets
	Sheets.Add(Before:=.Worksheets(1))
ENDWITH

末尾に追加

一番右のシートのインデックス番号はシートの枚数に等しいので、Worksheets.Countで末尾のインデックス番号を取得することができます。その直後(After)に挿入することで末尾に追加することができます。

UWSC
WITH Excel
	DIM Sheets = .Sheets
	Sheets.Add(After:=.Worksheets(.Worksheets.Count))
ENDWITH

追加したシート名の変更

シートを追加すると追加したシートがアクティブシートになるので、ActiveSheet.Nameで追加したシートの名前を変更します。

UWSC
WITH Excel
	DIM Sheets = .Sheets
	Sheets.Add(After:=.Worksheets(.Worksheets.Count))
	.ActiveSheet.Name = "追加シート"
ENDWITH

追加シートをアクティブにしない

Sheets.Addで追加されたシートはアクティブになりますが、追加する前にアクティブだったシートを取得しシートの追加後に再度元のシートをアクティブにします。

UWSC
WITH Excel
	DIM ActiveSheet = .ActiveSheet
	DIM Sheets = .Sheets
	Sheets.Add(After:=.Worksheets(.Worksheets.Count))
	ActiveSheet.Activate
ENDWITH

プログラム実行例

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 : 開くファイルのパス名 
// 【戻り値】
//   <a href="https://uwsc.jp/com/excel/" >Excel オブジェクト</a> 
//////////////////////////////////////////////////
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
使用関数

コロナのPCR検査実施人数のグラフを生成(Excel)

オープンデータ|厚生労働省PCR検査実施人数のCSVデータを使用。

UWSC
CONST xlColumnClustered = 51

DIM Excel = CREATEOLEOBJ("Excel.Application")
Excel.Visible = TRUE
Excel.Workbooks.Open("D:\Downloads\pcr_tested_daily.csv")

DIM Range = Excel.Range("A1").CurrentRegion
DIM Charts = Excel.Charts.Add()  // Sheetsオブジェクト

WITH Charts
	.ChartType = xlColumnClustered
	.SetSourceData(Range)
ENDWITH
結果
PCR検査実施人数_データ.png PCR検査実施人数_グラフ.png
使用関数

気象庁のホームページから一月分の気温を取得しExcelでグラフを作成

UWSC
CONST xlUp = -4162
CONST xlLineMarkers = 65

DIM year = 2020
DIM month = 8

DIM IE = IEBoot()
IE.Navigate("https://www.data.jma.go.jp/obd/stats/etrn/view/daily_s1.php?prec_no=14&block_no=47412&year=" + year + "&month=" + month + "&day=&view=p1")
BusyWait(IE)

DIM array[-1][-1]
DIM element = IE.document.getElementById("tablefix1")
getTableData(element, array)

IE.Quit

DIM Excel = XLOPEN()
DIM SheetName = Excel.ActiveSheet.Name

XLSETDATA(Excel, array, "A1")

DIM row = Excel.Cells(Excel.Rows.Count, 1).End(xlUp).Row
DIM Charts = Excel.Charts.Add

WITH Charts
	.ChartType = xlLineMarkers
	.SeriesCollection.NewSeries
	.HasTitle = TRUE
	.ChartTitle.Text = "札幌 " + year + "年" + month + "月気温"

	WITH .FullSeriesCollection(1)
		.XValues = "=Sheet1!$A$5:$A$35"
		.Name = "=<#DBL>最高気温<#DBL>"
		.Values = "=Sheet1!$H$5:$H$35"
		WITH .Format
			.Fill.ForeColor.RGB = 255
			.Line.ForeColor.RGB = 255
		ENDWITH
	ENDWITH

	WITH .FullSeriesCollection(2)
		.XValues = "=Sheet1!$A$5:$A$35"
		.Name = "=<#DBL>最高気温<#DBL>"
		.Values = "=Sheet1!$I$5:$I$35"
		WITH .Format
			.Fill.ForeColor.RGB = 16711680
			.Line.ForeColor.RGB = 16711680
		ENDWITH
	ENDWITH
ENDWITH

//////////////////////////////////////////////////
// 【引数】
//   array : 要素を追加する配列(参照引数) 
//   values : 追加する要素をvalue1から指定 
// 【戻り値】
//   処理後の配列の要素の数 
//////////////////////////////////////////////////
FUNCTION arrayPush(var array[], value1 = EMPTY, value2 = EMPTY, value3 = EMPTY, value4 = EMPTY, value5 = EMPTY, value6 = EMPTY, value7 = EMPTY, value8 = EMPTY, value9 = EMPTY, value10 = EMPTY, value11 = EMPTY, value12 = EMPTY, value13 = EMPTY, value14 = EMPTY, value15 = EMPTY, value16 = EMPTY)
    DIM i = 1
    WHILE EVAL("value" + i) <> EMPTY
	  DIM res = RESIZE(array, UBound(array) + 1)
	  array[res] = EVAL("value" + i)
	  i = i + 1
	WEND
	RESULT = LENGTH(array)
FEND

//////////////////////////////////////////////////
// 【引数】
//   needle : 検索する値 
//   haystack : 配列 
// 【戻り値】
//   needleが見つかった場合に配列のキー 
//////////////////////////////////////////////////
FUNCTION arraySearch(needle, haystack[])
	DIM i = 0
	FOR item IN haystack
		IFB item = needle THEN
			RESULT = i
			EXIT
		ENDIF
		i = i + 1
	NEXT
FEND

//////////////////////////////////////////////////
// 【引数】
//   IE : IEオブジェクト 
// 【戻り値】
//   
//////////////////////////////////////////////////
PROCEDURE BusyWait(Var IE)
	SLEEP(0.500)
	DIM t = GETTIME()
	TRY
		REPEAT
			DIM tm = GETTIME() - t
			FUKIDASI("BusyWait:" + tm)
			SLEEP(0.010)
			IF tm >= 60 THEN BREAK
		UNTIL !IE.Busy AND IE.readyState = 4
	EXCEPT
		IE = getIEObj(-1)
		PRINT IE.document.URL + " のIEオブジェクトを取得しました。"
		BusyWait(IE)
	ENDTRY
	FUKIDASI()
FEND

//////////////////////////////////////////////////
// 【引数】
//   文字列 or 数値 : 取得したい<a href="https://uwsc.jp/com/ie/" >InternetExplorer オブジェクト</a>のタイトル・URLもしくは数値を指定 
//   完全一致フラグ : (TRUE : 文字列が完全一致したものを取得、FALSE : 文字列の一部を含むものを取得) 
// 【戻り値】
//   条件に一致する<a href="https://uwsc.jp/com/ie" >InternetExplorer</a> 
//////////////////////////////////////////////////
FUNCTION getIEObj(str, flg = FALSE)
	DIM Shell = CREATEOLEOBJ("Shell.Application")
	DIM ShellWindows = Shell.Windows
	DIM IE[-1]
	FOR i = 0 TO ShellWindows.Count - 1
		TRY
			IFB ShellWindows.Item(i).Name = "Internet Explorer" THEN
				arrayPush(IE, ShellWindows.Item(i))
			ENDIF
		EXCEPT
		ENDTRY
	NEXT
	SELECT CHKNUM(str)
		CASE TRUE
			IFB str = 0 THEN
				RESULT = LENGTH(IE)
			ELSE
				IF str < 0 THEN str = str + LENGTH(IE) + 1
				TRY
					RESULT = IE[str-1]
				EXCEPT
					RESULT = ERR_VALUE
				ENDTRY
			ENDIF
		CASE FALSE
			DIM pattern = IIF(flg, "^" + str + "$", str)
			DIM titleList = SLICE(IE)
			FOR i = 0 TO UBound(titleList)
				titleList[i] = titleList[i].Document.title
			NEXT
			DIM urlList = SLICE(IE)
			FOR i = 0 TO UBound(urlList)
				urlList[i] = urlList[i].Document.URL
			NEXT
			DIM num = ERR_VALUE
			SELECT TRUE
				CASE pregGrep(pattern, titleList) <> FALSE;	num = arraySearch(pregGrep(pattern, titleList)[0], titleList)
				CASE pregGrep(pattern, urlList) <> FALSE;		num = arraySearch(pregGrep(pattern, urlList)[0], urlList)
			SELEND
			TRY
				RESULT = IE[num]
			EXCEPT
				RESULT = ERR_VALUE
			ENDTRY
	SELEND
FEND

//////////////////////////////////////////////////
// 【引数】
//   table : tableエレメント 
//   arr : 取得したデータを格納する配列(参照引数) 
// 【戻り値】
//   
//////////////////////////////////////////////////
PROCEDURE getTableData(table, Var arr[][])
	rowMax = table.rows.length - 1
	colMax = 0
	FOR row = 0 TO table.rows.length - 1
		IFB table.rows(row).cells.length - 1 > colMax THEN
			colMax = table.rows(row).cells.length - 1
		ENDIF
	NEXT
	DIM arr[rowMax][colMax]
	FOR row = 0 TO table.rows.length - 1
		FOR col = 0 TO table.rows(row).cells.length - 1
			n = 0
			WHILE arr[row][col + n] <> ""
				n = n + 1
			WEND
			arr[row][col + n] = table.rows(row).cells(col).innerText
			IFB table.rows(row).cells(col).rowSpan > 1 AND table.rows(row).cells(col).colSpan > 1 THEN
				rmax = table.rows(row).cells(col).rowSpan - 1
				cmax = table.rows(row).cells(col).colSpan - 1
				FOR r = 1 TO rmax
					FOR c = 1 TO cmax
						arr[row + r][col + c] = "←"
					NEXT
				NEXT
			ENDIF
			IFB table.rows(row).cells(col).rowSpan > 1 THEN
				n = table.rows(row).cells(col).rowSpan - 1
				WHILE n
					arr[row + n][col] = "↑"
					n = n - 1
				WEND
			ENDIF
			IFB table.rows(row).cells(col).colSpan > 1 THEN
				n = table.rows(row).cells(col).colSpan - 1
				WHILE n
					arr[row][col + n] = "←"
					n = n - 1
				WEND
			ENDIF
		NEXT
	NEXT
FEND

//////////////////////////////////////////////////
// 【引数】
//   InPrivate : InPrivateブラウズ・モードを有効にするときはTRUEを指定 
// 【戻り値】
//   InternetExplorerオブジェクト 
//////////////////////////////////////////////////
FUNCTION IEBoot(InPrivate = FALSE)
	DIM IE
	SELECT InPrivate
		CASE TRUE
			DOSCMD("start iexplore -private")
			GETID("InPrivate - Internet Explorer - [InPrivate]", "IEFrame", -1)
			IE = GETACTIVEOLEOBJ("InternetExplorer.Application","InPrivate - Internet Explorer - [InPrivate]")
		CASE FALSE
			TRY
				IE = CREATEOLEOBJ("InternetExplorer.Application")
				IE.Visible = TRUE
			EXCEPT
				EXEC("C:\Program Files\Internet Explorer\iexplore.exe")
				GETID("Internet Explorer", "IEFrame", -1)
				TRY
					IE = GETACTIVEOLEOBJ("InternetExplorer.Application")	
				EXCEPT
					IE = getIEObj(-1)
				ENDTRY
			ENDTRY
	SELEND
	RESULT = IE
FEND

//////////////////////////////////////////////////
// 【引数】
//   expr : 評価する式 
//   truepart : 評価した式がTrueのときに返す値 
//   falsepart : 評価した式がFalseのときに返す値 
// 【戻り値】
//   truepart : 評価した式がTrueのとき、falsepart : 評価した式がFalseのとき 
//////////////////////////////////////////////////
FUNCTION IIF(expr, truepart, falsepart)
	IFB EVAL(expr) THEN
		RESULT = truepart
	ELSE
		RESULT = falsepart
	ENDIF
FEND

//////////////////////////////////////////////////
// 【引数】
//   pattern : 検索するパターンを表す文字列 
//   array : 検索される配列 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION pregGrep(pattern, array[], flags = 0)
	DIM res[-1]
	FOR item IN array
		IF reTest(item, pattern) THEN arrayPush(res, item)
	NEXT
	RESULT = SLICE(res)
FEND

//////////////////////////////////////////////////
// 【引数】
//   str : 正規表現による検索の対象となる文字列 
//   Pattern : 正規表現で使用するパターンを設定 
//   IgnoreCase : 大文字・小文字を区別しない場合はTrue、区別する場合はFalse 
//   Global : 文字列全体を検索する場合はTrue、しない場合はFalse 
// 【戻り値】
//   正規表現にマッチするかどうかを示すブール値 
//////////////////////////////////////////////////
FUNCTION reTest(str, Pattern, IgnoreCase = TRUE, Global = TRUE)
	DIM re = CREATEOLEOBJ("VBScript.RegExp")
	re.Pattern = Pattern
	re.IgnoreCase = IgnoreCase
	re.Global = Global
	RESULT = re.Test(str)
FEND

//////////////////////////////////////////////////
// 【引数】
//   inputs : 繰り返す文字列 
//   multiplier : inputsを繰り返す回数 
// 【戻り値】
//   inputsをmultiplier回を繰り返した文字列を返します 
//////////////////////////////////////////////////
FUNCTION strRepeat(inputs, multiplier)
	DIM res = ""
	FOR n = 1 TO multiplier
		res = res + inputs
	NEXT
	RESULT = res
FEND

//////////////////////////////////////////////////
// 【引数】
//   arrayname : 上限値を求める配列の名前 
//   dimension : 返す次元を示す整数 
// 【戻り値】
//   配列の上限値 
//////////////////////////////////////////////////
FUNCTION UBound(arrayname[], dimension = 1)
	RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")")
FEND
結果
2020年8月気温.png
使用関数

参考文献

  1. Sheets.Add メソッド (Excel) | Microsoft Learn

関連記事

XLSHEET関数 (スクリプト関数)
Sheets オブジェクト
指定されたブックまたは作業中のブックにあるすべてのシートのコレクションです。
Application.ActiveSheet プロパティ (Excel)
Worksheet オブジェクト
Sheets.Delete メソッド (Excel)
シートを削除します。
Sheets.Item プロパティ (Excel)
シートコレクションから単一のシートを返します。
Worksheets.Add メソッド (Excel)
新しいワークシート、グラフシート、またはマクロシートを作成します。
XLOPEN関数 (スクリプト関数)
XLOPEN関数は、Excelまたは OOoのCalcを起動する関数です。第一引数に読み込むファイル名(新規の場合は省略)、第二引数に起動フラグ、第三引数以降にパラメータ(パスワードや読み込み専用)を指定します。
XLSETDATA関数 (スクリプト関数)
Excelのセルに値を代入します。
PageSetup オブジェクト
Excel のシートの印刷設定を表すオブジェクトです。シートの用紙サイズ、余白、方向、印刷タイトルなど、印刷に関連する設定を管理するのに使用されます。
Application オブジェクト
Excel全体を表すオブジェクトです。Excel全体に対しての操作、設定変更をしたい場合に使います。