Excel マクロでフォルダ内のファイルを順番に開く方法

どうも、今日はExcel VBAでフォルダ内のファイルを順番に参照し開く方法を伝授します。

ファイルを参照する方法には、以下の2つがあります。

  • Dir()関数
  • FileSystemObjectオブジェクト

これらを使う事で、ファイルを参照したり、ファイルをコピーしたりできるようになります。

それでは、Dir()関数の使い方から見ていきましょう。

Dir()関数でファイルを参照し開く方法

まずは、Dir関数()を使ってフォルダ内のファイルを順番に参照してみましょう。

次のようなコードを記述します。

Cドライブ直下のエクセルファイル(.xlsx)を順番に参照するプログラムです。

Sub Test

  Dim dirBuff as String
  Dim folderPath as String
  
  folderPath = "C:¥"

 'C:¥直下のファイルをバッファに取得する(★1)
  dirBuff = Dir(folderPath & "*.xlsx") 

 'バッファ内を繰り返し処理 (★2) 
  Do While dirBuff <> ""
     'ファイル名を表示する
   Debug.Print dirBUff
   '次のファイルを参照(★3)
     dirBuff = Dir()
  Loop

End Sub

これを実行すれば、ドライブ直下のファイルを順番に、イミディエイトウィンドウに表示します。

(★1)でCドライブ直下のファイル情報をdirBuffに代入します。

(★2)のDo WhileでdirBuff内のxlsxファイルを繰り返し参照します。

(★3)で次のファイルを参照します

次にファイルを開く処理を追記しましょう。

Sub Test

  Dim dirBuff as String
  Dim folderPath as String
  
  folderPath = "C:¥"

 'C:¥直下のファイルをバッファに取得する(★1)
  dirBuff = Dir(folderPath & "*.xlsx") 

 'バッファ内を繰り返し処理 (★2) 
  Do While dirBuff <> ""
     'ファイル名を表示する
   Debug.Print dirBUff
     'ファイルを開く(★4)
   WorkBooks.Open(folderPath & dirBuff)
   '次のファイルを参照(★3)
     dirBuff = Dir()
  Loop

End Sub

(★4)のWorkBooks.Openでファイルを開きます。

Dir()関数で取得できるのはファイル名のみなので、Dirの参照先であるfolderPathを含めたファイル名を指定します。

以上が、Dir()でファイルを参照し、開く方法になります。

VBA初心者にはこのDir()で参照する方法をお勧めします。

FileSystemObjectでファイルを参照し開く方法

続いてFileSystemObjectオブジェクトでファイルを参照し開く方法です。

Dir()と比べて難しいので、VBA初心者は「こんな方法もあるのか」くらいで覚えておいてください。

ただ、構築するプログラムのレベルが上がるとFileSystemObjectが重要になってくるので、最終的には理解しないといけないモノになります。

Sub TestFSO

  Dim fso as FileSystemObject '(★1)
  Set fso = New FileSystemObject '(★2)

  Dim f as Object
  Dim folderPath as String
  folderPath = "C:¥"
  
  'ファイルを繰り返し処理する(★3)
  For each f In fso.GetFolder(folderPath)
     'ファイル名を出力
     Debug.Print f.name
  Next

End Sub

プログラムの内容は、folderPathに指定したフォルダ内のExcelファイルを繰り返しイミディエイトウィンドウに表示するだけとなっています。

(★1)(★2)はおまじないみたいなもので、FileSystemObjectを利用するための必須宣言となりますので覚えておきましょう。

(★3)のfso.getFolderでfolderPathに含まれるファイルを1つずつ参照します。

このままだと、xlsx以外のファイルも参照されてしまします。

ここにファイルを開く処理と、xlsxファイルだけを対象にする処理を追記すると次のようになります。

Sub TestFSO

  Dim fso as FileSystemObject '(★1)
  Set fso = New FileSystemObject '(★2)

  Dim f as Object
  Dim folderPath as String
  folderPath = "C:¥"
  
  'ファイルを繰り返し処理する(★3)
  For each f In fso.GetFolder(folderPath)
   'xlsxかを判断する(★4)
   if fso.GetExtensionName(f.name) = "xlsx" then
       'ファイルを開く(★5)
       WorkBooks.Open(f.Path)
     end if
  Next

End Sub

(★4)このif分でファイル拡張子を判断します。

GetExtensionNameで”.”ドットを含まないファイル名を取得、それが”xlsx”か判断し、”xlsx”の場合は、(★5)のファイルを開く処理へ進みます。

(★5)のファイルを開く処理は、ファイルパスを指定する必要がるため、FileSystemObjectのファイル変数(ここでいうとf)の「Path」を使って取得します。

以上がFileSystemObjectを使ったファイル参照・ファイルオープンの方法でした。

初心者にはDir関数がとっかかりやすいと思いますので、まずは、そちらから初めてみてくださいね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です