Excel-VBAで「同一フォルダ内のファイルを読み込みたい。」今回は、こんな悩みについて解決していこうと思います。
それではいきなりですが、そのプログラムコーディングについて解説していきましょう。
同一フォルダ内を読むための2つの記述方法
同一フォルダ内に存在するファイルを一括で読み込む方法には、主に2つの方法があります。
<同一フォルダ内のファイルを一括で読み込む2つの対処法とは>
- Dir関数を用いた読込方法
- FileObjectを利用した読込方法
それでは、この2つの記述について詳しく解説していきましょう。
1.Dir関数
一つ目の読込方法にはDir関数というものを利用して、ファイルを一括で読み込んでいきます。
1 2 3 4 5 6 7 8 9 10 | Public Sub Dir_Read() Dim buf As String Dim strPath as string strPath = "C:¥" ’読込フォルダ名指定 buf = Dir(strPath & "*.xlsx") 'Excelファイルのみ読込 Do While buf <> "" buf = Dir$() '同一フォルダ内のファイルを取得・・・・① Loop End Sub |
最初に読み込む先のフォルダを指定します。そして、そのフォルダ内のファイルが存在するかどうかを確認しながら、次のファイルへと読み込んでいきます。
同一フォルダ内のファイルを読み込む際にファイルが切り替わるのは、上記の①の部分でファイルが切り替わります。
2.FileSystemObject関数による読み込み
続いて、もう一つの読込方法をご紹介していきましょう。この2つ目の方法には、「FileSystemObject」というメソッドを使って、ファイルを読み込んでいきます。
1 2 3 4 5 6 7 8 9 10 11 12 | Public Sub FileSysObj_Read() Dim f As Object Dim strFileName as String With CreateObject("Scripting.FileSystemObject") ’FileSystemObjectを宣言 For Each f In .GetFolder("C:¥").Files '読み込むフォルダを指定する strFileName = f.Name 'ファイル名を取得する・・・・② Msgbox strFileName Next f End With End Sub |
FileSystemObjectを利用する際には、まずこの処理を動かすための宣言が必要です。
これを4行目のScriptで宣言していきます。
その後でフォルダを読み込むためのFor文処理を記述します。「f.Name」では、実際にファイル名を取得していきます。
注意点:今は2の処理しか読み込めない可能性について
但し、一つ注意しておいてほしいことがあります。
それは、「1」の処理に関してですが、この処理は、Office2013以降から動作しない可能性が示唆されています。
基本動かないことはないとは思いますが、ただ私自身の経験上、1の場合では同じファイルをずっと読み込む場合があり、無限ループとなってしまいます。
これは、PCの誤作動によるものだとは思いますが、もし動かない場合には、Officeの再インストールを試してみましょう。それでも、動かない場合には、2の処理で対応を行いましょう。
まとめ
このように、同一フォルダ内のファイルの読み込みには、2つの方法があります。どちらを利用してコーディングしても問題はありません。
但し、Officeのバージョンは、破損によっても正常に動作しない場合がありますので、その場合には、FileSystemObjectの処理を記述して、処理を確立させていきましょう。
状況に応じて検証しながら、プログラムを完成させていきましょうね。