Excel VBA についての備忘録

エクセルVBAなどを中心に業務効率化にかかわる内容を趣味の赴くままに紹介します。

【VBA】フォルダ内のファイル名一覧を取得する(Do~LoopとDir)

今回はフォルダ内のファイル名一覧を取得した例(Do~LoopとDir)をブログにしたいと思います。
最終的にはシート一覧を取得できるようにして、ユーザーが処理したいブック・シートをコピペで転記できるリスト作成したいです。

目次

Do~Loop

Do~Loopの処理は指示した条件が成立するか否かを判断し、繰り返し処理を行うものです。
For~Next、For~Eachなどもありますが条件分岐で判断することが多く、私はよく活用しています。
まずはDo~Loop構文を確認してみます。

Do~Loop構文

構文①
Do [{While or Until} 条件]
処理
Loop
構文②
Do
処理
Loop {While or Until} 条件

構文①では繰り返し処理開始前に条件を確認します。構文②ではその逆で繰り返し処理後に条件を確認します。
{}の中は WhileまたはUntilを記述します。
Whileは条件を満たす間、処理を繰り返し実行します。
Untilは条件を満たすまで、処理を繰り返し実行します。

条件はTrue、Falseを評価する数式を指定します。
私は構文①のDo Whileしか使用しません。うまく活用すれば1つで補間できるはず。です。
以下のxが変数のコードは xが1以下である限り繰り返し、yが変数のコードはyが1より大きくなるまで繰り返します。

    Dim x, i As Variant
    x = 0
    i = 1
        
    Do While x <= 1
        Cells(i, 1).Value = x
        i = i + 1
        x = x + 0.1
    Loop
    Dim y, j As Variant
    y = 0
    j = 1
        
    Do Until y > 1
        Cells(j, 2).Value = y
        j = j + 1
        y = y + 0.1
    Loop

Dir関数

次にDir関数についてです。
Dirはそもそも何のことだろう?と英語に弱い私は疑問思ったので調べると
Directoryの略でしたね(笑)

Dir関数は、指定したファイル属性などと一致するファイル、フォルダの名前を返す関数です。

Dir()を繰り返せばフォルダ内のすべてのファイルについて名前を取得できます。
Dir("C:\"&"*.xls*")でCドライブ直下のExcelファイルすべてについて名前を取得できます。

Do~Loopと組み合わせると下記例の記載となります。

    Dim name As Variant
    name = Dir("C:\" & "*.xls*")
    
    Do While name <> ""
        name = Dir()
    Loop

この二つを組み合わせて、指定のフォルダ内にあるファイルに対し繰り返し処理を作成する予定です。