【VBAマクロ】Dir関数でできることを徹底解説!【エクセル初心者向け】

スポンサードリンク
VBA
  • 他の人が作ったマクロを見ていたら、「Dir」ってのがあったんだけど、これは何?
  • 「Dir」の使い方や書き方を知りたい
  • 「Dir」関数の書き方を忘れてしまった…

このようなお悩みをお持ちですか?
この記事を読むことで、下記のことがわかります。

  • 「Dir」の概要がわかる
  • 「Dir」を使ってできることを学べる
  • 「Dir」の使い方や書き方を知れる

VBAマクロ歴3年の私が、できるだけわかりやすく解説いたします。

※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。

スポンサードリンク

Dir関数とは?(エクセルのVBAマクロ)

「Dir」はパソコンのフォルダ内を検索してくれる関数です。

ファイルを<br>探している人
ファイルを
探している人

「sample.xlsx」っていうファイル、どこに置いたっけ?
たしかこのフォルダに入れたはずなんだけど…。ファイルが多くて見つけられない…

こういう場合、フォルダ内で検索をかけますよね?
それと同じようなことを「Dir関数」が行っていると思ってください。

では「Dir関数」を使ってどんなことができるのか?
次項で詳しく解説していきます。

スポンサードリンク

Dir関数を使ってできること

前項で軽く説明しましたとおり、「Dir」はフォルダ内を検索してくれる関数です。
今回はよく使う2つの例を紹介いたします。

ファイルが存在するかを確認

Dir関数を使って、フォルダ内に特定のファイルがあるかどうかを確認することができます。
前項で例に挙げた検索です。
早速VBAコードをご覧ください。

Sub ファイルの存在確認()
    Dim fileName As String
    fileName = Dir("C:\Utatane\sample.xlsx")
    If fileName <> "" Then
        MsgBox "ファイルが見つかりました"
    Else
        MsgBox "ファイルが見つかりません"
    End If
End Sub

実行結果が下図です。

ファイル検索の実行結果

1つ1つ解説していきます。

プロシージャの作成

Sub ファイルの存在確認()

End Sub

プロシージャなど、マクロの基礎は下記記事でわかりやすく解説しております。
コードだけではなく、開発タブの表示からマクロの保存まで知りたい方はご参考ください。

変数の宣言

    Dim fileName As String

上記コードにて、以降使用する変数の宣言を行っております。
変数や宣言についての詳しい解説は、下記記事をご参考ください。

フォルダ内を検索

    fileName = Dir("C:\Utatane\sample.xlsx")
    If fileName <> "" Then
        MsgBox "ファイルが見つかりました"
    Else
        MsgBox "ファイルが見つかりません"
    End If

上記コードにて、フォルダ内を検索しております。

コードの3行目に注目してください。
Dirの後ろの()内には、「探すフォルダのパス」+「探すファイル名」を指定します。

フォルダパスは、探すフォルダを開いたアドレスバーで確認ができます。

パスの確認

今回は、「Cドライブ」の「Utatane」フォルダの中に「sample.xlsx」というファイルがあるか確認しています。
パス全体は「”(ダブルクォーテーション)」で囲ってください。

コードの4~8行目で、条件分岐を行っております。
指定のフォルダに指定のファイルが存在するかしないかで下記のように表示させています。

  • 指定したファイルが存在する:メッセージボックスに「見つかりました」と表示
  • 指定したファイルが存在しない:メッセージボックスに「見つかりません」と表示

分岐させるためにIf文を使っております。
If文やメッセージボックスを表示させる方法については下記記事をご参考ください。

マクロが完成したら、実行して動作を確認してみましょう。

マクロの実行ボタン

エクセル内に作成した自作のボタンを押してマクロを実行させることも可能です。
ボタンの作り方は、下記記事でわかりやすく解説しております。

ファイルが見つかった場合、そのファイルを開いて操作するといったこともできます。

フォルダ内のファイル一覧を取得

Dir関数を使って、フォルダ内のファイル一覧を取得することができます。
今回は取得したファイル一覧をエクセルシート内に書き出した例です。
早速VBAコードをご覧ください。

Sub ファイル一覧を書き出し()
    Dim file As String
    Dim i As Integer
    i = 1
    file = Dir("C:\Utatane\*.*")
    Do While file <> ""
        Range("A"&i).Value = file
        file = Dir()
        i = i + 1
    Loop
End Sub

実行結果が下図です。

ファイル一覧取得の実行結果

前項で解説した部分は割愛し、ファイル一覧を取得するところのみ解説いたします。

ファイル一覧を取得

    i = 1
    file = Dir("C:\Utatane\*.*")
    Do While file <> ""
        Range("A"&i).Value = file
        file = Dir()
        i = i + 1
    Loop

上記コードにて、ファイル一覧を取得してエクセルシート内に書き出ししております。

まずは変数「i」に1を代入します。
これは後ほどループ文(Do While)で使います。

コードの5行目で特定のフォルダからファイル名を取得しています。
()内に取得したいファイルが入ったフォルダのパスを書いてください。
フォルダパスを書いたら、その後ろに「\*.*」を書きます。
これでフォルダ内の全てのファイルを探してくれます。

【*(アスタリスク)の役割は?】
「*」は「何でもいいので0文字以上の文字を含む」という意味になります。
*.*」と記述することで、「test.csv」でも「Utatane.xlsm」でも取得できます。
すなわち、これでフォルダ内の全てのファイルを取得することができるわけです。

「file = Dir(“C:\Utatane\*.xlsx”)」にすることで、「xlsx」ファイルのみを取得することもできます。

今回は「Cドライブ」の「Utatane」フォルダ内のファイルを取得しています。
この段階ではまだファイル一覧ではなく、1つのファイル名を取得しただけです。
以降ループ処理を行うことで、結果的にファイル一覧を取得することができます。

6~10行目がそのループ処理です。
Do While文については下記記事でわかりやすく解説しております。ご参考ください。

簡単に解説すると、取得したファイル名をA1から順番に書き出していきます。
フォルダ内のファイルが無くなるまでループを続けるというものです。

マクロが完成したら、前項と同じく実行してみましょう。
うまく動作しない場合は、次項を参考に対処してみてください。

スポンサードリンク

うまく動作しないときの対処法

エラーが発生する

コンパイルエラー・実行時エラー

コードに問題がある場合が多いです。
「”」や()など、2つセットの記号が片方だけになっていないかなど、コードを再確認しましょう。
セル名を「”」で囲っていない場合でもエラーが発生します。

警告表示

マクロが無効になっている表示

上記の表示が出た場合は、マクロが無効になっています。
エクセルに表示された「コンテンツの有効化」をクリックするか、下記記事を参考にセキュリティ設定を変更してください。

スポンサードリンク

最後に

VBAのDir関数を使ってでできることを解説いたしました。

当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

最後までお読みいただき、ありがとうございました。がんばってください!

タイトルとURLをコピーしました