「Dir」はファイル名やフォルダ名を取得する関数です。Dir関数(ファイル名の取得)を利用することで、操作するファイルを絞ることができたり、ファイル/フォルダの存在確認を行うことができたりします。
Dir(パス+ファイル名)
⇒ファイル名を取得することができます(ファイルが存在しない場合「""」が返却されます)
Dir(パス+フォルダ名)
⇒フォルダ名を取得することができます(ファイルが存在しない場合「""」が返却されます)
一見簡単な関数に見えますが、実践的に利用するためには、ワイルドカードとの組み合わせや、Dir関数の利用シーンやTips・注意点を整理しておく必要があります。
このページでは、Dir関数の意味や使い方を初心者向けに1から解説していきます。サンプルコード付きで分かりやすく説明いたしますので是非最後までご覧ください
Dir関数とは?
Dir関数は、()内に指定したファイル名/フォルダ名を取得することができる関数です。
指定したファイルが存在しない場合には「""(長さ0の空文字)」が返される仕様のため、ファイル/フォルダの存在確認で用いられたりすることが多いです。
構文ルール:Dir関数
Dir(パス+ファイル名)
構文は非常に簡易的です。冒頭で解説したように、この構文では「ファイル名」を取得することができます。
(変数)= Dir(パス+ファイル名)
上記のようにすれば、変数には取得した「ファイル名」が格納されます。もしファイル名が格納されない(変数の値が空文字「"'」)の場合は、該当するファイルが存在しないということが分かります。
パス
⇒どのフォルダに存在するか?フォルダの場所を示す
C:\Users\User1\Desktop\work
パス+ファイル名
⇒オブジェクト名とも呼ばれます
C:\Users\User1\Desktop\work\test.txt
構文の形とポイントを押さえたうえで、早速サンプルコードを見ていきみましょう。
サンプルコード①:ファイル名の取得
'変数定義 Dim strFilePath As String '集計ファイルのパス 'Dir関数でファイルを探すフォルダのパス strFilePath = Range("C3").Value '指定したパスにファイルがない場合はエラーメッセージを表示 If Dir(strFilePath & "\*.xls*") = "" Then MsgBox "指定されたフォルダにはExcelファイルが存在しません" Exit Sub End If
5行目
変数「strFilePath」にC3セルの値(ファイルの存在確認を行いたいパス)を格納する
8行目
変数「strFilePath」の値が空文字("")の場合の条件分岐を定義する
(※ワイルドカード「*」については次章で解説)
もし、対象のファイル名が返されない場合(ファイルが存在しない場合)は、メッセージが表示されます。
このように、Dir関数はファイルの存在確認で利用されることが多くあります。
※上記サンプルコードで利用されていた変数宣言のDimの詳細はこちら。
Dir関数:ワイルドカードの利用
Dir関数はその処理の性質上、ワイルドカードとセットで利用される場合は多いです。先ほどのサンプルコードでも、ワイルドカードを利用していました。
ここでは、ワイルドカードの利用方法(そもそもワイルドカードって?)について解説していきます。
前提:ワイルドカードとは?
ワイルドカードを簡単に説明すると「どんな文字」にも該当する文字のことを指します。
つまり、ワイルドカードを用いれば、その文字列の「ワイルドカード部分」は全ての文字列として認識されるようになります。
例えば、「”*.xlsx”」 とした場合は「Book1.xlsx」も「あいうえお.xlsx」も含まれます。ワイルドカードは、Web検索などで用いたり、プログラミングなどで「任意の文字列」を表現したい場合に利用したりします。
VBAの世界では、以下のワイルドカードが利用可能です。
記号(名称) | 意味 |
---|---|
*(アスタリスク) | 任意の文字(列) |
?(クエスチョンマーク) | 任意の1文字 |
#(シャープ) | 任意の1桁の数字 ※半角 |
[(文字列)] | (文字列)に含まれる1文字 |
[!(文字列)] | (文字列)に含まれない1文字 |
サンプルコード②:ワイルドカードの利用/引数ブランク
FileName = Dir(strFilePath & "\" & "*.xls*") Do Set wb002 = Workbooks.Open(FileName:=strFilePath & "\" & FileName) wb002.Close FileName = Dir() Loop While FileName <> ""
1行目
Dir(strFilePath & "\" & "*.xls*")
ここの、Dirの引数にはワイルドカード(*.xls*)が設定されています。したがって、「.xls」を含むすべてのファイルがここに該当します。
5行目
FileName = Dir( )
ここまで「Dirは引数に指定したパスのフォルダ名を返す」と説明してきました。したがって、引数がブランクであるのは矛盾しているようにも思えます。何も取得されないのでは・・・?と。
実は、Dir関数は引数ブランクの場合「前に利用したワイルドカードを含むパスと同じ」フォルダにある「前回取得したファイル以外」のファイル名を取得できるのです。
引数ブランクのDir関数の動きは、上記のように繰り返し処理と組み合わせて利用されることが多いため、覚えておくとGoodです。
サンプルコードで出てきたSetステートメントについての詳細はこちらです。
0からプログラミングを学びたい方は
プログラミングをより実践的に学びたい―。実際にコーディングをしながら学びたい―。独学に限界を感じている―。
そんな方には、無料体験/オンライン完結もあるプログラミングスクールで学ぶのがおすすめです。都度検索しながら知識を補完していくのではなく、1から体系立てて学ぶことで短時間・かつ効率的にスキルハックすることが可能です。