2019.10.23スポンサーリンクこんにちは、VBAエンジニアのやすこれです。みなさんは、VBAでDir関数を使ったことがありますか?VBAで任意の名前のファイルがあるかどうか調べたいVBAで任意のフォルダの全ファイル名を取得したいVBAでのファイル一覧取得方法を知りたい!という方もいるのではないでしょうか。そこで今回は、Dir関数をファイル一覧取得の実例つきでご紹介します。引数を省略したDir関数を利用してファイル一覧を取得Dir関数とワイルドカードを利用してファイル一覧を取得Dir関数とLike演算子を利用して任意の拡張子のファイル一覧を取得FileSystemObjectを使ったファイル名取得方法VBAのDir関数まとめDir関数の使い方Dir関数の基本的な使い方Dir関数は、パス名で指定したファイルが存在した場合に、そのファイルのファイル名を返す関数です。属性]は省略可能(既定値は「標準ファイル」)パス名を指定したDir関数を使った直後は「パス名」も省略可能コード例Dir("C:\ドキュメント\SampleFile.xlsx")「C:\ドキュメント\SampleFile.xlsx」が存在する場合、「Sample.xlsx」を返し、存在しない場合は「””」を返す。コード例では「属性」を省略しており、「標準ファイル」からパスを検索している。他にも、引数を指定することでファイルではなくフォルダ名を取得できたり、隠しファイルから検索ができたりするので、詳しく解説していきます。Dir関数の「引数」について「属性」に指定できる引数を紹介します。エイリアスファイル(Macのみ使用可)例えば、任意のフォルダ名を検索したい時には、次のように使用します。vbDirectory)「C:\ドキュメント\SampleFolder」フォルダが存在する場合、「SampleFolder」を返し、存在しない場合は「””」を返す。その他の引数についても使い方は同じですので試してみてください。対象ファイルまたはフォルダの「属性」は「GetAttr」関数で取得することができます。GetAttr(“C:\ドキュメント\SampleFolder”)上記コードは、「16(フォルダ)」を返します。引数を省略して同条件で検索ここでは、「パス名」と「属性」の両方を省略する使い方を紹介します。「パス名」と「属性」の両方を省略したDir関数を使うためには、引数を指定したDir関数を実行する必要があります。引数を指定したDir関数を使った直後に、引数を省略したDir関数を使用することで、同条件で次のファイル(フォルダ)を検索することができます。vbNormal)」のあとに引数を省略した「Dir()」を使用した次のコードを書きます。Dir()上記コード内の「Dir()」は、直前のDir関数で指定されている「パス名:”C:\ドキュメント\”」「属性:vbNormal」を引き継ぎ、直前に検索したファイルの次のファイルを検索するので、結果は画像の通りとなります。Dir関数のこの性質は非常に重要なので、しっかり覚えておきましょう。便利なDir関数にも注意することがあります。それはエラーが起き、処理が中断されてしまうことです。Dir関数のエラーは先ほど紹介した、引数を省略して直前の条件を引き継ぎ、次のファイルを検索する「Dir()」時に発生します。具体的には次の2つの場合にエラーが発生します。返り値が「””」となるDir関数の直後に「Dir()」を使用した場合どちらも画像のように「プロシージャの呼び出し、または引数が不正です。」というエラーが発生します。エラーが発生しないよう、引数を省略した「Dir()」を使う場合は、下記2点を確認してから使うようにしましょう。直前に引数を指定したDir関数があるか引数を省略した「Dir()」の直前のDir関数の返り値が「””」となっていないか次に紹介する、ファイル一覧取得方法でも上記ポイントを含む部分があるので、しっかり理解しておきましょう。Dir()Loopまずはじめに、取得したファイル名を書き込むシートと対象行の初期値を変数に定義しています。1つづいて次の部分で、Dir関数に任意のパス(「C:\ドキュメント\」フォルダ内「標準ファイル」)を指定して取得したファイル名の初期値を変数「buf」に格納します。“”」つまり、同条件でのファイル名の返り値が「””」となるまでループを繰り返します。ループ内では、対象シートの対象セルにファイル名を書き込み、対象行を「1」加算しています。その後、変数「buf」に「Dir()」つまり直前のDir関数と同条件で検索した次の結果を格納してループの初めに戻っています。Dir()Loop指定したフォルダが上記画像の状態の時、実行結果は次の画像の通りとなります。Dir()Loopまずはじめに、取得したファイル名を書き込むシートと対象行の初期値を変数に定義しています。1つづいて次の部分で、Dir関数に任意のパス(「C:\ドキュメント\*.xlsx」に該当する「標準ファイル」)を指定して取得したファイル名の初期値を変数「buf」に格納します。“”」つまり、同条件でのファイル名の返り値が「””」となるまでループを繰り返します。ループ内では、対象シートの対象セルにファイル名を書き込み、対象行を「1」加算しています。その後、変数「buf」に「Dir()」つまり直前のDir関数と同条件で検索した次の結果を格納してループの初めに戻っています。Dir()Loop指定したフォルダが上記画像の状態の時、実行結果は次の画像の通りとなります。Dir()Loopまずはじめに、取得したファイル名を書き込むシートと対象行の初期値を変数に定義しています。1つづいて次の部分で、Dir関数に任意のパス(「C:\ドキュメント\」フォルダ内「標準ファイル」)を指定して取得したファイル名の初期値を変数「buf」に格納します。“”」つまり、同条件でのファイル名の返り値が「””」となるまでループを繰り返します。ループ内では「If」文と「Like」演算子を使い、「buf」に格納されたファイル名の拡張子が「.xlsx」の場合のみ処理を実行させています。条件に合致した場合は、対象シートの対象セルにファイル名を書き込み、対象行を「1」加算しています。最後に、変数「buf」に「Dir()」つまり直前のDir関数と同条件で検索した次の結果を格納してループの初めに戻っています。Dir()Loop指定したフォルダが上記画像の状態の時、実行結果は次の画像の通りとなります。FileSystemObjectを使ったファイル名取得方法ここまでは、Dir関数を使ってファイル名を取得してきましたが、次のように「FileSystemObject」を使ってもファイル名を取得することができます。Nothing結果は次の画像の通りとなります。順にコードを解説します。CreateObject("Scripting.FileSystemObject")「FileSystemObject」を使う際には、まずはじめに、オブジェクトを生成する必要があります。2~3行目の部分ですが、決まり文句なのでそのまま覚えてしまいましょう。fso.GetFileName("C:\ドキュメント\SampleFile.xlsx")続く5行目の部分では生成した「FileSystemObject」の「GetFileName」メソッドを使用してファイル名を取得します。パスが存在する・しないに関わらず、引数に指定したパスのファイル名にあたる文字列を返すので注意しましょう。Nothing最後に、生成した「FileSystemObject」を解放しています。このコードを実行しないと、メモリにオブジェクトが残ったままとなり、無用な負荷をかけてしまいます。生成文と同様、決まり文句ですので、こちらも覚えてしまいましょう。このように、Dir関数以外の方法でもファイル名を取得することができるので、あわせて覚えておきましょう。VBAのDir関数まとめ今回はVBAのDir関数の使い方をご紹介いたしました。Dir関数を使えば、任意のパス名からファイル名や、フォルダ名を取得できるので、使いこなせば非常に便利です。今回紹介したファイル一覧の取得方法も使いこなせるようにしておきましょう。注意点としても紹介した、引数を省略した「Dir()」で起きるエラーも覚えておきましょう。実例通り使ってみると、理解が深まり応用が効くのでおすすめです。"DesktopAppConverter"を使って変換ができるのか。使い方をわかりやすく解説してほしい。【ExcelVBA】Len関数の使い方とは?実務で使うテクニックも解説こんにちは、VBAエンジニアのやすこれです。無料で3台?EvernoteをカウントさせずPC上でアプリのように使う方法こんにちは。VBAエンジニアのやすこれです。みなさんは、情報の整理はどうしていますか?ぼくはEvernoteを使っています。次のような悩みを持っている方も多いと思います。思ったこともあるのではないでしょうか。そこで今回は、ファイルダイアログを表示して任意のファイルを選択できる「GetOpenFilename」メソッドのサンプルコード、その他の使い方について紹介します。【ExcelVBA】Mid関数の使い方とは?実務で使うテクニックも解説こんにちは、VBAエンジニアのやすこれです。いう方もいるのではないでしょうか。【Windows】OneDriveを無効化して自動起動を停止する方法を解説こんにちは。VBAエンジニアのやすこれです。みなさんは、OneDrive使っていますか?ぼくの場合、オンラインストレージはDropboxとGoogleDriveを使っているので使っていません。同じようにOneDrive以外のサービスを使っている方は、OneDriveは必要ないですよね。2017年12月やすこれ働きたくない。いう思いから投資をはじめ、ブログを書いてます。働かないために業務自動化を推し進め、幅広くExcel(VBA含む)の知識を身に付けました。その後、事務職からVBAエンジニアへの転職を果たしています。VBA開発・Excel指導依頼受け付けてます。Twitterやcoconala等でお気軽にDMください。2017年12月やすこれ働きたくない。いう思いから投資をはじめ、ブログを書いてます。働かないために業務自動化を推し進め、幅広くExcel(VBA含む)の知識を身に付けました。その後、事務職からVBAエンジニアへの転職を果たしています。VBA開発・Excel指導依頼受け付けてます。Twitterやcoconala等でお気軽にDMください。カテゴリーを選択ライフハック。