Categories: VBA基礎

EXCEL VBA Dir関数の使い方(ファイルを検索・フォルダーを検索)

 

 

EXCEL VBA Dir関数の使い方(ファイルを検索・フォルダーを検索)

 

 

●はじめに
今回は、Dir関数の使い方を説明いたします。Dir関数の主な使い方は、ファイルやフォルダーを検索する時に、指定したファイル名などを簡単に探しだす事ができます。ひとつのフォルダーに大量のファイルが有る時など、該当するファイルを探し出す時は、とても簡単に検索する事ができます。Dir関数の使い方を4つのサンプルプログラムで紹介しておりますので、順番に説明いたします。

 

●書式の説明 (Dir関数)

● Dir(pathname, attributes)

pathname : ファイルやフォルダーまでのパス名を指定(省略可能)
attributes : ファイル属性を指定する定数を指定(省略可能)

●使用例 【ファイルの確認】
A = Dir(“C:\TEST\sample01.txt”)

●使用例 【フォルダーの確認】
A = Dir(“C:\TEST”, vbDirectory) 

定数「attributes」説明
vbNormal標準ファイル(既定値)
vbReadOnly読み取り専用のファイル
vbHidden隠しファイル
vbSystemファイルシステム
vbVolumeボリュームラベル
vbDirectory16ディレクトリまたは、フォルダー

 

 

 

 

 

EXCEL VBA 指定したファイルを検索してファイル存在の有無を確認する。

 

 

●プログラム説明 (サンプル①)

下記のサンプルプログラムは、指定したファイルやフォルダーを検索して存在の有無を確認するサンプルプログラムです。

【ファイルの検索先】
“C:\TEST\sample01.txt”

 

'
'******** AKIRA55.COM ******* https://akira55.com/dir/
'

Sub Dir関数01() '指定したファイルの存在を確認します。

    Dim Check_File As String
    
    Check_File = Dir("C:\TEST\sample01.txt") 'ファイルを検索します。
    
    If Check_File <> "" Then
            MsgBox "ファイルが存在します。"  'ファイルがある場合(ファイル名とメッセージを表示)
        Else
            MsgBox "ファイルがありません。" 'ファイルがない場合(メッセージを表示)
    End If

End Sub
'

 

●実行前~実行後 ※プログラム実行後、指定したフルパス(”C:\TEST\sample01.txt”)のファイル有無を確認して検索結果がメッセージボックスに表示されました。
(画面クリックして拡大)

 

 

 

 

EXCEL VBA 指定したフォルダーを検索してフォルダー存在の有無を確認する。

 

 

●プログラム説明 (サンプル②)

下記のサンプルプログラムは、指定したフォルダーを検索して存在の有無を確認するサンプルプログラムです。

【フォルダーの検索先】
“C:\TEST\

 

'
'******** AKIRA55.COM ******* https://akira55.com/dir/
'

Sub Dir関数02()  '指定したフォルダーの存在を確認します。

    Dim Check_Dir As String
    
    Check_Dir = Dir("C:\TEST", vbDirectory)  '引数に「vbDirectory」を指定する事で、
    
    If Check_Dir <> "" Then
            MsgBox Check_Dir & "フォルダーが存在します。"  'フォルダーがある場合(フォルダー名とメッセージを表示)
        Else
            MsgBox "ファイルがありません。"  'フォルダーがない場合(メッセージを表示)
    End If

End Sub
'

 

●実行前~実行後 ※プログラム実行後、指定したフォルダー(”C:\TEST)の有無を確認して検索結果がメッセージボックスに表示されました。
(画面クリックして拡大)

 

 

 

 

EXCEL VBA 指定したフォルダーを検索してファイルとフォルダーの一覧表示する。

 

 

●プログラム説明 (サンプル③)

下記のサンプルプログラムは、指定したフォルダーを検索しファイルとフォルダーの一覧表示するサンプルプログラムです。

【フォルダーの検索先】
“C:\Akira55\

 

'
'******** AKIRA55.COM ******* https://akira55.com/dir/
'

