Microsoft Excel VBA - ブックを開く方法

◆概要

このページは、Excel VBAでブックを開く方法について記載しています。


ブックを開くには、Openメソッドを使います。Openメソッドは、常にWorkbooksコレクションに適用します。Workbokksコレクションを取得するには、Workbooksプロパティを使います。

◆Sample

次の例は、カレントフォルダ(既定の作業フォルダ)にあるBook1.xlsというファイルを開き、このブックの最初のワークシートにあるセルA1の値を表示します。


Openメソッドの戻り値は、開いたブックを参照するWorkbookオブジェクトであることに注意してください。


この例では、ファイル名の指定にパスが含まれていないので、ファイルはカレント フォルダにあるものと見なされます。そのため、ユーザーがカレント フォルダを変更した場合は、ファイルを見つけることができなくなり、実行時エラーが発生します。

Sub OpenBook1()
    Set mybook = Workbooks.Open(Filename:="Book1.xls")
    MsgBox mybook.Worksheets(1).Range("A1").Value
    
End Sub
  

プログラムからブックを開く場合は、Excel.exeファイルがあるフォルダ、または[Library]フォルダに開くブックを保存すると、比較的安全です。[Library]フォルダは、Excel.exeファイルがあるフォルダの1つ下のレベルにあるフォルダで、セットアップ時に自動的に作成されます。

Excel.exeファイルがあるフォルダに保存したブックを開く場合は、このフォルダのパスを指定する文字列を取得するために、Pathプロパティを使います。パスで使用される区切り記号は、MS-DOSまたはWindowsのFATファイルシステムでは円記号(\)、Macintoshのファイルシステムではコロン(:)というように、ファイル システムによって異なります。ファイル システムに応じた適切な区切り記号を取得するには、PathSeparatorプロパティを使います。次の例は、Excel.exeファイルがあるフォルダに保存されているBook1.xlsというブックを開きます。この例のコードは、どのファイルシステム上でも実行できるように記述されています。

Sub Openbook1()
    EXEPath = Application.Path & Application.PathSeparator
    fName = EXEPath & "Book1.xls"
    Set mybook = Workbooks.Open(Filename:=fName)
    MsgBox mybook.Worksheets(1).Range("A1").Value
End Sub
  

一方、[Library]フォルダに保存したファイルを開く場合は、[Library]フォルダのパスを指定する文字列を取得するために、Pahtプロパティではなく、LibraryPathプロパティを使います。次の例は、前の例をLibraryPathプロパティを使うように変更したコードです。

Sub Openbook1()
    LibPath = Application.LibraryPath & Application.PathSeparator
    fName = LibPath & "Book1.xls"
    Set mybook = Workbooks.Open(Filename:=fName)
    MsgBox mybook.Worksheets(1).Range("A1").Value
End Sub
  

開くブックのファイル名を直接Openメソッドに記述するのではなく、どのファイルを開くかをユーザーに選択できるようにすることもできます。その場合は、GetOpenFilenameメソッドを使います。このメソッドは、通常の[ファイルを開く]ダイアログ ボックスを表示しますが、ファイルを開く代わりに、ユーザーが選択したファイルの絶対パスとファイル名を返します。次の例はGetOpenFilenameメソッドによって返された文字列をメッセージボックスで表示した後、そのファイルを開きます。

Sub DemoGetOpenFilename()
    Do
        fName = Application.GetOpenFilename
    Loop Until fName <> False
    MsgBox fName & " を開きます。"
    Set mybook = Workbooks.Open(Filename:=fName)
End Sub
  



▼ページトップへ