MOS VBAエキスパート対策 | ブックの操作 | MOS Excel VBAエキスパート対策です



最終更新日:2018-03-03

ブックの操作


・ブックを開く
・ブックを保存する
・ブックを閉じる

【ここでのポイント】

ここでの内容はかなり限られたものとなっています。
公式テキストでは、かなりあっさりした内容となっています。

VBA試験としてはあまり細かい内容は出題されないということなのだろうと思います。

しかし、実務では結構問題点が多くでてくるところでもありますし、
試験の出題範囲に入っている以上、細部についても絶対に出題されないという事ではないと思います。
従って、一通りの機能は把握しておいた方が良いので、
ブックを開くときの引数の細部や、いろいろな保存方法については必ず目を通しておいてください。

VBAベーシックでは、イベントが範囲に入っていないので、
開く・保存・閉じる、これらに伴うイベント発生は気にしなくて良いでしょう。
スタンダートを受ける人は、別途イベントの章で学んでください。


ブックを開く

他のブックを開くには、WorkBooksコレクションOpenメソッドを使います。

空の新規ブックを追加するには、WorkBooksコレクションAddメソッドを使います。

Workbooks.Openメソッド

Workbooks.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)

名前 説明
FileName 開くブックのファイル名。
UpdateLinks ファイル内の外部参照 (リンク) の更新方法を指定します。
ReadOnly ブックを読み取り専用モードで開くには、True を指定します。
Format テキスト ファイルを開く場合は、この引数で区切り文字を指定します。
Password パスワード保護されたブックを開くのに必要なパスワードを指定します。
WriteResPassword 書き込み保護されたブックに書き込みをするために必要なパスワードを指定します。
IgnoreReadOnlyRecommended [読み取り専用を推奨する] チェック ボックスをオンにして保存されたブックを開くときでも、読み取り専用を推奨するメッセージを非表示にするには、True を指定します。
Origin 開こうとしているファイルがテキスト ファイルの場合、それがどのような形式のテキスト ファイルかを指定します。
Delimiter 開こうとしているファイルがテキスト ファイルで、引数 Format が 6 の場合は、この引数で区切り文字を使用します。
Editable 開こうとしているファイルが Excel 4.0 のアドインの場合、この引数に True を指定すると、アドインがウィンドウとして表示されます。
Notify ファイルが読み取り/書き込みモードで開けない場合に、ファイルを通知リストに追加するには、True を指定します。
Converter ファイルを開くときに最初に使用するファイル コンバーターのインデックス番号を指定します。
AddToMru 最近使用したファイルの一覧にブックを追加するには、True を指定します。既定値は False です。
Local Excel の言語設定 に合わせてファイルを保存するには、True を指定します。
CorruptLoad 開くモードを、抽出モード、正常、修復モードから指定します。

戻り値
開いたブックのWorkbookオブジェクトが戻されます。

使い方については、
ベーシックでは出題範囲に無いので、気にしなくても良いです。
スタンダードでは、オブジェクト変数のところで学んでください。

太字の引数は、実務で良く使う引数になります。
従って、試験にも出る可能性があると思われます。

FileName
通常は、エクセルファイルをフルパスで指定します。

FileName:="C:\User\sample.xls"

パスが指定されていないと、カレントディレクトリーからになりますが、
そのよう使い方をせず、フルパスで指定することが基本です。

マクロを書いているブックと同一フォルダなら、

FileName:=Thisworkbook.Path & "\sample.xls"

このように指定します。

Thisworkbook.Path、これで自身のブックのパスが取得できます

UpdateLinks
外部参照 (リンク) のあるブックを開こうとする時、
この引数を省略すると、リンクの更新方法を確認するメッセージがユーザーに表示されます。

0 : 外部参照 (リンク) は更新されません。
3 : 外部参照 (リンク) が更新されます。


UpdateLinks:=0

これで、リンクが更新されずに、ブックが開かれます。
0Falseと記す事もできます、VBAでは、False=0です。


ReadOnly

ReadOnly:=True

これで、読み取り専用で開かれます。

Password、WriteResPassword
パスワード保護されているブックを開く場合には、

Password:="読取りパスワード"

WriteResPassword:="書込みパスワード"

このようにすることで、パスワード入力が出なくなります。

使用例
Workbooks.Open "C:\User\sample.xls"

このように、ファイルのみ指定する場合は、名前付き引数を使用するまでもないでしょう。

Workbooks.Open Filename:="C:\User\sample.xls", UpdateLinks:=0, ReadOnly:=True

外部参照 (リンク) は更新せずに、読み取り専用で開いています。
このように、引数が複数になる場合は、名前付き引数を使用した方が良いでしょう。


Workbooks.Addメソッド

WorkBooks.Add(Template)

