エクセルファイルやCSVファイルを開く

説明

基本構文

一番単純なエクセルファイル(CSVファイル)の開く方法です。

Sub Sample1()
    ' マクロを実行しているファイルと同じパスにある"test.xlsx"を開く
    Workbooks.Open ThisWorkbook.path & "/" & test.xlsx"
End Sub

CSVファイルを開く場合は、ファイル名(text.xlsx)を「~.csv」にしてください。
「ThisWorkbook.path」はマクロを実行しているファイルのパスが格納されています。
"/"は階層の区切りのため、必要です。

ブックオブジェクトを変数に格納する場合は、次のようにします。

Sub Sample2()
    Dim wb As Workbook
    ' "test.xlsx"を開き、変数wbにブックオブジェクトを格納する
    Set wb = Workbooks.Open(ThisWorkbook.path & "/" & test.xlsx")
End Sub

WorkBookオブジェクト型の変数にSetを用いて格納します。
引数の前後にカッコを付けるのを忘れないようにしましょう。

引数一覧

引数は数多くありますが、必要な引数は一部です。
赤字になっている引数を中心に確認してください。

引数名説明
FileName開くブックのファイル名です。フルパスで指定する必要があります。
UpdateLinksブックを開いたときに外部参照 (リンク) を更新するかどうかを決定します。
ReadOnlyTrueを指定するとブックを読み取り専用モードで開きます。
FormatCSVファイル等のテキストファイルを開く場合、この引数で区切り文字を指定します。区切り文字は、1=タブ、2=コンマ(,)、3=スペース、4=セミコロン(;)、5=なし、6=後述の引数Demiterで文字を指定します。なお、既定値は2のコンマです。
Passwordパスワード保護されたブックを開くのに必要なパスワードを指定します。パスワード保護されていない場合は引数を省略します。
WriteResPassword書き込み保護されたブックに書き込みをするために必要なパスワードを指定します。
IgnoreReadOnlyRecommendedTrueを指定すると[ 読み取り専用を推奨する] ブックを開くときでも、読み取り専用を推奨するメッセージを非表示になります。
Originファイルがテキスト ファイルの場合、この引数でファイルの作成元を指定します。これにより、コード ページと改行コード (CR/LF) を正しくマッピングできます。
Delimiter先述の引数[Format]で6を指定したとき、区切り文字(カスタム文字)を指定します。
Editable開こうとしているファイルが Excel 4.0 のアドインの場合、この引数に True を指定すると、アドインがウィンドウとして表示されます。
Notifyファイルが読み取り/書き込みモードで開けない場合に、ファイルを通知リストに追加するには、True を指定します。
Converterファイルを開く際に最初に試すファイル コンバーターのインデックスです。 指定されたファイル コンバーターが最初に試されます。
AddToMru最近使用したファイルの一覧にブックを追加するには、 True を指定します。 既定値は False です。
LocalExcel の言語設定 (コントロール パネルの設定を含む) に合わせてファイルを保存するには、True を指定します。
CorruptLoadブックを[xlNormalLoad]、[xlRepairFile]、[xlExtractData] のいずれかから、どのモードで開くかを指定します。例えば、ブックが破損している場合は、xlRepairFileを指定します。通常は既定値である[xlNormalLoad]で開きます。

上記表の一部の説明はMicrosoft社のリファレンスを参考にしています。

読み取り専用でエクセルファイルを開く

開いたエクセルファイルを保存しない場合は、読み取り専用で開くべきです。

これは、プログラムのミス等で誤って上書きしてしまうことを防ぐためで、もし誤って上書きしてしまうと、どこが変更されたか、もしくは変更されていないかを検証する必要が出てきます。

Sub Sample3()
    ' マクロを実行しているファイルと同じパスにある"a.xlsm"を読み取り専用で開く
    Workbooks.Open ThisWorkbook.path & "/" & a.xlsm", ReadOnly:=True
End Sub

読み取り専用で開くには、パスを指定した後「ReadOnly:=True」を指定します。
「:=」はオプション引数が複数ある場合、どの引数に値を入れるかを指定する構文です。

パスワードのあるエクセルファイルを開く

エクセルファイルにパスワードがかかっている時、次のようにしてください。

Sub Sample4()
    ' パスワード"123"のエクセルファイルを開く
    Workbooks.Open ThisWorkbook.Path & "/" & "Book1.xlsx", Password:="123"
End Sub

パスワードを指定するには、パスを指定した後「Password:=True」を指定します。
「:=」はオプション引数が複数ある場合、どの引数に値を入れるかを指定する構文です。

開くファイルをダイアログを用いてユーザーに指定させる

ダイアログとは?

下のウィンドウがダイアログです。
開くファイルをクリックして、開くボタンをクリックすると処理が進みます。


サンプルプログラム

「Application.GetOpenFilename」を用いて、エクセルファイルまたはCSVファイルを指定させます。

Sub Sample5()
    Dim val As Variant
    val = Application.GetOpenFilename("Excelファイル,*.xlsx;*.xlsm;*.xls" & _
    ",csvファイル,*.csv", Title:="開くファイルを指定してください。")
    If VarType(val) = vbBoolean Then
        'ファイルを指定しなかった(キャンセル等)ときの処理
    ElseIf VarType(val) = vbBoolean then
        'ファイルを指定したときの処理
    End If
End Sub

上記サンプルではCSVファイルを指定する際、ダイアログ内の「ファイルの種類(T)」より『CSVファイル』を選択する必要があります。
エクセルファイルのみで良い場合はサンプルプログラムの「",csvファイル,*.csv"」を削除してください。

完全に余談ですが、保存するディレクトリやファイル名をダイアログで指定する時は「Application.GetSaveAsFilename」を使用します。
覚えておくと幸せになれるかもしれません(笑)。

関連リンク

ページの先頭へ