0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Q19.フォルダ内のファイルリストを表示するには?

Posted at

今回は、特定のフォルダの中にあるファイルを一覧で表示するというマクロについて考えていきます。
例えば、ファイルの名前を一気にコピーしたいときとかに使えたりします。
それだけであれば、コマンドプロンプトから同じようなことができますし、そっちの方が手っ取り早かったりもします。

マクロで作る場合は、そこからさらに改良することもできます。
ファイル名と同等のフォルダを一気に作ったりだとか、ファイル名を一気にリネームしたりとか。

ただし、今回作るのはあくまでもファイルを一覧表示させるところまでです。

■ポイント

ファイルの一覧を取得するには、Dir関数を使用するのが一般的です。
buf = Dir("C:\Sample\Book1.xls")
のように使います。
一致した場合は、一致したファイル名を返します。
この場合は、Book1.xlsを返します。

さらに、Dir関数ではワイルドカードを使ってファイル名をしていることができます。
buf = Dir("C:\Sample*.xls")
とすると、Sampleフォルダ内にある.xlsを含むファイルをすべて返します。
ただし、一度にすべてを出力するわけではありません。

2回目以降は引数なしで使用することができます。
buf = Dir()といったように。
こうやって繰り返し利用することによって、2つ目以降のファイル名を取得することができます。
そして、最後は空文字を返します。

つまり、空文字を返すまでループすれば、一致したファイル名を全て取得することができるわけです。

と、文章で読んでもいまいちわかりにくいと思いますので、ぜひ回答を見て実際に試してみてください。

■回答

Sub Q19_Answer()
    Dim buf As String, cnt As Long, Path As String
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = True Then
            Path = .SelectedItems(1)
        End If
    End With
    Range("E2").Value = Path
    cnt = 2
    buf = Dir(Path & "\")
    Do While buf <> ""
        cnt = cnt + 1
        Cells(cnt, 2) = buf
        buf = Dir()
    Loop
End Sub

■解説

今回は前半部分で、フォルダを指定するダイアログを出力する処理を記述しています。
そして、そのフォルダ内にあるファイル一覧を取得しています。

前述したとおり、空文字を返すまでループ処理をしています。
この部分です。
Do While buf <> ""
cnt = cnt + 1
Cells(cnt, 2) = buf
buf = Dir()
Loop

これで、最初に指定したフォルダにあるファイル一覧を取得することができます。

実行例は以下です。まずデスクトップに新しいフォルダーを作成し、その中に
テキストファイルを複数用意しました。

Q19.png

そして、マクロを上記のマクロを実行してみます。
すると、このようにファイル一覧を取得することができました。

Q19-2.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?