ExcelのVBAを使用してフォルダ内のファイル名などを取得する方法なのですが、たまにしか使わないのでやろうとするたびに使い方を忘れているので、備忘録として残しておきます。
Dir()を使用したフォルダのファイル名を取得する方法は以下のようになります。
目次
1.Dir()を使用したファイル名取得方法
Dir()は、フォルダのファイル一覧を取得する時やファイルの有無確認をするような時に使用します。
使い方は以下のようになります。
Dir[(pathname[, attributes])]
この中で、
pathnameは確認したいファイル名を指定します。
フォルダ名やドライブ名を含めて指定することができます。
pathnameにはワイルドカードも指定できます。
省略可能です。
attributesは取得するファイルの属性を表す数式(以下の表の定数)または値を指定します。
省略可能です。
定数 | 値 | 内容 |
---|---|---|
vbNormal | 0 | 標準ファイル |
vbReadOnly | 1 | 読み取り専用ファイル |
vbHidden | 2 | 隠しファイル |
vbSystem | 4 | システム ファイル。Macintosh では使用できません。 |
vbVolume | 8 | ボリューム ラベル。この値を指定すると、すべての属性は無効になります。 Macintosh では使用できません。 |
vbDirectory | 16 | フォルダ |
vbAlias | 32 | エイリアス ファイル。Macintosh でのみ使用できます。 |
Dir()関数は、引数に指定したファイル名を検索し、はじめに見つけたファイルのファイル名を返します。なかった場合には、""を返します。
2.使用例1
以下が使用例になります。
Dim buf As String
Path = ActiveWorkbook.Path + "\" buf = Dir(Path & "*.xls") Do While buf <> "" If LCase(buf) Like "*.xls" Then fn = buf Exit Do End If buf = Dir() Loop
およそ、内容は、以下の通りです。
Path = ActiveWorkbook.Path + "\"
で、自bookのパスをPathに入れます。
buf = Dir(Path & "*.xls")
で、自bookのあるフォルダ内にある拡張子に「.xls」が含まれるファイルを探し出しは
じめて見つけた1つ目のファイルをbufに入れています。
「Do While ~ Loop」内で、そのようなファイルがなくなるまで繰り返しています。
実際には、「.xls」が含まれるということなので、その中には「.xlsx」や「.xlsm」も入っ
てしまいます。そこで、「Do While ~ Loop」内で、
If LCase(buf) Like "*.xls" Then
とすることで、「.xls」以外の「.xlsx」や「.xlsm」を除外して「.xls」の時のみfnにbuf
を入れています。その後、
Exit Do
で、「Do While ~ Loop」を抜けています。
繰り返しファイル名を抜き出したい場合は、2回目以降、単に、
Dir()
とします。
buf = Dir()
で、新たなファイルをbufに入れて、「Do While ~ Loop」で繰り返すことで、結果として、はじめて「.xls」ファイルを選び出したらfnにファイ名を入れてループを抜けてプログラムを終了しています。
3.使用例2
もう1つ似たような例ですが、
Dim buf As String, cnt As Long
Path = ActiveWorkbook.Path + "\"
cnt = 10 buf = Dir(Path & "*.xlsx") Do While buf <> "" cnt = cnt + 1 Cells(cnt, 1) = buf buf = Dir() Loop
の場合には、自bookと同じフォルダ内にある「.xlsx」ファイルを抜き出して
Cells(cnt, 1) = buf
で、Cells(11,1)から順に行番号を1ずつ増やしつつ「.xlsx」ファイルが存在する個数分ファイル名を記載します。
「.xlsx」の場合は、「.xlsx」を含むそれ以外の拡張子はないので、これのみで「.xlsx」ファイルだけが抜き出されます。
関連記事:
【Excel】の「開発」タブを表示させる方法 - Django Girls and Boys 備忘録
【Excel VBA】ファイル一覧やファイル有無確認に使われるDir()の使用方法 - Django Girls and Boys 備忘録
【Excel】プルダウンリストの設定方法 - Django Girls and Boys 備忘録
【Excel】ボタンの表示文字を改行する方法 - Django Girls and Boys 備忘録
【Excel】プルダウンリスト 設定方法、元データ追加方法、元データ変更方法 - Django Girls and Boys 備忘録
【Excel VBA】結合セルのコピー方法について - Django Girls and Boys 備忘録
【Excel VBA】あるシートのセル範囲に変更があった時に処理を実行する方法 - Django Girls and Boys 備忘録
【Googleサーチコンソール Googleアナリティクスの登録方法】サイト作成後の分析、活用に欠かせない登録 - Django Girls and Boys 備忘録
【Excel 名前の定義】「名前"○○○"は既に存在します。この名前にする・・・」のメッセージ表示を解決する方法 - Django Girls and Boys 備忘録
【Excel マクロ(VBA) 行削除】条件を満たした行を削除する方法(For~Next文を使用) - Django Girls and Boys 備忘録
【Excel マクロ(VBA)】最大行番号、最大列番号を取得する方法 - Django Girls and Boys 備忘録
【ExcelマクロからのI.E.操作】I.E.のセキュリティに絡むエラー(オートメーションエラー)発生時の対応方法 - Django Girls and Boys 備忘録
【Python Excel】ExcelからのPython実行ファイル(アプリケーションファイル)起動方法 - Django Girls and Boys 備忘録
【Excel VBA】シート削除時などに確認メッセージを表示しない方法 - Django Girls and Boys 備忘録
【Excel】数式の計算方法について、計算方法の自動/手動変更方法 - Django Girls and Boys 備忘録