この作業をする前に、サンプルデータvba-exercises.xlsm「VBA練習問題」とサンプルデータbooks-list.xlsx「図書目録」をダウンロードし、同一フォルダーに保存しておいてください。
(注) 「.xlsm」がマクロ有効ファイルの拡張子になります。
ブックの保存場所を知る
ここではブックの利用方法を勉強しましょう。Excelのデータファイルそのものを「ブック」といいます。ブックは、複数のワークシート、グラフシート、VBAモジュールから構成されます。
VBAモジュールは、今勉強しているVBAプログラムを格納しているシート(?)です。簡単に言うと、ブックはシートの集まりです。これは私たちが読む本と同じものだと考えると、今後の説明が理解しやすいと思います。
まず、図書館に行って本を読みたいことを考えてみてください。読みたい本はどこにあるかを調べて、何階のどの棚の何段目かがわからなくては読みたい本を手に取ることができません。
同じように、Excelでもブック名を単に書くのではなく、保存場所を指定しなくてはなりません。具体的に書くと以下のようになります。
G:\00テキスト(ExcelVBA)\テキスト\応用\検索.xlsm
自分のブックがどこに保存されているかをフルパスで教えてくれるのが「Pathプロパティ」です。
【書式】
対象ブック名.Path
【確認】
上記を試すには前にも書きましたように、Ctrl + G キーを押して「イミディエイト ウィンドウ」に移ります。
まだExcelを起動していないなら新しいブックで構いませんので起動してVBEウィンドウを表示してください。VBEウィンドウを表示するには、ALT + F11 キーを押します。
ブックを開いたら、どこの場所(フォルダ)でも構いませんので、必ず名前をつけて保存しておきましょう。保存していないと場所が確定できませんので。
これで試せる環境が整いました。では、イミディエイトウィンドウに下の様に入力してください。
- ?ThisWorkBook.Path
(注1) 英字はすべて小文字でかまいません。
(注2) 「ThisWorkBook」は今作業しているブックのことです。
パス名が表示されたと思います。カーソルが結果行の次の行に移りますので、上方向 キーを押して結果行に移動すると音声が結果を読み上げます。
【結果例】 C:\Documents and Settings\usrxxx\My Documents
【ワンポイント】 「ThisWorkbookオブジェクト」は「ActiveWorkbookオブジェクト」とどう違うのか。それは、プログラム(VBA)が書かれているブックがThisWorkbookです。処理の途中でアクティブになっているブックがActiveWorkbookです。現在アクティブ(作業中)になっているブックになります。
【練習問題1】
自分が今VBAを書いているブックの場所をフルパスでイミディエイトウィンドウに表示しましょう。
【解答例】
- Sub 練習問題1() ‘ファイルの保存場所を表示
- Debug.Print ThisWorkBook.Path
- End Sub
Openメソッド
やっと本の場所がわかり、手に取りました。次は本を読むには表紙を開かなければなりません。この手続きがExcelでは「ブックを開く」です。
ブックを開くには「Openメソッド」を使います。Excelでは、同時に複数のブックを開くことができます。開いているそれぞれのブックはWorkbookオブジェクトとして操作できます。
次のコードは、C:\Book1.xlsxを開きます。
- Workbooks.Open(Thisworkbook.path & "\Book1.xlsx"),readonly:=True
(注1) 「Readonly:=True」は、読み取り専用の意味です。
(注2) 「\マーク(\)は、フォルダー名とフォルダー名、フォルダ名とファイル名を区切るためのものです。
では、実際にCtrl + G キーを押してイミディエイトウィンドウに移り、
Workbooks.Open(Thisworkbook.path & "\Book1.xlsx"),readonly:=true
を入力してEnter キーを押してBook1ブックが開いていることを確認してください。
開こうとしているファイル「C:\Book1.xlsx」が存在しないとき、「ファイルが存在しない」旨のエラーメッセージが表示されます。または、すでに「Book1.xlsx」という名前のブックを開いているときは何もしません。
【練習問題2】
同じフォルダー内にあるブック「books.xlsx」を読み取り専用で開いてみましょう。
【解答例】
- Sub練習問題2() ‘ブックを開く
- Workbooks.Open (ThisWorkbook.Path & "\books.xlsx"), ReadOnly:=True
- End Sub
【確認】
Alt + Tab キーを押すと、プロパティが画面の中央に表示されます。もう1度、Tab キーを押すと、選択するプログラムが右に移動します。スクリーンリーダーでは、アプリケーション名を読み上げますので、ブックが開いていることを確認してください。