名前 説明
Template 新しいブックの作成方法を指定します。
この引数を省略すると、いくつかの空白シートから構成される新しいブックが作成されます。
空白シートの数は、SheetsInNewWorkbook プロパティで設定されます。

実務では、滅多に使う事がありません。
試験には、引数を省略した場合しか出題されないはずです。

戻り値
追加された新しいブックのWorkbook オブジェクトが戻されます。


ブックを保存する

ブックの保存方法は、以下の3通りがあります。
・上書き保存
・名前を付けて保存
・コピーの保存

公式テキストには、コピー保存は書かれていないので、多分出題されないとは思いますが、
実務としては結構使う場合もありますので、ここで一緒に覚えておいた方が良いでしょう。


上書き保存
Workbook.Saveメソッド

Workbook.Save

上書き保存されます。


名前を付けて保存

Workbook.SaveAsメソッド

Workbook.SaveAs FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local

Filename 保存するファイルの名前を表す文字列を指定します。
FileFormat ファイルを保存するときのファイル形式を指定します。
Password ファイルを保護するためのパスワードを表す15 文字以内の文字列を指定します。
WriteResPassword ファイルの書き込みパスワードを表す文字列を指定します。
ReadOnlyRecommended 読み取り専用で開くことを推奨するメッセージを表示するには、True を指定します。
CreateBackup バックアップ ファイルを作成するには、True を指定します。
AccessMode ブックのアクセス モードを指定します。
ConflictResolution ブックを保存するときの競合の解決方法を指定します。
AddToMru 最近使用したファイルの一覧にブックを追加するにはTrueを指定。既定値はFalseです。
TextCodepage 使用しない。
TextVisualLayout 使用しない。
Local 通常は使用しない。
※csv出力時
 日付がm/d/yyyyになってしまう場合に、yyyy/m/dにする場合にはTrueを指定

全ての引数がオプション(任意の指定)となっていますが、通常は、FileNameは必ず指定します。

FileName
フルパスで指定して下さい。

パスを指定しない場合は、カレントフォルダーに保存されます。

FileFormat
xlExcel8 : Excel2007以降の、xlsxまたはxlsm
xlExcel9795 : Excel2003以前のxls


使用例
Workbook.SaveAs "C:\User\sample.xls"


コピーの保存

Workbook.SaveCopyAsメソッド

Workbook.SaveCopyAs Filename

ブックのコピーをファイルとして保存します。

メモリ上(開いている)のブックに対しては、変更は行われません。

バックアップの作成等で使用します。


ブックを閉じる

ワークブックを閉じる場合は、WorkBookオブジェクトCloseメソッドを使用します。

閉じる

Workbook.Closeメソッド

Workbook.Close SaveChanges, Filename, RouteWorkbook

SaveChanges ブックに変更がない場合、この引数は無視されます。ブックに変更がある場合、この引数で変更を保存するかどうかを指定します。
Filename 変更後のブックのファイル名。
RouteWorkbook ブックの回覧。

全ての引数がオプション(任意の指定)となっています。

実務としても試験対策としても、引数はSaveChangesだけ覚えれば良いはずです。

全ての引数を省略
Workbook.Close

これだけの場合は、ブックに変更が無ければそのまま閉じられ、
ブックに変更がある場合は、保存確認のメッセージが表示されます。



ただし、
Application.DisplayAlerts = False
これが指定されている場合は、確認のメッセージが表示されずに保存されます。

SaveChanges
ブックに変更がある場合に、保存するかどうかを指定します。

保存しないで閉じる
Workbook.Close SaveChanges:=False
保存して閉じる
Workbook.Close SaveChanges:=True


以下は、出題範囲に明記されていませんが、
この章で学んでおいた方が良いと思われるものになります。

複数ブックの操作

エクセルでは、複数ブックを扱います。
しかし、
ブックは複数選択は出来ません。
アクティブブックは1つだけ存在します。

ActiveWorkbook

マクロにおいて、アクティブブックを取得する場合の書き方です。


ブックをアクティブにする

Workbooks("ブック名").Activate

ブック名には、拡張子(.xls、.xlsx、.xlsm)も指定する必要があります

マクロの記録ですと、

Windows("ブック名").Activate

と記録されます。
上記、2つは、1つのブックに対し複数のウインドウを開いている時に違いが発生します。

本来は、Windows("ウインドウ名")なのですが、
ブックに対し1つしかウインドウが存在しない場合は、

ウインドウ名 = ブック名

となります。

ブックを指定する
マクロでは、アクティブブック以外のブックや、アクテイブシート以外のシーも扱えます。

操作するブックがアクティブブックなら、

Worksheets("シート名").Range("セル番地")

これで指定できますが、アクティブデック以外の場合は、

Workbooks("ブック名").Worksheets("シート名").Range("セル番地")

このように指定することで、開かれているブックなら、
どのブックのどのシートでも扱う事が出来ます。

