VBA  Dir関数について ~関数の解説と使用例~

VBA  Dir関数について ~関数の解説と使用例~

ENGINEER.CLUB編集部

ENGINEER.CLUB編集部

Dir関数は、「ディレクトリ内に指定したファイルが存在するか」や「ディレクトリ配下にあるディレクトリ名やファイル名を取得したい」時に使用します。


1.Dir関数について

1-1.Dir関数とは

指定した条件(パターン、ファイル属性)に一致するファイルまたはディレクトリ、フォルダ名、またはドライブのボリュームラベルをString型で返します。

1-2.Dir関数の構文

Dir [pathname] [attributes]

 

1-2-1.引数pathname

省略可能。ファイル名、フォルダ名を指定します。ファイル名のみを指定した場合は、長さ0の文字列を返します。

1-2-2.引数attributes

省略可能。省略した場合は、pathnameと同じ属性のファイルを返します。下記表にあるファイル属性を指定する定数か値を指定します。

定数名説明
vbNormal0属性のないファイル。
省略した場合は、自動的にこの設定になります。
vbReadOnly1属性のないファイルと読み取り専用のファイル。
vbHidden2属性のないファイルと隠しファイル。
vbSystem4属性のないファイルとシステム ファイル。
Macintosh では使用できません。
vbVolume8ボリューム ラベル
他の属性を指定した場合は、vbVolume は無視。
Macintosh では使用できません。
vbDirectory16属性のないファイルとディレクトリまたはフォルダ。
vbAlias64指定されたファイル名はエイリアス。
Macintosh でのみ使用可能。

※:属性とは、「読み取り専用」「システムファイル」「ディレクトリ」「隠し属性」等のことです。


2.Dir関数の使用例

2-1.基本的な使用例

Cドライブ直下に下記のようなディレクトリ構成があるとき、Cドライブ直下で実行した例を記していきます。

Cドライブ直下で実行した例

2-1-1.引数pathnameのみを指定

Sub sample01()
Dim str As String

str = Dir("C:\SAMPLE\SAMPLE.txt")
MsgBox str

End Sub

実行結果:第一引数で指定したファイルを検索し、存在した場合はファイル名を返します。

実行結果1

2-1-2.引数pathnameが空、attributesを指定

Sub sample02()
    Dim str As String

    str = Dir("", vbDirectory)

MsgBox str


End Sub

実行結果:Cドライブ直下にある、最初に見つかったディレクトリ名を返します。

実行結果2

2-1-3.ワイルドカードを使った検索

Sub sample03()
    Dim str As String

    str = Dir("C:¥SAMPLE\t*")

MsgBox str


End Sub

実行結果:指定したディレクトリパス(C:¥SAMPLE)配下にある最初に「t」が付くファイル名を返します。

実行結果3

2-2.その他の使用例

2-2-1.指定したパスにファイルやディレクトリが複数存在した場合

対象となるファイルが複数存在した場合、最初のファイル名が返されますが、全ファイル名を取得したい場合は、下記のようにします。

Sub sample04()
    Dim str As String
    Dim val As String

    str = Dir("C:\SAMPLE\*.txt")
    val = str

    Do While str <> ""
        str = Dir()
    val = val & vbCrLf & str
    Loop
    
    MsgBox val

End Sub

実行結果:sample2.txtは隠しファイルのため、検索結果にありません。

実行結果4


3.注意点

Dirを使用する際に、注意すべき点がいくつかあります。

3-1.引数のattributesに設定する文字列が256文字超

引数のattributesに設定する文字列が256文字超(バイト数ではなく、文字数)を超えた場合、下記エラーになります。

文字列が256文字超を超えた場合

エラー画面

3-2.拡張子が似たファイルが存在する場合

設定したフォルダ内に、拡張子が「xls」「xlsm」「xlsx」のように似たファイルが存在する場合、下記のように検索対象を指定しても想定とは異なる結果になってしまいます。

拡張子が「xls」「xlsm」「xlsx」のように似たファイルが存在する場

Sub sample05()
    Dim str As String
    Dim val As String

    str = Dir("C:\SAMPLE\*.xls")
    val = str
    Do While str <> ""
        str = Dir()
        val = val & vbCrLf & str
    Loop

    MsgBox val

End Sub

実行結果:

実行結果5


4.最後に

Dir関数は、ディレクトリ名やファイル名を指定しての存在確認に使用することが多いですが、ファイル属性を指定することでより細かい確認ができるようになります。

ファイル属性を使う頻度は高くないかもしれませんが、頭の片隅に入れておくといざという時に役に立ちます。

 

 

私たちは、全てのエンジニアに市場価値を高め自身の望む理想のキャリアを歩んでいただきたいと考えています。もし、今あなたが転職を検討しているのであればこちらの記事をご一読ください。理想のキャリアを実現するためのヒントが見つかるはずです。

『技術力』と『人間力』を高め市場価値の高いエンジニアを目指しませんか?

私たちは「技術力」だけでなく「人間力」の向上をもって遙かに高い水準の成果を出し、関わる全ての人々に感動を与え続ける集団でありたいと考えています。

高い水準で仕事を進めていただくためにも、弊社では次のような環境を用意しています。

  • 定年までIT業界で働くためのスキル(技術力、人間力)が身につく支援
  • 「給与が上がらない」を解消する6ヶ月に1度の明確な人事評価制度
  • 平均残業時間17時間!毎週の稼動確認を徹底しているから実現できる働きやすい環境

現在、株式会社ボールドでは「キャリア採用」のエントリーを受付中です。

まずは以下のボタンより弊社の紹介をご覧いただき、あなたの望むキャリアビジョンをエントリーフォームより詳しくお聞かせください。

コメント

公式アカウントLINE限定!ボールドの内定確率が分かる無料診断実施中
公式アカウントLINE限定!
ボールドの内定確率が分かる無料診断実施中