VBAファイルを開く方法まとめ①

VBA
スポンサーリンク

今回は、VBAを使って別ブックを開く方法をまとめて紹介します。

スポンサーリンク
スポンサーリンク

特定ブックを開く

特定のブックを開く場合は、WorkbooksコレクションOpenメソッドで開きます。

Workbooks.Open ファイルパス

ファイルパスとは開きたいファイルがどこのドライブのどこのフォルダにあるかを指定することです。

(例)Workbooks.Open ”C:\Desktop\エクセルVBA講座.xlsx”

上記の例はCドライブ内のデスクトップにある「エクセルVBA講座.xlsx」のファイルパスを取得して開きます。

記述のルール

  • ファイルパスは文字列の取り扱いでダブルクォーテーション(”)で囲む
  • ドライブやファイル名の間には必ず¥をいれる(「~の」と訳すとわかりやすい)

ファイルパスの取得方法

エクスプローラでファイルを選択→リボン:「ホーム」タブ「パスのコピー」で取得できます。

ただ、このようにフルパスでファイルを開く場合、ファイルの保存場所を移動してしまった時にエラーとなり不便です。

解決策として、ThisWorkbook.Pathを使います。

ThisWorkbook.Path

基本的にマクロで操作したいブックがある場合、マクロを組んでいるブックと同じフォルダに予め入れておくことをオススメします。
その場合はThisWorkbook.Pathと書けばマクロを組んでいるブックと同じフォルダのパスを取得できます。

Workbooks.Open ThisWorkbook.Path & ”\エクセルVBA講座.xlsx”

※ThisWorkbook.Pathとファイル名を繋げるには &(アンパサンド)を使います。

スポンサーリンク

GetOpenFilenameメソッドでファイルを開く

ApplicationオブジェクトGetOpenFilenameメソッドを使用すると、下図のように「ファイルを開く」ダイアログボックスが出現して、ユーザーが自由にファイル選択できます。
開くファイルが特定されていない場合に非常に便利です。

GetOpenFilenameメソッドの引数

GetOpenFilename( FileFilter,FilterIndex, Title, ButtonText, MultiSelect)

FileFilterVariant ファイルの候補を指定する文字列 (ファイル フィルター文字列) を指定します。
FilterIndexVariant FileFilter で指定したファイル フィルター文字列の中で、1 から何番目の値を既定値とするかを指定します。 この引数を省略するか、ファイル フィルター文字列の数より大きい数値を指定すると、最初のファイル フィルター文字列が既定値となります。
Titleダイアログ ボックスのタイトルを指定します。 この引数を省略すると “ファイルを開く” になります。
ButtonTextVariant Macintosh でのみ指定できます。
MultiSelectVariant True を指定すると、複数のファイルを選択できます。 False を指定すると、1 つのファイルしか選択できません。 既定値は False です。
パラメーター

引数は上記の通りです。FileFilter以外省略可能です。主要引数のみ説明します。

FileFilter

引数:FileFilterは以下の2つをペアで指定します。

  1. ファイルの種類を表す任意の文字列
  2. (ワイルドカード使用)ファイルの拡張子

ルール:1と2をカンマで区切ります。引数全体をダブルクォーテーションで囲みます。

Sub sample()
    Dim FileName
    FileName = Application.GetOpenFilename("普通のExcel,*.xlsx")
    If FileName = False Then
        Exit Sub
    End If
    Workbooks.Open FileName
End Sub
コード説明
  1. バリアント型変数「FileName」を宣言
  2. バリアント型変数「FileName」にGetOpenFilenameメソッドで選択したファイルパスを格納
  3. バリアント型変数「FileName」がFalseでなければ、Openメソッドでファイルを開く

上記コードでは

Application.GetOpenFilename(“普通のExcel,*.xlsx”)

となっており、「普通のExcel」と表示されて、xlsx拡張子のファイルのみが出現します。

また、下のコードのようにすればxlsx(Excelブック)xlsm(Excelマクロブック)の両方が出現します。

Application.GetOpenFilename(“エクセルブック,*.xls*”)

複数種類のファイルを指定する場合

複数の種類のファイルを表示させたい時は、1つの時と基本的には一緒です。

  1. ファイルの種類を表す任意の文字列
  2. (ワイルドカード使用)ファイルの拡張子