実務で使う事はまずありませんが、
Workbooks(1)
このように、ブックのインデックス(順番)で指定することもできます。


WorkBookオブジェクトのメソッドとプロパティ

WorkBookオブジェクトには、多数のメソッドとプロパティがあります。

WorkBookのプロパティ、メソッド、イベント一覧

さすがに上記以外のメソッドは試験には出ないと思います。
プロパティについては、以下のSavedプロパティが出題可能性がありそうに思われます。

Savedプロパティ
True の場合、ブックは最後に保存された状態から変更されていません。
値の取得および設定が可能です。

変更を加えたブックを保存しない場合は、このプロパティにTrueを設定します。

使用例
他のブックが開かれている場合は、自身のブックを閉じ、
他のブックが開かれていない場合は、Excelを終了する場合。

Sub 保存して終了()
  If Workbooks.Count > 1 Then
    ThisWorkbook.Close SaveChanges:=True
  Else
    ThisWorkbook.Save
    Application.Quit
  End If
End Sub

Sub 保存しないで終了()
  If Workbooks.Count > 1 Then
    ThisWorkbook.Close SaveChanges:=False
  Else
    ThisWorkbook.Saved = True
    Application.Quit
  End If
End Sub

Application.Quit

Applicationオブジェクトのメソッドで、Excelを終了します。

ThisWorkbook.Saved = True

.Savedは、ブックが保存後に変更されたかの条法が入っています、値の設定も可能。
.SavedをTrueにすることで、保存後に変更が無い状態にすることで、
Close時に、保存確認のメッセージが表示されないようにしています。


ファイルを指定するダイアログについて

公式テキストには、「ファイルを開く」ダイアログを表示するメソッド
Application.GetOpenFilename
これだけが紹介されています。
しかし、
試験の出題範囲には、ベーシック・スタンダードともにはっきりとは明記されてはいません。
項目としては、Applicationのメソッドになりますが、この項目が無いからです。

明記されていない以上、少なくともスタンダード受験するなら知っておかなければなりませんので、
ここで学んでおいた方が良いでしょう。

「ファイルを開く」ダイアログは、Application.GetOpenFilename
「名前を付けて保存」ダイアログは、Application.GetSaveAsFilename

以下のページを一通り読んでおいてください。

第74回.ファイルを開くダイアログ(GetOpenFilename)
第75回.名前を付けて保存ダイアログ(GetSaveAsFilename)


【業務改善の実務】

実務の現場では、決められたフォルダに決められた名前のファイルが常にあるとは限りません。
むしろ、フォルダやファイル名は流動的な場合が多々あります。

日付(20180226等)のフォルダの中に入っていたり、ファイル名の後ろに日付がついていたり。
このような流動的なフォルダ・ファイルを処理するためには、
Dir関数と組み合わせて使用することになります。

また、csvファイルを読み込んで処理する場合も多く、
csvをテキストとして取り込むだけでなく、ブックとして開く場合もあります。

このように、実務では様々なパターンがあり、臨機応変な対応が必要になります。
その為には、基本のメソッドについては、しっかりと覚えておきましょう。


【本サイト内の関連ページ】





同じテーマ「MOS VBAエキスパート対策」の記事

変数と定数
セルの操作
ステートメント
ブックの操作
シートの操作
デバッグデの基礎
マクロの実行
VBAベーシック試験対策まとめ
プロシージャ
イベント
ステートメント(スタンダード)

新着記事 ・・・新着記事一覧を見る

数値範囲で表検索するVLOOKUP近似一致|エクセル関数超技(10月5日)
エクセルVBAでのシート指定方法|VBA技術解説(9月8日)
VBAのクラスとは(Class,Property,Get,Let,Set)|VBA技術解説(8月28日)
VBAこれだけは覚えておきたい必須基本例文10|VBA技術解説(8月22日)
VBAの省略可能な記述について|ExcelマクロVBA技術解説(8月11日)
複数条件判定を行う時のコツ|ExcelマクロVBA技術解説(7月11日)
For Next の使い方いろいろ|VBA技術解説(6月14日)
VBAを定型文で覚えよう|ExcelマクロVBA技術解説(3月26日)
VBAスタンダード試験対策まとめ|MOS VBAエキスパート対策(3月16日)
ユーザーフォームとメニューの操作|MOS VBAエキスパート対策(3月14日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数とデータ型(Dim)|ExcelマクロVBA入門
5.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
6.マクロって何?VBAって何?|ExcelマクロVBA入門
7.定数と型宣言文字(Const)|ExcelマクロVBA入門
8.繰り返し処理(For Next)|ExcelマクロVBA入門
9.とにかく書いて見よう(Sub,End Sub)|VBA入門
10.ひらがな⇔カタカナの変換|エクセル基本操作




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。





このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。

本文下部へ

↑ PAGE TOP