Workbooks.Open メソッド

ブックを開きます。

構文
  1. Workbook = Workbooks.Open( FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad )
引数
FileName( Variant省略可
開くブックのファイル名。
UpdateLinks( Variant省略可
リンクの更新方法を指定します。省略した場合は確認メッセージが表示されます。
ReadOnly( Variant省略可
読み取り専用で開くにはTrueを指定します
Format( Variant省略可
テキストファイルを開くときの区切り文字を指定します。
Password( Variant省略可
パスワード保護されたブックを開くときに必要なパスワードを指定します。パスワードが必要なブックで省略した場合、ダイアログが表示されます。
WriteResPassword( Variant省略可
書き込みパスワードが設定されたブックを開くときの書き込みパスワードを指定します。
IgnoreReadOnlyRecommended( Variant省略可
[読み取り専用を推奨する]にチェックが入っていてもメッセージを非表示にするにはTrueを指定します。
Origin( XlPlatform省略可
テキストファイルを開くとき、テキストファイルの形式を指定します。
Delimiter( Variant省略可
引数Formatで「6」を設定しているとき、区切り文字を指定します。
Editable( Variant省略可
Notify( Variant省略可
Converter( Variant省略可
AddToMru( Variant省略可
最近使用したファイルの一覧にブックを追加するにはTrueを指定します。既定値はFalseです。
Local( Variant省略可
CorruptLoad( XlCorruptLoad省略可
戻り値
開いたブックを表すWorkbook オブジェクト

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

Application.Workbooks プロパティ
開いているすべてのワークブックを表すWorkbooks オブジェクトを返します。

定数一覧

XlPlatform 列挙

名前説明
xlMacintosh1Macintosh
xlWindows2Microsoft Windows
xlMSDOS3MS-DOS
UWSC
CONST xlMacintosh = 1
CONST xlWindows = 2
CONST xlMSDOS = 3

XlCorruptLoad 列挙

名前説明
xlNormalLoad0ブックを正常に開きます。
xlRepairFile1ブックを修復モードで開きます。
xlExtractData2ブックをデータの抽出モードで開きます。
UWSC
CONST xlNormalLoad = 0
CONST xlRepairFile = 1
CONST xlExtractData = 2

ブックを開く

指定したファイルを開く

「D:\Desktop\Book1.xlsx」を開く。

UWSC
DIM Excel = CREATEOLEOBJ("Excel.Application")
Excel.Visible = TRUE
Excel.Workbooks.Open("D:\Desktop\Book1.xlsx")

FileName を指定するときは絶対パスで指定します。カレントディレクトリがデスクトップで「Book1」と相対パスで指定してもなぜかドキュメントフォルダにある「Book1」が開く。

UWSC
Excel.Workbooks.Open("Book1")
UWSC
Excel.Workbooks.Open(GET_CUR_DIR + "\Book1")

拡張子を省略すると以下のリストで先に見つかったファイルが優先して開きます。どれも見つからなければエラーが発生します。

「Book1.xlsx」と「Book1.csv」がある場合、より上にある「Book1.xlsx」が開きます。

  1. xlsx
  2. xlsm
  3. xlsb
  4. xltx
  5. xls
  6. slk
  7. csv
  8. txt
  9. dif

読み取り専用で開く

UWSC
Excel.Workbooks.Open(FileName:="D:\Desktop\Book1.xlsx", ReadOnly:=TRUE)

外部参照のリンクを更新しないで開く

UWSC
Excel.Workbooks.Open(FileName:="D:\Desktop\Book1.xlsx", UpdateLinks:=FALSE)

パスワード保護されたブックを開く

UWSC
Excel.Workbooks.Open(FileName:="D:\Desktop\Book1.xlsx", Password:="1234")

パスワードをつけて保存するにはWorkbook.SaveAs メソッドを使います。

プログラム実行例

表の最終データの下のセルを選択

ダウンロードボタン
UWSC
CONST xlDown = -4121

DIM Excel = CREATEOLEOBJ("Excel.Application")
Excel.Visible = TRUE
Excel.Workbooks.Open("C:\Users\Owner\Downloads\東京月別平均気温(2000-2019年).xlsx")

Excel.Range("B4").End(xlDown).Offset(1).Select
    (3)
  1. Excel.Application.Visible(4)
  2. (5) (7) (7) (7)

予定データをExcelから読み込み追加する(Outlook)

ダウンロードボタン
UWSC
CONST xlUp = -4162
CONST olAppointmentItem = 1

HASHTBL reminders
reminders["なし"] = -1;       reminders["0分"] = 0;       reminders["5分"] = 5
reminders["10分"] = 10;       reminders["15分"] = 15;     reminders["30分"] = 30
reminders["1時間"] = 60;      reminders["2時間"] = 120;   reminders["3時間"] = 180
reminders["4時間"] = 240;     reminders["5時間"] = 300;   reminders["6時間"] = 360
reminders["7時間"] = 420;     reminders["8時間"] = 480;   reminders["9時間"] = 540
reminders["10時間"] = 600;    reminders["11時間"] = 660;  reminders["0.5日"] = 720
reminders["18時間"] = 1080;   reminders["1日"] = 1440;    reminders["2日"] = 2880
reminders["3日"] = 4320;      reminders["4日"] = 5760;    reminders["1週"] = 10080
reminders["2週"] = 20160

DIM Excel = CREATEOLEOBJ("Excel.Application")
Excel.Visible = TRUE
DIM Workbook = Excel.Workbooks.Open("D:\Desktop\予定一覧.xlsx")

DIM MaxRow = Excel.Cells(Excel.Rows.Count, 1).End(xlUp).Row

DIM Outlook = CREATEOLEOBJ("Outlook.Application")
DIM AppointmentItem = Outlook.CreateItem(olAppointmentItem)

FOR row = 2 TO MaxRow
	PRINT row
	WITH AppointmentItem
		.Subject = Excel.Cells(row, 2).Value        // 件名
		.Location = Excel.Cells(row, 3).Value       // 場所
		.Start = Excel.Cells(row, 4).Value          // 開始時刻
		.End = Excel.Cells(row, 5).Value            // 終了時刻
		IF Excel.Cells(row, 6).Value = "○" THEN .AllDayEvent = TRUE     // 終日
		IFB reminders[Excel.Cells(row, 7).Value] <> -1 THEN
			.ReminderSet = TRUE
			.ReminderMinutesBeforeStart = reminders[Excel.Cells(row, 7).Value]     // リマインダー
		ELSE
			.ReminderSet = FALSE
		ENDIF
		.BusyStatus = 1                             // 公開方法
		.Body = Excel.Cells(row, 8).Value           // 本文
		.Save
	ENDWITH
NEXT

MSGBOX((MaxRow - 1) + "件の予定を登録しました。")

Outlook.Quit
Excel.Quit

//////////////////////////////////////////////////
// 【引数】
//   serial : 時間を表すシリアル値を指定 
// 【戻値】
//   
//////////////////////////////////////////////////
FUNCTION Minute(serial)
	RESULT = REPLACE(FORMAT(INT(serial * 1440) MOD 60, 2), " ", "0")
FEND
    (15,21)
  1. Excel.Application.Visible(16)
  2. (17) (19) (22) (26)
  3. Outlook.AppointmentItem.Subject(27)
  4. Outlook.AppointmentItem.Location(28)
  5. (29) (30) (31) (33,36) (34)
  6. Outlook.AppointmentItem.BusyStatus(38)
  7. (39) (40) (44)
  8. Outlook.Application.Quit(46)
  9. (47)

コロナのグラフ

UWSC
CONST xlDown = -4121
CONST xlColumnClustered = 51
CONST xlCategory = 1
CONST xlValue = 2
CONST xlLine = 4
CONST msoThemeColorText2 = 15
CONST msoThemeColorBackground1 = 14

DIM Excel = CREATEOLEOBJ("Excel.Application")

WITH Excel
	.Visible = TRUE
	.Workbooks.Open("D:\Downloads\covid19_data.csv")

	DIM ws = .ActiveSheet
	DIM ws2 = .Worksheets.Add(EMPTYPARAM, .Worksheets(.Worksheets.Count))
	ws2.Name = "7日間平均"
	ws.Range("1:1").Copy(ws2.Range("1:1"))
	ws.Range("A:D").Copy(ws2.Range("A:D"))
	ws.Range("W:AB").Copy(ws2.Range("W:AB"))
	ws2.Range("E8").Value = "=INT(SUM(covid19_data!E2:E8)/7)"
	ws2.Range("E8").AutoFill(ws2.Range("E8:V8"))
	DIM lastRow = ws.Range("B2").End(xlDown).Row	
	ws2.Range("E8:V8").AutoFill(ws2.Range("E8:V" + lastRow))

	DIM Chart

	// 検査数
	Chart = .Charts.Add
	.ActiveSheet.Move(EMPTYPARAM, .Sheets(.Sheets.Count))
	.ActiveSheet.Name = "検査数"

	WITH Chart
		.ChartType = xlColumnClustered
		.SetSourceData(ws.Range("covid19_data!$E:$E"))
	
		WITH .SeriesCollection(1)
			.Name = "日検査数"
			.XValues = "covid19_data!$Y2:$Y" + lastRow
			WITH .Format.Line
				.ForeColor.ObjectThemeColor = msoThemeColorText2
				.ForeColor.TintAndShade = 0
				.ForeColor.Brightness = 0.6000000238
				.Transparency = 0
			ENDWITH
		ENDWITH

		WITH .Axes(xlCategory)
			.MinimumScale = dateSerial(2020, 1, 1)		//43831
			.MajorUnit = 4
			.TickLabels.Font.Size = 14
		ENDWITH
	
		WITH .Axes(xlValue)
			.HasMajorGridLines = TRUE
			.HasMinorGridLines = TRUE
			.MinimumScale = 0
			.MajorUnit = 5000
			.MinorUnit = 1000
			.TickLabels.Font.Size = 14
		ENDWITH
	ENDWITH	

	// 陽性数
	Chart = .Charts.Add
	.ActiveSheet.Move(EMPTYPARAM, .Sheets(.Sheets.Count))
	.ActiveSheet.Name = "陽性者数"

	WITH Chart
		.ChartType = xlColumnClustered
		.SetSourceData(ws.Range("covid19_data!$G2:$G" + lastRow))
		.SeriesCollection.NewSeries
		.SeriesCollection(2).Values = "='7日間平均'!$G2:$G" + lastRow

		// 日付
		WITH .SeriesCollection(1)
			.Name = "日陽性数"
			.XValues = "covid19_data!$Y2:$Y" + lastRow
			WITH .Format.Line
				.ForeColor.ObjectThemeColor = msoThemeColorText2
				.ForeColor.TintAndShade = 0
				.ForeColor.Brightness = 0.6000000238
				.Transparency = 0
			ENDWITH
		ENDWITH
	
		// 7日間平均
		WITH .SeriesCollection(2)
			.Name = "7日間平均"
			.ChartType = xlLine
			.Format.Line.ForeColor.RGB = RGBToColor(0, 112, 192)
		ENDWITH
	
		// x軸
		WITH .Axes(xlCategory)
			.MinimumScale = dateSerial(2020, 1, 1)		//43831
			.MajorUnit = 4
			.TickLabels.Font.Size = 14
		ENDWITH
	
		// y軸
		WITH .Axes(xlValue)
			.HasMajorGridLines = TRUE
			.HasMinorGridLines = TRUE
			.MinimumScale = 0
			.MajorUnit = 5000
			.MinorUnit = 1000
			.TickLabels.Font.Size = 14
		ENDWITH
	ENDWITH

	// 死亡数
	Chart = .Charts.Add
	.ActiveSheet.Move(EMPTYPARAM, .Sheets(.Sheets.Count))
	.ActiveSheet.Name = "死亡数"
	
	WITH Chart
		.ChartType = xlColumnClustered
		.SetSourceData(ws.Range("covid19_data!$O2:$O" + lastRow))
		.SeriesCollection.NewSeries
		.SeriesCollection(2).Values = "='7日間平均'!$O2:$O" + lastRow

		WITH .SeriesCollection(1)
			.Name = "日死亡数"
			.XValues = "covid19_data!$Y2:$Y" + lastRow
			WITH .Format.Line
				.ForeColor.ObjectThemeColor = msoThemeColorBackground1
				.ForeColor.TintAndShade = 0
				.ForeColor.Brightness = -0.150000006
				.Transparency = 0
			ENDWITH
		ENDWITH

		WITH .SeriesCollection(2)
			.Name = "7日間平均"
			.ChartType = xlLine
			WITH .Format.Line
				.Weight = 2.5
				.Transparency = 0
				.ForeColor.ObjectThemeColor = msoThemeColorBackground1
				.ForeColor.TintAndShade = 0
				.ForeColor.Brightness = -0.5
			ENDWITH
		ENDWITH	

		WITH .Axes(xlCategory)
			.MinimumScale = dateSerial(2020, 1, 1)		//43831
			.MajorUnit = 4
			.TickLabels.Font.Size = 14
		ENDWITH

		WITH .Axes(xlValue)
			.HasMajorGridLines = TRUE		// 軸あり
			.HasMinorGridLines = TRUE		// 目盛線あり
			.MinimumScale = 0				// 最小値
			.TickLabels.Font.Size = 14		// フォントサイズ
		ENDWITH
	ENDWITH

	// 死亡累計
	Chart = .Charts.Add
	.ActiveSheet.Move(EMPTYPARAM, .Sheets(.Sheets.Count))
	.ActiveSheet.Name = "死亡累計"
	
	WITH Chart
		.ChartType = xlColumnClustered
		.SetSourceData(ws.Range("covid19_data!$P2:$P" + lastRow))
				
		WITH .SeriesCollection(1)
			.Name = "死亡累計"
			.XValues = "covid19_data!$Y2:$Y" + lastRow
			WITH .Format.Line
				.ForeColor.ObjectThemeColor = msoThemeColorBackground1
				.ForeColor.TintAndShade = 0
				.ForeColor.Brightness = -0.150000006
				.Transparency = 0
			ENDWITH
		ENDWITH
		
		WITH .Axes(xlCategory)
			.MinimumScale = dateSerial(2020, 1, 1)		//43831
			.MajorUnit = 4
			.TickLabels.Font.Size = 14
		ENDWITH

		WITH .Axes(xlValue)
			.HasMajorGridLines = TRUE		// 軸あり
			.MinimumScale = 0				// 最小値
			.TickLabels.Font.Size = 14		// フォントサイズ
		ENDWITH

		.ChartTitle.Delete

	ENDWITH

ENDWITH

//////////////////////////////////////////////////
// 【引数】
//   year : 年 
//   month : 月 
//   day : 日 
// 【戻値】
//   シリアル値 
//////////////////////////////////////////////////
FUNCTION dateSerial(year, month, day)
	month = REPLACE(FORMAT(month, 2), " ", "0")
	day = REPLACE(FORMAT(day, 2), " ", "0")
	d = GETTIME(0, year + "/" + month + "/" + day)
	RESULT = uwscToSerial(d)
FEND

//////////////////////////////////////////////////
// 【引数】
//   r : 赤成分 
//   g : 緑成分 
//   b : 青成分 
// 【戻値】
//   Color値 
//////////////////////////////////////////////////
FUNCTION RGBToColor(r, g, b)
	RESULT = r + g * 256 + b * 65536
FEND

//////////////////////////////////////////////////
// 【引数】
//   uwscTime : UWSC時間 
// 【戻値】
//   シリアル値 
//////////////////////////////////////////////////
FUNCTION uwscToSerial(uwscTime)
	uwscDate = uwscTime / 86400
	RESULT = 36526 + uwscDate
FEND
    (9)
  1. Excel.Visible(12)
  2. (13)
  3. Excel.ActiveSheet(15)
  4. (16) (17) (18)
  5. Excel.Worksheet.Range.Value(21)
  6. Excel.Worksheet.Range.AutoFill(22,24)
  7. (23) (23) (29)
  8. Excel.Charts.Add(29,65,113)
  9. Excel.ActiveSheet.Move(30,66,114)
  10. (30,66,114)
  11. Excel.Sheets.Count(30,66,114)
  12. (31,67,115) (34,70,118)
  13. Excel.Chart.SetSourceData(35,71,,119)
  14. (37,72,76,88,134)
  15. Excel.Chart.SeriesCollection.Name(38,77,89,135)
  16. Excel.Chart.SeriesCollection.XValue(39,78)
  17. Excel.Chart.SeriesCollection.Format(40,79)
  18. Excel.Chart.SeriesCollection.Format.Line(41,79,136)
  19. Excel.Chart.SeriesCollection.Format.Line.ForeColor.ObjectThemeColor(41,80,140)
  20. Excel.Chart.SeriesCollection.Format.Line.ForeColor.TintAndShade(42,81,141)
  21. Excel.Chart.SeriesCollection.Format.Line.ForeColor.Brightness(43,82,142)
  22. Excel.Chart.Axes(48,95,102)
  23. (49)
  24. Excel.Chart.Axes.MinimumScale(49,57,96,105)
  25. Excel.Chart.Axes.MajorUnit(50,97)
  26. Excel.Chart.Axes.TickLabels.Font.Size(51,60,98,108)
  27. Excel.Chart.Axes.HasMajorGridLines(55,103)
  28. Excel.Chart.Axes.HasMinorGridLines(56,104)
  29. Excel.Chart.Axes.MajorUnit(58,106)
  30. Excel.Chart.Axes.MinorUnit(59,107)
  31. Excel.Chart.SeriesCollection.NewSeries(72,120)
  32. Excel.Chart.SeriesCollection.Values(73,121)
  33. Excel.Chart.SeriesCollection.ChartType(90,136)
  34. Excel.Chart.SeriesCollection.Format.Line.ForeColor.RGB(91)
  35. (91)
  36. Excel.Chart.SeriesCollection.Format.Line.Weight(138)
  37. Excel.Chart.SeriesCollection.Format.Line.Transparency(139)