VBA入門
ファイル操作Ⅰ(Dir)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
公開日:2013年5月以前 最終更新日:2021-10-20

第79回.ファイル操作Ⅰ(Dir)


VBAでは、フォルダのファイル一覧を取得したりファイルの存在確認をする事が出来ます、
Dir関数は、指定したパターン(ワイルドカード)やファイル属性と一致するファイルまたはフォルダの名前を表す文字列の値を返します。
引数に指定したファイルが存在するとそのファイル名を返し、存在しないと空欄を返します。



Dir関数

Dir[(pathname[, attributes])]

pathname 省略可能です。
ファイル名を表す文字列式を指定します。
フォルダ名およびドライブ名も含めて指定できます。
引数 pathname に指定した内容が見つからないときは、長さ 0 の文字列 (" ") を返します。
"*"または"?" のワイルドカードを使用できます。
attributes 省略可能です。
取得するファイルが持つ属性の値の合計を表す数式または定数を指定します。
省略すると、標準ファイルの属性になります。

attributesの設定値
定数 内容
vbNormal 0 標準ファイル
vbReadOnly 1 読み取り専用ファイル
vbHidden 2 隠しファイル
vbSystem 4 システム ファイル。
Macintosh では使用できません。
vbVolume 8 ボリューム ラベル。この値を指定すると、すべての属性は無効になります。
Macintosh では使用できません。
vbDirectory 16 フォルダ
vbAlias 32 エイリアス ファイル。
Macintosh でのみ使用できます。

この値はビット演算に対応するように作成されています。

10進 2進
0 00000000
1 00000001
2 00000010
4 00000100
8 00001000
16 00010000
32 00100000
64 01000000

任意の複数の値を足し算した値は、他の組み合わせと同一になることはありません。
したがって任意の組み合わせを、上記設定値の足し算で指定することが可能となっています。
この場合の足し算は論理演算のOrと同等です。
論理積(And)論理和(Or)と真(True)偽(False)の判定|VBA技術解説
・Trueとは何か、Falseとは何か ・論理積(And) ・論理和(Or) ・Ifステートメントにおける真偽の判定 ・例.指定のフルパスがフォルダかの判定


Dir関数は、pathnameに一致する最初のファイル名を返します。

フォルダ内のすべてのファイルに対して繰り返して処理を実行する場合は、引数を指定せずにDir を実行してください。
一致するファイル名がなくなると、Dir関数は長さ0の文字列 ("") を返します。
ただし、vbDirectory属性を付けてDirを呼び出しても、継続してサブディレクトリが返されることはありません。

複数のファイルを指定するための "*" または "?" のワイルドカードを使用できます。

ファイル名は特定の順序で取得されるわけではありませんので、取得される順番を期待しないようにしてください。


Dir関数の使用例

変数 = Dir("C:\test.xls")
"C:\test.xls"が存在する場合は"test.xls"が、存在しない場合は""が変数に入ります。

変数 = Dir("C:\*.xls")
Cドライブ直下にある、.xlsファイルの先頭のファイル名が入ります。

変数 = Dir("C:\", vbNormal + vbReadOnly + vbHidden)
Cドライブ直下にある、.標準+読取専用+隠しファイルの先頭のファイル名が入ります。

変数 = Dir("C:\test", vbDirectory)
"C:\test"のフォルダが存在する場合は"test"が、存在しない場合は""が変数に入ります。


Dir関数の実践例

Cドライブ直下のエクセルファイルを全て取得
変数 = Dir("C:\*.xls")
Do While 変数 <> ""
  ・・・
  変数 = Dir()
Loop

Cドライブ直下のエクセルファイルを全て取得しています。
注意
拡張子を、.xlsと指定していますが、この場合は、.xls、.xlsx、.xlsm等々
xlsで始まる拡張子全てが対象となります。

サブフォルダだけを取得する
strDir = Dir(パス, vbDirectory)
Do While strDir <> ""
  If strDir <> "." And strDir <> ".." Then
    If GetAttr(パス & strDir) And vbDirectory Then
      Debug.Print strDir 'strDirはフォルダです
    End If
  End If
  strDir = Dir()
Loop

このVBAの解説については以下のページをお読みください。

論理積(And)論理和(Or)と真(True)偽(False)の判定|VBA技術解説
・Trueとは何か、Falseとは何か ・論理積(And) ・論理和(Or) ・Ifステートメントにおける真偽の判定 ・例.指定のフルパスがフォルダかの判定


Dir関数の制限について

Dir関数には、いくつかの制限があります。

・3桁拡張子の指定時の問題
・256バイトを超えるパス名が扱えない
・環境依存文字が扱えない
・特殊なネットワークドライブでエラー
等々の多くの制限があります。

これらの問題に対する詳細な解説は、以下を参照してください。
Dir関数の制限について
・3桁拡張子の指定時の問題 ・256バイトを超えるパス名が扱えない ・UNICODEファイル名が扱えない ・特殊なネットワークドライブでエラー ・Dir関数の制限の最後に


Dir関数の関連記事

以下の記事も参考にしてください。
ファイル一覧を取得する(Do~LoopとDir関数)
・Dir関数 ・Dir関数の使い方 ・ファイルの一覧を取得するマクロVBAコード ・Do~Loopステートメント ・ExcelマクロVBA入門等の対応ページ
Dir関数で全サブフォルダの全ファイルを取得
・Dir関数でサブフォルダも含むファイル一覧を取得するVBA ・ファイル一覧を取得するVBAの使用例と解説 ・Dir関数の関連記事




同じテーマ「マクロVBA入門」の記事

第76回.ファイルダイアログ(FileDialog)
第77回.組み込みダイアログ(Dialogs,xlDialogPrint)
第78回.総合練習問題8
第79回.ファイル操作Ⅰ(Dir)
第80回.ファイル操作Ⅰ(その他)
第81回.総合練習問題9
第82回.RangeのResizeプロパティ
第83回.RangeのOffsetプロパティ
第84回.RangeのAddressプロパティ
第85回.結合セルの扱い
第86回.総合練習問題10


新着記事NEW ・・・新着記事一覧を見る

IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)
2段階の入力規則リスト作成:最新関数対応|エクセル関数応用(2025-12-24)
IFS関数をVBAで入力するとスピルに関係なく「@」が付く現象について|VBA技術解説(2025-12-23)
数値を記号の積み上げでグラフ化する(■は10、□は1)|エクセル練習問題(2025-12-09)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.条件分岐(Select Case)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