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