Sub Dir関数03()  '指定したフォルダー内を一覧表示します。

    Dim Check_Dir, SetFile As String
    Dim I As Long
    
    Cells.ClearContents 'シートの文字列を全て削除
    
    I = 2  '2行目から表示

    Check_Dir = "C:\Akira55\"
    
    Cells(1, "A").Interior.ColorIndex = 22
    Cells(1, "A") = "フォルダー内一覧"
    
    SetFile = Dir(Check_Dir, vbNormal + vbDirectory)  '普通ファイルとフォルダーを指定( vbNormal + vbDirectory)

    Do Until SetFile = ""    'ファイルとフォルダーがなくなるまで繰り返す
        
        If "." <> SetFile And ".." <> SetFile Then  'カレントフォルダー・親フォルダー以外を表示させる。
            Cells(I, "A") = SetFile  'ファイル名または、フォルダー名をA列に表示します。

            I = I + 1  '1行加算する。
        End If
        
    SetFile = Dir  '次のファイルかフォルダー取得
    
    Loop  '繰り返す。

End Sub
'

 

 

●実行前~実行後 ※プログラム実行後、指定したフォルダー(”C:\Akira55\”)からファイル名とフォルダー名をワークシートのA列に一覧表示されました。
(画面クリックして拡大)

 

 

 

EXCEL VBA ダイアログボックスで選択したファイルの拡張子(種類)ごとに、ファイルをワークシートに振り分る

 

 

●プログラム説明 (サンプル④)

下記のサンプルプログラムは、ダイアログボックスで選択したファイルの拡張子(種類)ごとに、ファイルをワークシートに振り分けるサンプルプログラムです。

【プログラムの流れ】
①ワークシートをクリアーする。
②ダイアログボックスでファイルを選択します。(拡張子ごとに振り分けるファイルを指定)
③選択したファイルの拡張子から拡張子の一意データを作成する。
④1行目に拡張子の一意データを表示します。
⑤拡張子ごとに、ファイルを振り分けます。

 

'
'******** AKIRA55.COM ******* https://akira55.com/dir/
'
Sub Dir関数04()  'ダイアログボックスで選択したファイルの拡張子(種類)毎に、ファイルをワークシートに振り分けます。
 
    Dim Ext_Collection As New Collection
    Dim FileList As Variant
    Dim FileName, Extension As String
    Dim I, L, M, X, lRow, lCol As Long
 
   
    Cells.Clear  'シートをクリアー
     
    FileList = Application.GetOpenFilename(FileFilter:="ファイル(*.*),*.*", MultiSelect:=True)  'ダイアログボックスを開きます(複数選択可能:MultiSelect:=True)
     
    If VarType(FileList) = vbBoolean Then   'ファイルを選択していなければ、プログラム終了
        Exit Sub
    End If
    
    On Error Resume Next  'エラーが発生しても続行する。
    
    For I = 1 To UBound(FileList)  '選択したファイルを最後まで繰り返す。
    
        L = InStrRev(FileList(I), "\")
        FileName = Mid(FileList(I), L + 1)  'パスからファイル名を抜き出す。
    
        M = InStrRev(FileName, ".")
        Extension = Mid(FileName, M + 1)  'ファイル名から拡張子を抜き出す。
        
        Ext_Collection.Add Extension, Extension '一意のデータを作成(拡張子)
        
    
    Next I
    
    On Error GoTo 0
    
    For I = 1 To Ext_Collection.Count  '1行目に一意のデータを表示する。B⇒G
    
        Cells(1, I + 1) = Ext_Collection(I)  '一意のデータを順番に1行目に表示する。
        Cells(1, I + 1).Interior.ColorIndex = I + 2  '1行目に背景色を塗りつぶす。3番の赤より~
    Next I
    
    lCol = Cells(1, Columns.Count).End(xlToLeft).Column  '一意のデータを代入された最終列を取得(列番号)
    
    For I = 1 To UBound(FileList)  ''選択したファイルを最後まで繰り返す。
    
        L = InStrRev(FileList(I), "\")
        FileName = Mid(FileList(I), L + 1)   'パスからファイル名を抜き出す。
    
        M = InStrRev(FileName, ".")
        Extension = Mid(FileName, M + 1)      'ファイル名から拡張子を抜き出す。
        
        For X = 2 To lCol
            If Extension = Cells(1, X) Then  '1列名に表示されている拡張子と選択ファイルの拡張子が一致するか確認する。
                lRow = Cells(Rows.Count, X).End(xlUp).Row + 1  '拡張子が一致した場合は、該当する拡張子の列の最終行+1を取得する。
                Cells(lRow, X) = FileName  '一致した拡張子の最終行+1にファイル名を記入する。
            End If
        Next X
    
    Next I
    
        
End Sub
'

 

 

●実行前~実行後 ※プログラム実行後、ダイアログボックスで選択したファイルを拡張子ごとにファイルが割り振られました。
(画面クリックして拡大)

 

 

最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。

 

AKIRA