上記の1と2のペアを2つ目以降もカンマ区切りで書いていきます。

「”ファイル名(文字列)、ファイルの拡張子、ファイル名(文字列)、ファイルの拡張子”」

例)Application.GetOpenFilename(“エクセルブック,*.xls*,テキスト,*.txt”)

↑とすればxls*(Excelブック)とtxt(テキストファイル)の両方が出現します。

2つ選択可能になります。

上図はエクセルブックを選んだ場合

上図はテキストファイルを選んだ場合

ファイル名は1つで複数の拡張子を表示させる場合

Application.GetOpenFilename(“ファイル,*.xls*;*.txt”)

上記のように、ファイルの種類を表す任意の文字列は”ファイル”で表示したい拡張子(,*.xls*.txt)をセミコロン(;)で区切ります。

エクセルファイルとテキストファイルが同時に表示されます。

ファイルを選択しなかった場合の処理

「ファイルを開く」ダイアログボックスでファイルを選択せずにキャンセルした場合、GetOpenFilenameメソッドは論理値としてFalseを返します。

つまり、そのままWorkbooks.OpenにFalseを格納した変数を渡してしまうと当然エラーになります。

よって、条件分岐にてFalseの場合の処理を入れておきます。

If FileName = False Then 'FileName変数がFalseの場合
        Exit Sub        'プロシージャ終了
End If

複数ファイルの選択

「ファイルを開く」ダイアログボックスで複数のファイルを選択して、選択したファイルを一括処理する方法です。

GetOpenFilename( FileFilter, FilterIndex, Title, ButtonText, MultiSelect

GetOpenFilenameの引数:MultiSelectTrueにします。

Trueにすることで複数のファイル選択が可能になります。

そして、引数:MultiSelectTrueにした場合、GetOpenFilenameは配列を返します。

Sub Sample2()
    Dim FileName As Variant
    FileName = Application.GetOpenFilename(FileFilter:="複数ファイル,*.xls*;*.txt", _
                                                MultiSelect:=True)
    If Not IsArray(FileName) Then
        Exit Sub
    End If
    Dim i As Long
    For i = LBound(FileName) To UBound(FileName)
            Debug.Print FileName(i)
    Next i
End Sub

コード説明

FileName = Application.GetOpenFilename(FileFilter:=”複数ファイル,.xls;*.txt”, _
MultiSelect:=True)

引数:MultiSelectTrueにしたGetOpenFilenameメソッドで変数:FileNameが配列形式になります。

If Not IsArray(FileName) Then
 Exit Sub
End If

IsArray関数は変数が配列かどうか調べて、TrueまたはFalseで返します。

よって、上記コードはFalseの場合(配列ではない場合)、Exit Subでプロシージャ終了です。

Dim i As Long
For i = LBound(FileName) To UBound(FileName)
    Debug.Print FileName(i)
Next i

ForNextステートメントでGetOpenFilenameメソッドで取得した配列変数に格納されたファイルを順番に処理していきます。

今回は、ファイル名を順番にイミディエイトウィンドウに表示させています。

↑複数ファイルを選択します。

イミディエイトウィンドウに選択したファイルパスが順番に表示されます。

これを応用して、順番に選択したファイルに任意の処理を実行することも可能です。

・筆者オススメのVBAの本はこちら↓

ExcelVBA学習のおすすめの本5選
筆者オススメの「これは秀逸!」「これは1冊持っとくべき」と思えるExcelVBAの本を紹介しています。ExcelVBAの書籍選びで、どれを選んでよいか迷っておられる方に参考にしていただきたいです。
スポンサーリンク

まとめ

今回は、以下の通り、別ファイルからのデータ転記を行うにあたって必要なファイルを開くメソッドについて紹介しました。

  • WorkbooksコレクションOpenメソッド
  • GetOpenFilenameメソッド

次回は、ファイルダイアログ(FileDialog)について紹介します!お楽しみに!

VBAファイルを開く方法まとめ②
Application内のFileDialogオブジェクトについて、プロパティ、メソッドの活用方法をコードを使って紹介しています。

コメント

タイトルとURLをコピーしました