VBAエキスパート対策
ブックの操作

Excel VBAエキスパート対策です
最終更新日:2019-08-25

ブックの操作


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


【ここでのポイント】

ここでの内容はかなり限られたものとなっています。
公式テキストでは、かなりあっさりした内容となっています。
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

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

MOS VBA 画像

ただし、
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のプロパティ、メソッド、イベント一覧
エクセルの基本であるWorkBookオブジェクトのプロパティメソッドイベントの一覧です。覚えるというより必要に応じて調べて使うものになります。WorkBookオブジェクトのプロパティ一覧 WorkBookオブジェクトのメソッド一覧 名前 説明 AcceptAllChanges 指定された共有ブックのすべての変更を反映します。

さすがに上記以外のメソッドは試験には出ないと思います。
プロパティについては、以下の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)
VBAで開くファイルがあらかじめ決められたフォルダに決められたファイル名で存在していないような場合にはユーザーに開くフイルを選択してもらう必要があります。ユーザーに開くフイルを選択してもらうにはApplicationオブジェクトのGetOpenFilenameメソッドである[ファイルを開く]ダイアログボックスを使用します。
第75回.名前を付けて保存ダイアログ(GetSaveAsFilename)
VBAで保存するExcelファイルの保存先フォルダとファイル名をあらかじめ決めておけない場合はユーザーに保存先フォルダとファイル名を指定してもらう必要があります。ユーザーに保存するフイルを指定してもらうにはApplicationオブジェクトのGetSaveAsFilenameメソッドである[名前を付けて保存]ダイアログボックスを使用します。

【業務改善の実務】

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

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

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

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

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

第27回.ブック・シートの選択(Select,Activate)
エクセルでは、複数ブックを扱います、そして、それぞれのブックには、複数のシートが存在します。従って、マクロVBAでも複数ブック・複数シートを扱う必要があります。ここまでのVBAでは、あくまでアクティブブックのアクティブシートを対象としてきました。
第37回.ブック・シートの指定
ここまでのVBA入門ではアクティブブックのアクティブシートだけを扱ってきました。アクティブブックのアクティブシートとは一番手前に表示されているブックの選択しているシートで通常手作業で操作しているシートの事になります。手作業ではアクティブブックのアクティブシートしか扱えませんが(作業グループで複数のシートに同時に操作するのは別の話として) アクティブブック…
第63回.ブックを開く(Open)
他のブックを開く方法です、しかし、これがでは結構いろいろあるのです。Excelで開くことが出来るファイルはCSV等のテキストファイルもありますが、ここではエクセルファイル限定で説明します。テキストファイルやCSVについては、別の記事を参考にして下さい。
第64回.ブックを閉じる・保存(Close,Save,SaveAs)
ワークブックを閉じる場合や保存する場合のVBAの説明です。閉じる時に保存するか保存しないかを指定できます、また、ブックを保存するにも、上書きなのか別ファイルにするのか等によってVBAの記述がそれぞれ違ってきます。ブックを閉じる ブックを閉じるには、WorkbookのCloseメソッドを使用します。

第74回.ファイルを開くダイアログ(GetOpenFilename)
VBAで開くファイルがあらかじめ決められたフォルダに決められたファイル名で存在していないような場合にはユーザーに開くフイルを選択してもらう必要があります。ユーザーに開くフイルを選択してもらうにはApplicationオブジェクトのGetOpenFilenameメソッドである[ファイルを開く]ダイアログボックスを使用します。
第75回.名前を付けて保存ダイアログ(GetSaveAsFilename)
VBAで保存するExcelファイルの保存先フォルダとファイル名をあらかじめ決めておけない場合はユーザーに保存先フォルダとファイル名を指定してもらう必要があります。ユーザーに保存するフイルを指定してもらうにはApplicationオブジェクトのGetSaveAsFilenameメソッドである[名前を付けて保存]ダイアログボックスを使用します。

第17回.セルにブック・シートを指定する
VBAで自動化する時にシートが1つという事はむしろ稀で多くの場合は複数のブック複数のシートを扱う事になりますそこでどのブックのどのシートのセルかを指定する必要が出てきます。RangeやCellsでセルを指定するだけではどのブックのどのシートか分からない… RangeやCellsだけを書いた場合には
第19回.ブックを開く・閉じる・保存する
VBAで最も便利に感じるのが他のブックからデータを取得したり他のブックのデータを変更したりする場合でしょう関数では出来ない完全自動化のシステムが作成できます。ブック(Excelファイル)を扱う上で一番の問題はそのファイルがどこにあるかつまりどこのフォルダに入っているかを特定しなければならない点です。
ブックを安全確実に開く方法(Open)
マクロVBAの中で、他のブックを開く事はよくあります、ブックを開く時、ブックが存在しているか、既に開いてないか これらのチェックをせずに開いてしまうと、マクロがエラー停止してしまいます。ここでは、これらのチェック方法についての具体的なVBAコードを紹介します。
ブックを閉じる(Close)
ブックを閉じる時の処理方法です。まずは、保存して閉じる場合。これは、次のように書くこともできます。Subsample2()ThisWorkbook.CloseSaveChanges:=TrueEnd Sub では、保存しないで閉じる場合。
他ブックを開いて閉じる(Open,Close)
他のブックを開いて何らかの処理(転記等)をして閉じる。よくあるパターンですね。簡単にサンプルのみ掲載します。Subsample2()DimwbAsWorkbookSetwb= Workbooks.Open("ブックのフルパス")…処理wb.CloseSaveChanges:=FalseEnd Sub 保存が必要な時は

VBAエキスパート公式テキスト

2019/5/30発売リニューアル版


2019/7/26発売リニューアル版

こちらは必須として購入した方が良いでしょう。
ちょっと高いなーとは思いますが、
書籍を購入することで、学習用データが提供されています。
・サンプルブック
・VBAエキスパート模擬問題
これらが使えるようになります。
このシリーズでは、テキストを読みながら学習していることを前提とします。



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

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


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

文字列結合&でコンパイルエラーになる理由|VBA技術解説(9月19日)
Byte配列と文字コード関数について|VBA技術解説(8月20日)
PowerQueryの強力な機能をVBAから利用する方法|VBA技術解説(8月4日)
練習問題31(セル結合を解除して値を埋める)|VBA練習問題(7月30日)
練習問題30(マトリックス→リスト形式)|VBA練習問題(7月25日)
Applicationを省略できるApplicationのメソッド・プロパティ一覧|VBA技術解説(7月22日)
コレクション(Collection)の並べ替え(Sort)に対応するクラス|VBA技術解説(7月20日)
CSVの読み込み方法(ジャグ配列)|VBAサンプル集(7月15日)
その他のExcel機能(グループ化、重複の削除、オートフィル等)|VBA入門(7月14日)
オートフィルタ退避回復クラスを複数シート対応させるVBAクラス|VBA技術解説(7月6日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.繰り返し処理(For Next)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.ひらがな⇔カタカナの変換|エクセル基本操作
10.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説



  • >
  • >
  • >
  • ブックの操作

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


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




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